Saltar para o conteúdo principal
50% de desconto todos os planos, tempo limitado. A partir de $2.48/mo
10 min left
Bases de dados e análise

Como instalar o Adminer em um VPS Linux (com Nginx e segurança adequada)

H Por Haze 10 min de leitura
Adminer login screen served by Nginx on a Linux VPS

Uma instância do Adminer deixada em execução em um endereço aberto é uma das formas mais silenciosas de perder um banco de dados. Alguém implanta o único arquivo PHP para verificar uma tabela, a URL funciona e o arquivo permanece lá por meses até que uma cópia desatualizada se torne uma superfície de ataque. Esse modo de falha é o motivo pelo qual este guia de instalação do Adminer em um VPS Linux dedica tanto espaço à segurança quanto à implantação.

O Adminer é um único arquivo PHP (cerca de 503 KB na versão completa) que suporta MySQL, MariaDB, PostgreSQL, SQLite e vários outros bancos de dados. É trivialmente fácil de implantar, o que é exatamente o motivo pelo qual muitas vezes é implantado de forma descuidada.

Você irá instalá-lo em um VPS moderno com Ubuntu ou Debian, Nginx e PHP-FPM, adicionar autenticação HTTP, uma lista de permissão de IPs e HTTPS com Let's Encrypt, e terminar com uma regra clara sobre quando ignorar completamente a configuração pública e acessar o Adminer por um túnel SSH.

TL;DR

  • Adminer é um único arquivo PHP que você baixa para um webroot com wget em um webroot; Nginx e PHP-FPM servem o arquivo.
  • Uma instância pública do Adminer precisa dos três: uma camada de autenticação HTTP, uma lista de permissão de IPs e HTTPS. Apenas um deles não é suficiente.
  • Para os bancos de dados mais sensíveis, não exponha o Adminer de forma alguma: vincule-o a localhost e acessá-lo por um túnel SSH.
  • Atualizar é um único comando: execute novamente o wget comando de download. Versões de segurança recentes tornam a manutenção da atualização uma tarefa operacional real, não um luxo.

Pré-requisitos: O que você precisará antes de instalar

Este guia tem como alvo o Ubuntu 26.04 e 24.04 mais o Debian 13, com notas de compatibilidade para o Ubuntu 22.04 e Debian 12. As versões padrão do PHP-FPM são 8.5 no Ubuntu 26.04, 8.3 no Ubuntu 24.04, 8.4 no Debian 13, 8.2 no Debian 12 e 8.1 no Ubuntu 22.04.

  • Um VPS Linux com Ubuntu 22.04, Ubuntu 24.04, Ubuntu 26.04, Debian 12 ou Debian 13, com um usuário que tenha sudo acesso
  • Um servidor de banco de dados (MySQL, MariaDB ou PostgreSQL) já em execução, seja neste VPS ou em um que o Adminer possa acessar pela rede. Este guia não instala um banco de dados; instala a ferramenta usada para administrar um.
  • PHP-FPM dos repositórios suportados pelo sistema operacional. Embora o arquivo compilado do Adminer suporte PHP 5.3+, use a versão atual fornecida pela distribuição listada acima em vez de instalar uma versão PHP obsoleta.
  • Para a configuração HTTPS pública, você precisa de um nome de host que aponte para o VPS e as portas TCP de entrada 80 e 443 disponíveis. fluxo de trabalho do Certbot Nginx usa validação HTTP-01 na porta 80. O Let's Encrypt agora suporta certificados de endereço IP de curta duração, mas o Certbot não os instala automaticamente por meio de seu fluxo de trabalho Nginx, portanto este guia usa um hostname.

Nota: Este guia usa Nginx por design. Se você usa Apache, a lógica de download e proteção ainda se aplica, mas a configuração do bloco de servidor abaixo não.

Instalar Nginx e PHP-FPM

Comece atualizando o índice de pacotes e instalando Nginx e PHP-FPM junto com a extensão de banco de dados PHP que seu servidor precisa:

sudo apt update
sudo apt install -y nginx php-fpm php-mysql

Para um backend PostgreSQL, instale php-pgsql em vez de, ou junto com, php-mysql:

sudo apt install -y php-pgsql

Confirme que o socket PHP-FPM existe:

ls /run/php/

Associe o nome do arquivo de socket à versão listada acima, por exemplo, php8.5-fpm.sock no Ubuntu 26.04, php8.3-fpm.sock no Ubuntu 24.04, ou php8.4-fpm.sock no Debian 13. Se o socket esperado estiver faltando, verifique o serviço correspondente com systemctl status php8.5-fpm, substituindo 8.5 pela versão instalada no seu sistema operacional.

Dica profissional: Uma incompatibilidade de socket é uma possível causa de um 502 Bad Gateway. Confira que fastcgi_pass com o nome do arquivo em /run/php/, confirme que o serviço PHP-FPM correspondente está em execução, e verifique /var/log/nginx/error.log se o erro persistir.

Baixar o Adminer

Crie um diretório para servir o Adminer e, em seguida, baixe o único arquivo para ele. latest.php URL sempre aponta para a versão estável atual:

sudo mkdir -p /var/www/adminer
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php

Se você trabalha apenas com MySQL ou MariaDB, a versão somente para MySQL é menor (cerca de 406 KB) e é obtida da mesma forma:

sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest-mysql.php

Mantenha o diretório do Adminer de propriedade do root enquanto concede acesso de leitura ao PHP-FPM:

sudo chown -R root:root /var/www/adminer
sudo chmod 755 /var/www/adminer
sudo chmod 644 /var/www/adminer/adminer.php

You do not need to track the version number: the latest.php URL significa que executar novamente o download é também o seu caminho de atualização, ao qual a seção de manutenção retorna.

Configurar o bloco de servidor Nginx

Crie um bloco de servidor que serve o diretório do Adminer e passa .php as solicitações ao socket PHP-FPM que você identificou anteriormente. Abra um novo arquivo de site:

sudo nano /etc/nginx/sites-available/adminer

Cole o seguinte, substituindo db.example.com pelo hostname já apontado para seu VPS e confirmando que o fastcgi_pass socket corresponde à sua versão PHP:

# /etc/nginx/sites-available/adminer
server {
    listen 80;
    server_name db.example.com;
    root /var/www/adminer;

    location = / {
        return 302 /adminer.php;
    }

    location = /adminer.php {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location / {
        return 404;
    }
}

Habilite o site criando um link simbólico em sites-enabled, e então teste a configuração sem recarregar o Nginx ainda:

sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/
sudo nginx -t

nginx -t deve relatar que a sintaxe é válida e o teste foi bem-sucedido. Não recarregue o Nginx ainda porque o site não tem autenticação ou restrição de IP. Continue com essas duas etapas de fortalecimento; a etapa de restrição de IP realiza o primeiro recarregamento após ambas as proteções estarem em vigor.

Bloquear o Acesso: Autenticação, Restrição de IP e HTTPS

Uma instância pública do Adminer fica diretamente na frente das credenciais do seu banco de dados, portanto, precisa de defesas em camadas, e não de um único bloqueio. As três camadas a seguir fazem trabalhos diferentes: a autenticação HTTP impede qualquer pessoa sem senha no servidor web, a lista de permissão de IPs impede qualquer pessoa de se conectar de um endereço não aprovado, e o HTTPS impede que as credenciais digitadas cruzem a rede em texto simples. Adicione todos os três. Nenhum deles substitui os outros.

Adicionar autenticação HTTP básica

Instale o htpasswd utilitário, incluído no pacote apache2-utils pacote no Ubuntu e Debian:

sudo apt install -y apache2-utils

Crie um arquivo de senha e um usuário (você será solicitado a inserir a senha):

sudo htpasswd -B -C 10 -c /etc/nginx/.htpasswd adminuser
sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd

Adicione as diretivas ao local PHP exato do Adminer para que a própria solicitação PHP seja protegida:

location = /adminer.php {
    auth_basic           "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

Ambas as diretivas estão documentadas no referência do módulo Nginx HTTP auth_basic. Executar sudo nginx -t para validar a configuração, mas não recarregue o Nginx ainda; a lista de permissão de IPs é adicionada a seguir. Não envie as credenciais do Basic Auth via HTTP simples; aguarde até que o HTTPS seja habilitado abaixo.

Restringir o Acesso por Endereço IP

A autenticação básica bloqueia usuários não autenticados, mas o Nginx ainda recebe solicitações de todas as fontes. Substitua a localização PHP do Adminer existente pelo seguinte bloco combinado para que as regras de IP e as diretivas de Basic Auth permaneçam em um único local:

location = /adminer.php {
    satisfy all;

    allow                203.0.113.10;
    allow                203.0.113.0/28;
    deny                 all;

    auth_basic           "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

Substitua os endereços de exemplo pelo seu endereço IP público real ou faixa de rede confiável. Mantenha apenas as entradas allow que você precisa e exclua exemplos não utilizados. A primeira entrada demonstra um único endereço, enquanto a segunda demonstra um intervalo CIDR. O Nginx retorna 403 Forbidden a endereços que não correspondem a uma allow regra allow. referência do módulo de acesso do Nginx documenta a sintaxe das diretivas. Teste e recarregue o Nginx:

sudo nginx -t && sudo systemctl reload nginx

Habilitar HTTPS com Let's Encrypt

Com um domínio apontando para o VPS, instale o Certbot e seu plugin Nginx, depois solicite um certificado:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d db.example.com

O Certbot edita seu bloco de servidor para servir HTTPS na porta 443 e oferece redirecionar HTTP para HTTPS; aceite o redirecionamento. Ele também instala um temporizador de renovação, para que o certificado seja renovado automaticamente antes de expirar. Você pode confirmar o caminho de renovação com sudo certbot renew --dry-run, que deve ser concluído sem erros.

Agora acesse https://db.example.com/adminer.php de um endereço permitido e confirme que o Nginx solicita as credenciais de autenticação básica antes que o Adminer carregue.

Adminer login screen after first successful load, showing the database system dropdown and server and username fields

Escolhendo seu modelo de acesso: HTTPS público vs. túnel SSH

A configuração acima é apropriada quando você precisa de acesso via navegador a um banco de dados a partir de várias máquinas ou quando abrir uma sessão SSH é impraticável. Não é o único modelo e, para um banco de dados sensível, não é o mais defensivo.

Para configurações sensíveis, não exponha o Adminer publicamente. Diretrizes de segurança oficiais do Adminer recomenda torná-lo inacessível da internet pública sempre que possível. Se você escolher acesso apenas por túnel, substitua o bloco de servidor Nginx público por esta configuração somente de loopback e pule a configuração HTTPS pública:

# /etc/nginx/sites-available/adminer
server {
    listen 127.0.0.1:8080 default_server;
    server_name _;
    root /var/www/adminer;

    location = / {
        return 302 /adminer.php;
    }

    location = /adminer.php {
        auth_basic           "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location / {
        return 404;
    }
}

Teste e recarregue a configuração de substituição:

sudo nginx -t && sudo systemctl reload nginx

Em seguida, abra o túnel a partir de sua própria máquina:

ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip

Com o túnel em execução, abra http://127.0.0.1:8080/adminer.php. O Nginx aceita conexões do Adminer apenas pela interface de loopback do VPS, enquanto o SSH carrega o tráfego pela sua conexão criptografada. Isso usa o comportamento descrito na documentação de encaminhamento local do OpenSSH.

Use a configuração de HTTPS público, Basic Auth e lista de permissão de IPs quando precisar de acesso direto via navegador de várias máquinas. Prefira a configuração SSH somente de loopback quando o acesso público for desnecessário.

Ponto-chave: O Adminer mais seguro é aquele que nunca é acessível pela internet pública.

Manter o Adminer atualizado

A instância esquecida é o risco real aqui, e vale a pena tratá-la como uma tarefa programada em vez de uma ideia de última hora. Atualizar o Adminer é um único comando, o mesmo wget mesmo comando que você usou para instalá-lo, porque latest.php sempre obtém a versão atual:

sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php

Isso não é uma preocupação teórica. Adminer 5.4.3, lançado em 9 de julho de 2026, tratou de sete GitHub Security Advisories em uma única versão. O aviso anterior para CVE-2026-25892 mostrou que até o endpoint de verificação de versão do Adminer podia ser transformado em um vetor de negação de serviço não autenticado; o problema foi corrigido na versão 5.4.2. Uma cópia desatualizada acumula vulnerabilidades documentadas publicamente, portanto atualizá-la deve ser manutenção de rotina.

Nota: Fique na versão upstream atual do Adminer. repositório AdminerEvo foi arquivado em janeiro de 2025 e não é uma alternativa ativamente mantida.

Implantando em um VPS

Se preferir pular as etapas manuais, o Adminer está disponível como implantação com um clique no o marketplace da Cloudzy em um Cloudzy Linux VPS. A imagem do marketplace usa Apache, Basic Auth e um certificado autoassinado, portanto é diferente da pilha Nginx, lista de permissão de IPs e Let's Encrypt acima. Revise essas diferenças de segurança antes de inserir credenciais de banco de dados de produção.

A pegada própria do Adminer é negligível; o banco de dados determina o dimensionamento. Escolha CPU, memória e armazenamento com base no tamanho dos dados e índices do banco de dados, carga de consultas, contagem de conexões, backups e crescimento esperado, não com base no próprio Adminer.

Perguntas frequentes

É Seguro Expor o Adminer Publicamente em um VPS?

Não por conta própria. Se você deve expor o Adminer publicamente, coloque-o atrás de HTTP Basic Authentication, uma lista de permissão de IPs e HTTPS juntos. Esses controles reduzem o risco, mas não tornam a exposição pública sem riscos. Para bancos de dados sensíveis, vincule o Adminer a localhost e acesse-o por meio de um túnel SSH.

Como Acesso o Adminer Sem Expô-lo à Internet?

Configure o bloco de servidor Nginx somente de loopback mostrado acima para que o Adminer escute em 127.0.0.1:8080, depois executa ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip em sua própria máquina. Abra http://127.0.0.1:8080/adminer.php enquanto o túnel estiver em execução.

O Adminer Pode Conectar ao PostgreSQL Além do MySQL?

Sim. O Adminer suporta MySQL, MariaDB, PostgreSQL, SQLite, MS SQL e Oracle pronto para uso, com mais bancos de dados disponíveis via plugins. Instale a extensão PHP correspondente para seu banco de dados, por exemplo php-pgsql para o PostgreSQL, para que o PHP possa se comunicar com ele.

Como Mantenho o Adminer Atualizado?

Execute novamente o comando de download: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php. O latest.php URL sempre retorna a versão estável atual, portanto isso sobrescreve sua cópia com a versão mais recente. As recentes versões de segurança fazem com que isso valha a pena ser feito em um cronograma, em vez de apenas quando você se lembrar.

Devo instalar o Adminer pelo apt Pacote ou Fazer o Download Diretamente?

Baixe o arquivo único diretamente. Ele fornece a versão atual imediatamente e torna as atualizações um comando de uma linha, enquanto um pacote de distribuição pode ficar atrás da versão oficial. O arquivo direto é a mesma ferramenta com um caminho mais curto para as correções de segurança mais recentes.

Partilhar

Mais do blogue

Continue a ler.

Pronto para implantar? A partir de $2,48/mês.

Cloud independente, desde 2008. AMD EPYC, NVMe, 40 Gbps. Reembolso em 14 dias.