Cómo instalar phpMyAdmin con Nginx y Let’s Encrypt SSL en Ubuntu 20.04 LTS

phpMyAdmin es una aplicación gratuita y de código abierto que puede utilizarse para gestionar bases de datos MySQL y MariaDB a través de una interfaz basada en la web. Con phpMyAdmin, puedes realizar varias tareas, como gestionar cuentas de usuario y privilegios, importar y exportar datos, ejecutar sentencias SQL y mucho más. Viene con una amplia documentación que te ayuda a realizar diversas operaciones.

En este tutorial, explicaremos cómo instalar phpMyAdmin con Nginx en Ubuntu 20.04 y asegurarlo con un certificado SSL gratuito de Let’s Encrypt.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Un nombre de dominio válido apuntado con tu servidor.
  • Una contraseña de root configurada en tu servidor.

Instalar Nginx, MariaDB y PHP

En primer lugar, tendrás que instalar el servidor web Nginx, MariaDB, PHP y otras extensiones PHP necesarias en tu servidor. Puedes instalarlos todos con el siguiente comando:

apt-get install nginx mariadb-server php php-cli php-mysql php-mbstring php-zip php-gd php-json php-curl php-fpm -y

Una vez instalados todos los paquetes, puedes pasar al siguiente paso.

Instalar phpMyAdmin

Por defecto, el paquete phpMyAdmin está disponible en el repositorio por defecto de Ubuntu 20.04. Puedes instalarlo simplemente ejecutando el siguiente comando:

apt-get install phpmyadmin -y

Durante la instalación, se te pedirá que selecciones el servidor web como se muestra a continuación:

Configurar phpmyadmin

Como estamos utilizando el servidor web Nginx, puedes pulsar TAB y luego ENTER para evitar esta pregunta. Se te pedirá que configures una base de datos para que phpMyAdmin la utilice.

Utilizar dbconfig común

Selecciona «Sí» y pulsa «Enter» para continuar. Se te pedirá que elijas y confirmes una contraseña para la aplicación phpMyAdmin, como se muestra a continuación:

Establecer la contraseña de la aplicación

Proporciona la contraseña que desees y pulsa Intro para finalizar la instalación.

Configurar la base de datos MariaDB

Por defecto, la base de datos MariaDB no está protegida. Así que asegura la MariaDB y establece la contraseña de root de MariaDB con el siguiente comando:

mysql_secure_installation

Responde a todas las preguntas como se muestra a continuación:

Enter current password for root (enter for none): 
Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Después de asegurar la MariaDB, se recomienda crear un usuario independiente para conectar el phpMyAdmin y gestionar la base de datos.

Para ello, accede al shell de MariaDB con el siguiente comando:

mysql -u root -p

Proporciona tu contraseña de root cuando se te pida y luego crea un nuevo usuario con el siguiente comando:

MariaDB [(none)]> create user [email protected] identified by 'password';

A continuación, concede todos los privilegios al usuario con el siguiente comando:

MariaDB [(none)]> grant all privileges on *.* to [email protected] with grant option;

A continuación, vacía los privilegios y sal del intérprete de comandos de MariaDB con el siguiente comando:

MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;

Una vez que hayas terminado, puedes pasar al siguiente paso.

Configurar Nginx para phpMyAdmin

Puedes crear un nuevo archivo de configuración del host virtual Nginx para phpMyAdmin utilizando el siguiente comando:

nano /etc/nginx/sites-available/phpmyadmin

Añade las siguientes líneas:

server {
  listen 80;
  listen [::]:80;
  server_name phpmyadmin.linuxbuz.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.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

  location ~ /\.ht {
    deny all;
  }
}

Guarda y cierra el archivo cuando hayas terminado. A continuación, crea un enlace simbólico al directorio /etc/nginx/sites-enabled/:

ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enabled/

A continuación, establece el hash_bucket_size en el archivo de configuración por defecto de Nginx:

nano /etc/nginx/nginx.conf

Añade la siguiente línea debajo de la línea«http {«:

    server_names_hash_bucket_size 64;

Guarda y cierra el archivo. A continuación, comprueba si Nginx tiene algún error de sintaxis con el siguiente comando:

nginx -t

Deberías obtener la siguiente salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Por último, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

También puedes comprobar el estado del servicio Nginx con el siguiente comando:

systemctl status nginx

Deberías ver la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-15 06:24:03 UTC; 2s ago
       Docs: man:nginx(8)
    Process: 107736 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 107737 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 107738 (nginx)
      Tasks: 3 (limit: 2282)
     Memory: 3.7M
     CGroup: /system.slice/nginx.service
             ??107738 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??107739 nginx: worker process
             ??107740 nginx: worker process

May 15 06:24:03 ubuntu2004 systemd[1]: Starting A high performance web server and a reverse proxy server...
May 15 06:24:03 ubuntu2004 systemd[1]: Started A high performance web server and a reverse proxy server.

Asegura phpMyAdmin con Let’s Encrypt SSL

Antes de empezar, tendrás que instalar el cliente Certbot para descargar e instalar Let’s Encrypt SSL.

Primero, añade el repositorio de Certbot con el siguiente comando:

add-apt-repository ppa:ahasenack/certbot-tlssni01-1875471

A continuación, actualiza el repositorio e instala el cliente Certbot con el siguiente comando:

apt-get update -y
apt-get install certbot python3-certbot-nginx -y

Una vez instalado Certbot, ejecuta el siguiente comando para descargar e instalar Let’s Encrypt SSL para tu dominio:

certbot --nginx -d phpmyadmin.linuxbuz.com

Se te pedirá que proporciones tu correo electrónico y que aceptes las condiciones del servicio, como se muestra a continuación:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for phpmyadmin.linuxbuz.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/phpmyadmin

A continuación, selecciona si quieres redirigir el tráfico HTTP a HTTPS:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Escribe 2 y pulsa Enter para finalizar la instalación.

Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/phpmyadmin

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://phpmyadmin.linuxbuz.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=phpmyadmin.linuxbuz.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/phpmyadmin.linuxbuz.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/phpmyadmin.linuxbuz.com/privkey.pem
   Your cert will expire on 2020-08-12. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Accede a phpMyAdmin

Ahora, abre tu navegador web y escribe la URL https://phpmyadmin.linuxbuz.com. Serás redirigido a la página de inicio de sesión de phpMyAdmin:

Acceso a PHPMyAdmin

Proporciona tu nombre de usuario y contraseña de administrador, y haz clic en el botón Ir. Deberías ver el panel de control por defecto de phpMyAdmin en la siguiente página:

Panel de control de PHPMyAdmin

Conclusión

Enhorabuena! has instalado con éxito phpMyAdmin y lo has asegurado con Let’s Encrypt SSL en Ubuntu 20.04. Ahora puedes interactuar con MariaDB y realizar varias tareas a través del navegador web.

También te podría gustar...