GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo instalar Nginx con PHP + MySQL (LEMP) en Debian 9

Este tutorial le mostrará la instalación del servidor web Nginx en Debian 9 (Stretch). Nginx (pronunciado "motor x") es un servidor HTTP gratuito, de código abierto y de alto rendimiento. Nginx es conocido por su estabilidad, rico conjunto de funciones, configuración simple y bajo consumo de recursos. Este tutorial muestra la instalación de Nginx con soporte PHP (a través de PHP-FPM) y MySQL y MariaDB. Esta configuración a menudo se denomina LEMP =L inux + nginx (pronunciado "e motor x") + M ySQL + P HP) .

Nota Preliminar

En este tutorial, utilizo el nombre de host server1.example.com con la dirección IP 192.168.1.100. Estas configuraciones pueden diferir para usted, por lo que debe reemplazarlas cuando corresponda. Debe tener un servidor Debian 9, usaré el servidor mínimo de Debian como sistema base para este tutorial.

Actualizar el sistema Debian

Se recomienda actualizar las listas de paquetes e instalar las actualizaciones pendientes antes de comenzar con la configuración de Nginx. Ejecute los siguientes comandos para instalar cualquier actualización pendiente.

apt-get update
apt-get upgrade -y

Usaré el editor nano más adelante para editar los archivos de configuración. Nano se puede instalar con este comando:

apt-get -y install nano

Instalar Nginx

Nginx está disponible como un paquete para Debian 9 que podemos instalar con este comando:

apt-get -y install nginx

Ahora inicie el servidor web Nginx:

systemctl start nginx.service

Escriba la dirección IP o el nombre de host de su servidor web en un navegador (por ejemplo, http://192.168.1.100) y verá la siguiente página:

La raíz del documento nginx predeterminada en Debian Linux es /var/www/html.

Instalar MySQL o MariaDB

En este paso, le mostraré cómo instalar MySQL o MariaDB. Usted es libre de elegir qué sistema de base de datos prefiere. Solo asegúrese de instalar solo un motor de base de datos y no MySQL y MariaDB juntos.

Instalar MySQL

Los paquetes de MySQL para Debian 9 se pueden obtener directamente de Oracle. Oracle proporciona un paquete de repositorio de MySQL que integra el repositorio de Oracle MySQL en Debian para que podamos instalar y actualizar MySQL con apt. Obtenga el paquete del repositorio apt de MySQL aquí en caso de que la descarga de wget a continuación falle debido a cambios en la URL de descarga.

cd /tmp
wget https://dev.mysql.com/get/mysql-apt-config_0.8.9-1_all.deb
dpkg -i mysql-apt-config_0.8.9-1_all.deb

Elija configurar 'OK' en la lista, luego enfoque el botón OK en el pie de página y presione enter. Esto seleccionará la versión estable actual, que es MySQL 5.7.

Ahora actualizaremos la lista de paquetes e instalaremos el servidor MySQL y el paquete de cliente.

apt-get update
apt-get -y install mysql-community-client mysql-community-server

El instalador de MySQL le pedirá que establezca una contraseña para el usuario root de MySQL. Elija una contraseña larga y segura, ya que esta contraseña permite el acceso administrativo total a la base de datos MySQL.

Vuelva a ingresar la contraseña solicitada.

Instalar MariaDB

Para instalar MariaDB, ejecutamos:

apt-get -y install mariadb-server mariadb-client

A diferencia del instalador de MySQL, el instalador de MariaDB no establecerá una contraseña de root durante la instalación. Para asegurar la instalación de MariaDB, elimine el usuario anónimo y para deshabilitar la base de datos de prueba, ejecute este comando:

mysql_secure_installation

Responda las preguntas de la siguiente manera:

Change the root password? [Y/n] <-- y
New password: <-- Enter a new MySQL root password
Re-enter new password: <-- Repeat the MySQL root 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

Instalando PHP

Podemos hacer que PHP funcione en nginx a través de PHP-FPM (PHP FastCGI Process Manager). Esta es una implementación alternativa de PHP FastCGI con algunas características adicionales útiles para sitios de cualquier tamaño, especialmente sitios más ocupados. Instale PHP 7 de la siguiente manera:

apt-get -y install php7.0-fpm

PHP-FPM es un proceso daemon (con el archivo de unidad systemd php7.0-fpm.service) que ejecuta un servidor FastCGI en el socket /var/run/php/php7.0-fpm.sock.

Configuración de Nginx

La configuración de Nginx está en /etc/nginx/nginx.conf que abrimos ahora:

nano /etc/nginx/nginx.conf

La configuración es fácil de entender (puede obtener más información aquí: https://www.nginx.com/resources/wiki/start/topics/examples/full/ y aquí:https://www.nginx.com/ recursos/wiki/)

Primero establezca el keepalive_timeout en un valor razonable como 2 segundos:

[...]
keepalive_timeout 2;
[...]

Los hosts virtuales se definen en los contenedores del servidor {}. El host virtual predeterminado se define en el archivo /etc/nginx/sites-disponible/default. Modifiquémoslo de la siguiente manera:

nano /etc/nginx/sites-available/default
[...]
server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
} [...]

nombre del servidor _; lo convierte en un vhost catchall predeterminado (por supuesto, también puede especificar un nombre de host aquí como www.example.com).

He agregado index.php a la línea de índice. raíz /var/www/html; significa que la raíz del documento es el directorio /var/www/html.

La parte importante para PHP es la ubicación ~ \.php$ {} estrofa. Descoméntelo como se muestra arriba para habilitarlo. Hay dos líneas fastcgi_pass incluidas, descomente solo la del archivo php-7.0-fpm.sock.

Ahora guarde el archivo y vuelva a cargar Nginx:

systemctl reload nginx.service

A continuación, abra /etc/php/7.0/fpm/php.ini...

nano /etc/php/7.0/fpm/php.ini

... y establezca cgi.fix_pathinfo=0:

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

... entonces es posible que desee aumentar el límite POST y el límite de carga de archivos:

post_max_size = 25M
upload_max_filesize = 20M

Cuando planee cargar archivos grandes con PHP, debe aumentar los valores hasta 500 millones o más. M significa aquí Megabytes.

Finalmente, es posible que desee establecer la zona horaria en su zona horaria local. En mi caso, la zona horaria es:

date.timezone = 'Europe/Berlin'

Puede encontrar la lista de zonas horarias admitidas aquí.

Vuelva a cargar PHP-FPM para aplicar los cambios:

systemctl reload php7.0-fpm.service

Ahora cree el siguiente archivo PHP en la raíz del documento /var/www/html/:

nano /var/www/html/info.php
<?php
phpinfo();

Ahora llamamos a ese archivo en un navegador (por ejemplo, http://192.168.1.100/info.php):

Como puede ver, PHP 7 funciona y funciona a través de FPM/FastCGI, como se muestra en la línea API del servidor. Si se desplaza hacia abajo, verá todos los módulos que ya están habilitados en PHP. MySQL no aparece en la lista, lo que significa que todavía no tenemos compatibilidad con MariaDB/MySQL en PHP.

Obtención de compatibilidad con MySQL/MariaDB en PHP

Para obtener soporte de MySQL en PHP, podemos instalar el paquete php7.0-mysqlnd. Es una buena idea instalar algunos otros módulos de PHP, ya que podría necesitarlos para sus aplicaciones. Puede buscar módulos PHP disponibles como este:

apt-cache search php7.0

Elige los que necesites e instálalos así:

apt-get -y install php7.0-mysqlnd php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl

Ahora recarga PHP-FPM:

systemctl reload php7.0-fpm.service

Ahora vuelva a cargar http://192.168.1.100/info.php en su navegador y desplácese hacia abajo hasta la sección de módulos nuevamente. Ahora debería encontrar muchos módulos nuevos allí, incluidos los módulos MySQLi y MySQLnd:

Hacer que PHP-FPM use una conexión TCP (opcional)

De forma predeterminada, PHP-FPM escucha en el socket /var/run/php/php7.0-fpm.sock y esa es la forma recomendada y más rápida de conectar PHP a Nginx. Sin embargo, puede haber configuraciones en las que desee permitir que Nginx se conecte a PHP a través de la red. Es posible hacer que PHP-FPM utilice una conexión TCP. Para hacer esto, abra /etc/php/7.0/fpm/pool.d/www.conf...

nano /etc/php/7.0/fpm/pool.d/www.conf

... y haz que la línea de escucha tenga el siguiente aspecto:

[...]
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
[...]

Esto hará que PHP-FPM escuche en el puerto 9000 en la IP 127.0.0.1 (localhost). Asegúrese de utilizar un puerto que no esté en uso en su sistema.

Luego recarga PHP-FPM:

systemctl reload php7.0-fpm.service

A continuación, revise su configuración de Nginx y todos sus servidores virtuales y cambie la línea fastcgi_pass unix:/var/run/php7.0-fpm.sock; a fastcgi_pass 127.0.0.1:9000;, p. así:

nano /etc/nginx/sites-available/default
[...]
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php-fpm (or other unix sockets):
# fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# With php-cgi (or other tcp sockets):
fastcgi_pass 127.0.0.1:9000;
} [...]

Finalmente, recarga Nginx:

systemctl reload nginx.service

Habilitar SSL y HTTP/2 en Nginx

La mayoría de los sitios web actuales utilizan SSL (TLS) para proporcionar un acceso seguro. En este capítulo, le mostraré cómo crear un certificado SSL y cómo activar SSL en Nginx. Puede usar un certificado SSL autofirmado o solicitar un certificado SSL firmado oficialmente de Let's encrypt. Los certificados Let#s encrypt SSL están disponibles de forma gratuita, pero ya debe tener un nombre de dominio válido que apunte a su servidor en DNS. Si aún no tiene un nombre de dominio o si su servidor está en una red local y no se puede acceder a él desde el exterior, utilice un certificado SSL autofirmado. Siga los pasos para un certificado SSL autofirmado o el certificado Let's encrypt a continuación, pero no ambos.

Crear un certificado SSL autofirmado

Cree el archivo de clave SSL con el comando OpenSSL:

openssl genrsa -out /etc/ssl/private/nginx.key 4096

Luego, cree el certificado SSL autofirmado:

openssl req -new -x509 -key /etc/ssl/private/nginx.key -out /etc/ssl/certs/nginx.pem -days 3650

El comando solicitará detalles como país, estado, ciudad, nombre de la empresa y nombre de dominio.

Active el certificado SSL autofirmado en Nginx. Para ello, edite de nuevo el archivo nginx.conf:

nano /etc/nginx/sitios-disponibles/predeterminado

y haz que la parte del servidor se vea así:

server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration

listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;

ssl on;
ssl_certificate_key /etc/ssl/private/nginx.key;
ssl_certificate /etc/ssl/certs/nginx.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}

Reinicie Nginx para aplicar los cambios.

systemctl restart nginx.service

Ahora abra la URL https de su servidor en un navegador, p. https://192.169.1.100/. Recibirá una advertencia de seguridad que deberá aceptar para continuar. Luego, verá la página de inicio de Nginx, el ícono de advertencia en la barra de URL del navegador indica que usamos un certificado SSL autofirmado.

Utilice un certificado Let's Encrypt SSL gratuito

En este capítulo, describiré cómo proteger su servidor Nginx mediante el uso de un certificado SSL Let's encrypt gratuito. Un requisito previo es que tenga un nombre de dominio que apunte a la IP del servidor en el que instala Nginx en este momento.

Instale Certbot, el cliente de Let's encrypt que se utiliza para obtener un certificado SSL gratuito.

apt-get -y install certbot python-certbot-nginx

Edite el archivo de configuración del sitio web /etc/nginx/sites-available/default y configure su(s) nombre(s) de dominio en la línea server_name:

nano /etc/nginx/sites-available/default

La línea debería verse así después de editar:

server_name example.com;

Reemplace example.com con su propio nombre de dominio. Si tiene varios nombres de dominio o subdominios, agréguelos separados por espacios en blanco.

server_name example.com www.example.com otherdomain.tld;

Ahora solicitamos un certificado SSL de let's encrypt usando el complemento nginx de Certbot.

certbot --nginx -d example.com

Se pueden agregar varios dominios repitiendo la opción -d. Ejemplo:

certbot certonly --webroot -d example.com -d www.example.com

Certbot le pedirá una dirección de correo electrónico a la que se enviarán las notificaciones de renovación. Introduzca una dirección de correo electrónico válida aquí:

Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): [email protected]

Acepte los términos de la licencia ingresando 'A'.

-------------------------------------------------------------------------------
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-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

Aquí el cuadro de diálogo adicional que solicita el certificado SSL. He agregado mis respuestas en rojo.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
http-01 challenge for www.example.com
Select the webroot for example.com:
-------------------------------------------------------------------------------
1: Enter a new webroot
-------------------------------------------------------------------------------
Press 1 [enter] to confirm the selection (press 'c' to cancel): 1
Input the webroot for example.com: (Enter 'c' to cancel):/var/www/html
Select the webroot for www.example.com:
-------------------------------------------------------------------------------
1: Enter a new webroot
2: /var/www/html
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0000_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
expire on 2018-04-23. To obtain a new or tweaked version of this
certificate in the future, simply run certbot again. 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

Existe un método alternativo mediante el uso de la opción '--nginx' en Certbot, pero este método no parece funcionar en este momento debido al problema TLS-SNI-01 en Let's encrypt. Sin embargo, el método webroot, como se muestra arriba, funciona bien.

El certificado SSL recién generado se encuentra en una subcarpeta de la carpeta /etc/letsencrypt/live/. La ruta exacta se muestra en la salida de Certbot.

Ahora agregaremos este certificado SSL en nuestro archivo del sitio web de Nginx. Edite el archivo predeterminado de Nginx:

nano /etc/nginx/sites-available/default

y cambie la sección SSL así:

[...]
server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration

listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;

ssl on;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
} [...]

Reemplace 'example.com' en la ruta del certificado SSL con su propio nombre de dominio. Reinicie Nginx para aplicar los cambios.

systemctl restart nginx.service

Imagen de máquina virtual

Este tutorial está disponible como máquina virtual lista para usar en formato OVA / OVF para suscriptores de Howtoforge. El formato VM es compatible con VMWare y Virtualbox y probablemente con otras herramientas que puedan importar este formato. Puede encontrar el enlace de descarga en el menú derecho en la parte superior. Haga clic en el nombre del archivo para iniciar la descarga.

Los detalles de inicio de sesión de la máquina virtual son:

Inicio de sesión SSH

Nombre de usuario:administrador
Contraseña:howtoforge

Ejecute 'su' para convertirse en usuario root, la contraseña de root también es 'howtoforge'.

La imagen de la máquina virtual utiliza MySQL como servidor de base de datos.

Inicio de sesión de MySQL

Nombre de usuario:root
Contraseña:howtoforge

Cambie las contraseñas después del primer arranque.

La VM está configurada para la IP estática 192.168.1.100, la IP se puede cambiar en el archivo /etc/network/interfaces.

Enlaces

  • nginx:https://nginx.net/
  • PHP:http://www.php.net/
  • MySQL: https://www.mysql.com/
  • MariaDB: https://mariadb.org/
  • Debian:https://www.debian.org/

Debian
  1. Cómo instalar Phorum con Nginx en Debian 9

  2. Cómo instalar y configurar PHP y Nginx (LEMP) en Debian 11

  3. Cómo instalar Magento con Nginx en Debian 10

  4. Cómo instalar WonderCMS con Nginx en Debian 11

  5. Cómo instalar LEMP Stack Nginx, MySQL, PHP en Debian 11

Instale Nginx con PHP y MySQL (LEMP) más SSL en Debian 10

Cómo instalar Nginx con PHP-FPM en Debian 10

Cómo instalar Nginx, MySQL y PHP (LEMP) en Ubuntu 20.04

Cómo instalar phpBB con LEMP (Nginx, MariaDB y PHP) en Debian 11 Bullseye

Cómo instalar phpMyAdmin con Nginx en Debian 11

Cómo instalar la pila Nginx, MySQL, PHP (LEMP) en un servidor en la nube Debian 8.3