Como instalar o phpMyAdmin com Nginx (LEMP) no Ubuntu 18.04 LTS
Este tutorial mostrará como instalar o phpMyAdmin com Nginx, MariaDB e PHP7.2 (LEMP) no Ubuntu 18.04. phpMyAdmin é uma ferramenta de gerenciamento de banco de dados baseada na web, gratuita e de código aberto, escrita em PHP. Ele fornece uma interface gráfica da web para os usuários gerenciarem bancos de dados MySQL ou MariaDB. Você também aprenderá como habilitar a autenticação de dois fatores no phpMyAdmin.
Pré-requisitos
Para seguir este tutorial, você precisa ter um sistema operacional Ubuntu 18.04 em execução no seu computador local ou em um servidor remoto. Se você estiver procurando por um VPS (servidor virtual privado), poderá clicar neste link especial para obter crédito grátis de $100 na DigitalOcean. (Apenas para novos usuários). Se você já é usuário da DigitalOcean, pode clicar neste link especial para obter crédito grátis de $50 no Vultr (somente para novos usuários).
Presume-se que você já instalou a pilha LEMP no Ubuntu 18.04. Caso contrário, confira o seguinte tutorial.
- Como instalar a pilha LEMP (Nginx, MariaDB, PHP7.2) no Ubuntu 18.04
Com isso resolvido, vamos começar a instalar o phpMyAdmin.
Etapa 1: Baixe e instale o phpMyAdmin
phpMyAdmin está incluído no repositório de software Ubuntu 18.04, então podemos instalá-lo facilmente com o seguinte comando.
sudo apt update
sudo apt install phpmyadmin
Durante a instalação, você será solicitado a selecionar um servidor web para configurar. Nginx não está na lista, então pressione a tecla Tab e clique em OK para pular esta etapa.
Em seguida, selecione Sim para criar um novo banco de dados e deixe dbconfig-common
configurá-lo.
Isso também criará um novo usuário de banco de dados chamado phpmyadmin
. Dê uma senha a este usuário.
Feito isso, um novo banco de dados chamado phpmyadmin
é criado e o usuário do banco de dados phpmyadmin
possui os privilégios necessários para gerenciar este banco de dados. Se você estiver curioso como eu, você pode entrar no MariaDB e verificar quais privilégios o usuário phpmyadmin
recebeu.
Você pode usar o seguinte comando para fazer login no servidor MariaDB.
sudo mysql -u root
Em seguida, verifique os privilégios.
show grants for phpmyadmin@localhost;
Saída :
Como você pode ver, o usuário phpmyadmin
possui todos os privilégios no banco de dados phpmyadmin
. Agora você pode sair executando:
exit;
Etapa 2: Criar bloco de servidor Nginx
Para poder acessar a interface web do phpMyAdmin, precisamos criar um bloco de servidor Nginx executando o seguinte comando.
sudo nano /etc/nginx/conf.d/phpmyadmin.conf
Iremos configurá-lo para que possamos acessar o phpMyAdmin através de um subdomínio. Cole o seguinte texto no arquivo. Substitua pma.example.com
pelo seu subdomínio real e não se esqueça de criar um registro A para ele.
server {
listen 80;
listen [::]:80;
server_name pma.example.com;
root /usr/share/phpmyadmin/;
index index.php index.html index.htm index.nginx-debian.html;
access_log /var/log/nginx/phpmyadmin_access.log;
error_log /var/log/nginx/phpmyadmin_error.log;
location / {
try_files $uri $uri/ /index.php;
}
location ~ ^/(doc|sql|setup)/ {
deny all;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include snippets/fastcgi-php.conf;
}
location ~ /\.ht {
deny all;
}
}
Seus arquivos phpMyAdmin estão no diretório /usr/share/phpmyadmin/
. Salve e feche o arquivo. Em seguida, teste as configurações do Nginx.
sudo nginx -t
Se o teste for bem-sucedido, recarregue o Nginx para que as alterações tenham efeito.
sudo systemctl reload nginx
Agora você deve conseguir acessar a interface web do phpMyAdmin via
pma.example.com
Observe que o phpMyAdmin não funcionará nas versões recentes do Firefox. Você pode usar o Google Chrome para visitar a interface web do phpMyAdmin. Antes de inserir as credenciais do usuário no formulário de login, vamos habilitar o HTTPS.
Etapa 3: instalação do certificado TLS
Para proteger a interface web do phpMyadmin, podemos instalar um certificado Let’s Encrypt TLS gratuito. Instale o cliente Let’s Encrypt do repositório de software Ubuntu 18.04 como abaixo:
sudo apt install certbot python3-certbot-nginx
Python3-certbot-nginx
é o plugin Nginx para Certbot. Agora execute o seguinte comando para obter e instalar o certificado TLS.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --must-staple -d pma.example.com --email your-email-address
Explicação:
- –nginx: Use o autenticador e instalador Nginx
- –agree-tos: concorda com os termos de serviço do Let’s Encrypt
- –redirect: adiciona redirecionamento 301.
- –hsts: adicione o cabeçalho Strict-Transport-Security a cada resposta HTTP.
- –staple-ocsp: Ativa o grampeamento OCSP.
- –must-staple: Adiciona a extensão OCSP Must Staple ao certificado.
- O sinalizador -d é seguido por uma lista de nomes de domínio, separados por vírgula. Você pode adicionar até 100 nomes de domínio.
- –email: E-mail utilizado para cadastro e contato de recuperação.
Você será perguntado se deseja receber e-mails da EFF (Electronic Frontier Foundation). Após escolher S ou N, seu certificado TLS será automaticamente obtido e configurado para você, o que é indicado pela mensagem abaixo.
Teste seu certificado TLS
Acesse ssllabs.com para testar seu certificado e configuração TLS. Você deve obter A+ porque o HSTS está ativado.
Solucionar erro de login
Se você fizer login com a conta root MariaDB, poderá ver o seguinte erro.
#1698 - Access denied for user 'root '@'localhost'
e
mysqli_real_connect(): (HY000/1698): Access denied for user 'root '@'localhost'
Se você fizer login com o usuário phpmyadmin
, não verá o erro acima. Entretanto, o usuário phpmyadmin
só pode ser usado para administrar o banco de dados phpmyadmin
. A causa do erro é que por padrão o usuário root do MariDB é autenticado através do plugin unix_socket, em vez de usar o plugin mysql_native_password
. Para contornar esse problema, podemos criar outro usuário administrador e conceder todos os privilégios ao novo usuário administrador.
Faça login no servidor MariaDB a partir da linha de comando.
sudo mariadb -u root
Crie um usuário administrador com autenticação por senha.
create user admin@localhost identified by 'your-chosen-password';
Conceda todos os privilégios em todos os bancos de dados.
grant all privileges on *.* to admin@localhost with grant option;
Liberar privilégios e sair;
flush privileges;
exit;
Agora você pode entrar no phpMyAmin com a conta de administrador e gerenciar todos os bancos de dados.
Usando uma porta diferente
Usar uma porta diferente em vez da porta padrão 443 pode ser vantajoso porque você pode fechar essa porta quando não estiver usando o phpMyAdmin para evitar atividades de hacking ou pode especificar quais endereços IP têm permissão para acessar essa porta. É muito simples de configurar. Basta abrir o arquivo de bloco do servidor.
sudo nano /etc/nginx/conf.d/phpmyadmin.conf
Encontre as duas linhas a seguir:
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
Mude 443 para uma porta diferente, por exemplo, 8443.
listen [::]:8443 ssl ipv6only=on; # managed by Certbot
listen 8443 ssl; # managed by Certbot
Você também pode adicionar http2 a eles como abaixo para ativar o protocolo HTTP/2.
listen [::]:8443 ssl http2 ipv6only=on; # managed by Certbot
listen 8443 ssl http2; # managed by Certbot
Salve e feche o arquivo. Em seguida, teste as configurações do Nginx.
sudo nginx -t
Se o teste for bem-sucedido, recarregue o Nginx para que as alterações tenham efeito.
sudo systemctl reload nginx
Agora você pode acessar o phpMyAdmin via:
https://pma.example.com:8443
Instale a versão estável mais recente do phpMyAdmin
O repositório Ubuntu 18.04 vem com PHP7.2 e phpMyAdmin 4.6.6. Você pode verificar sua versão do phpMyAdmin na barra de título do navegador.
No entanto, PHP7.2 é suportado pelo phpMyAdmin desde a versão 4.7.4. Ao usar o phpMyAdmin 4.6.6 com PHP7.2, você verá a seguinte mensagem de aviso.
parameter must be an array or an object that implements countable
Para corrigir o problema de compatibilidade, podemos instalar o phpMyAdmin 4.8, que é a versão estável mais recente no momento em que este livro foi escrito. Baixe-o usando wget
.
wget https://files.phpmyadmin.net/phpMyAdmin/4.8.0.1/phpMyAdmin-4.8.0.1-all-languages.zip
Em seguida, extraia-o.
sudo apt install unzip
unzip phpMyAdmin-4.8.0.1-all-languages.zip
Faça backup dos arquivos originais do phpMyAdmin.
sudo mv /usr/share/phpmyadmin /usr/share/phpmyadmin-original
Mova o phpMyadmin 4.8 para o diretório /usr/share/phpmyadmin/
.
sudo mv phpMyAdmin-4.8.0.1-all-languages /usr/share/phpmyadmin
Edite o arquivo de configuração do fornecedor.
sudo nano /usr/share/phpmyadmin/libraries/vendor_config.php
Encontre a seguinte linha.
define('CONFIG_DIR', '');
Mude para
define('CONFIG_DIR', '/etc/phpmyadmin/');
Salve e feche o arquivo. Em seguida, crie a pasta tmp
para armazenar os arquivos de cache.
sudo mkdir /usr/share/phpmyadmin/tmp
Altere a propriedade do usuário e do grupo para www-data
.
sudo chown www-data:www-data /usr/share/phpmyadmin/tmp
Agora você pode usar o phpMyAdmin 4.8 sem recarregar ou reiniciar o Nginx.
Habilite a autenticação de dois fatores
Você também pode fortalecer o phpMyAdmin habilitando a autenticação de dois fatores, que é um recurso adicionado na versão 4.8. Para habilitá-lo, faça login no phpMyAdmin. Em seguida, vá para Configurações
-> Autenticação de dois fatores
e selecione Aplicativo de autenticação (2FA).
Depois de clicar no botão Configurar autenticação de dois fatores, será apresentado um código QR, que você precisa digitalizar com um aplicativo de autenticação de dois fatores em seu telefone.
O Google Authenticator é um aplicativo 2FA popular, mas eu recomendo o FreeOTP, que é um aplicativo 2FA de código aberto desenvolvido pela Red Hat. Depois de inserir o código de autenticação gerado pelo seu aplicativo 2FA, a autenticação de dois fatores será habilitada. Se você sair e fazer login novamente, precisará inserir o código de autenticação, além do nome de usuário e da senha.
Renovação automática de certificado
Para renovar automaticamente o certificado Let’s Encrypt, basta editar o arquivo crontab do usuário root.
sudo crontab -e
Em seguida, adicione a seguinte linha na parte inferior.
@daily certbot renew --quiet && systemctl reload nginx
O sinalizador --quiet
suprimirá a saída padrão. Se você deseja receber um erro padrão, adicione a seguinte linha no início do arquivo crontab.
MAILTO=your-email-address
É necessário recarregar o Nginx para apresentar o novo certificado aos clientes.
Espero que este tutorial tenha ajudado você a instalar o phpMyAdmin com Nginx no Ubuntu 18.04 LTS. Como sempre, se você achou esta postagem útil, inscreva-se em nosso boletim informativo gratuito para receber mais dicas e truques. Tomar cuidado.