WordPress en Debian 9 (nginx, MariaDB, PHP, Redis)

Última revisión: 24 de noviembre de 2020

Versiones a instalar

Sistema Operativo: Debian 9
Panel de Control: ninguno
Servidor web: nginx
Base de Datos: MariaDB 10.3
Procesador: PHP 7.3
Caché: Redis

Aquí te dejamos un pequeño manual de instalación desde una instalación de sistema operativo básico de Debian 9.

Configurando el Sistema Operativo

Una vez esté instalado el sistema operativo, lo primero que configuraremos será la hora del servidor. En este caso configuraremos la zona horaria de Madrid.

timedatectl set-timezone 'Europe/Madrid'
timedatectl set-ntp on

Lo siguiente que haremos es comprobar la versión del sistema operativo y, posteriormente, hacer una actualización completa del mismo.

lsb_release -a
apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove

Una vez esta todo actualizado, instalamos algunas herramientas y software base que puede ser útil tener en el sistema.

apt -y install software-properties-common curl vim unzip ufw dirmngr

Instalación de MariaDB

El siguiente paso será la instalación de la base de datos. En este caso vamos a utilizar MariaDB 10.3. Lo primero que haremos será configurar la descarga, y posteriormente su instalación.

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://tedeco.fi.upm.es/mirror/mariadb/repo/10.3/debian stretch main'
apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove
apt -y install mariadb-server mariadb-client

Ahora que está instalada, procederemos a la configuración inicial. Para ello usaremos el sistema se instalación segura, que nos hará algunas preguntas.

mysql_secure_installation

A la pregunta de si queremos cambiar la contraseña, dependiendo de si hemos puesto o no en la instalación, la cambiaremos. En caso de no haber puesto ninguna, es muy recomendable ponerle una contraseña segura.

Set root password? [Y/n]: Y

Al resto de preguntas, contestaremos lo siguiente:

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

En este momento ya tendremos la base de datos configurada. Ahora haremos que se ejecute en los re inicios del sistema y la iniciaremos.

systemctl stop mysql.service
systemctl start mysql.service

Instalación de nginx

En este momento tenemos la base de datos configurada y vamos a proceder a la instalación del servidor web. En este caso vamos a usar nginx. Para estar al día, no usaremos la versión que viene con el sistema operativo, sino una más actualizada y mantenida.

apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove
apt -y install nginx nginx-extras

Ahora que tenemos nginx instalado, lo vamos a configurar para que se inicie en los re inicios del sistema automáticamente.

systemctl stop nginx.service
systemctl enable nginx.service
systemctl start nginx.service

Instalación de PHP

En este momento ya tenemos el servidor web, por lo que vamos a instalar y a configurar PHP para que funcione correctamente con la base de datos y el servidor web. En este caso vamos a instalar la versión PHP 7.3. Primero haremos la instalación de los paquetes más actualizados (que no son los que vienen con el sistema operativo) y que en caso de necesitarlo, además, nos permitirían tener varias versiones de PHP en paralelo.

apt -y install apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove
apt -y install php7.3 php7.3-fpm php7.3-common php7.3-dev php7.3-cli php7.3-bcmath php7.3-curl php7.3-gd php7.3-imap php7.3-json php7.3-mbstring php7.3-mysql php7.3-opcache php7.3-soap php7.3-xml php7.3-xmlrpc php7.3-zip php-imagick php-libsodium php-ssh2 php-xdebug libgeoip-dev

En algunos casos, el sistema integra Apache HTTPD de serie, por lo que haremos una limpieza, por si queda algo de él instalado.

apt -y purge apache2*

Ahora que ya tenemos PHP correctamente instalado, vamos a activarlo de forma que cuando se reinicie el sistema se ejecute automáticamente.

systemctl stop php7.3-fpm.service
systemctl enable php7.3-fpm.service
systemctl start php7.3-fpm.service

Instalación de Redis

Para trabajar con unas mejoras en el rendimiento de la caché de objetos, vamos a dejar listo Redis como sistema de almacenamiento.

apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove
apt -y install redis-server php-redis

Posteriormente, y de la misma forma que el resto de elementos, lo vamos a configurar para que se inicie automáticamente si se reinicia el servidor.

systemctl stop redis-server.service
systemctl enable redis-server.service
systemctl start redis-server.service

Configuración del HTTPS

Como vamos a montar nuestra web sobre un servidor web seguro (HTTPS), necesitaremos instalar el generador de certificados de Let’s Encrypt, de forma que previamente prepararemos los sistemas para la creación de claves seguras.

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Y en este momento instalaremos el sistema de creación de certificados certbot.

apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove
apt -y install certbot python-certbot-nginx

Para que los certificados se actualicen automáticamente, activaremos una tarea programada (cron) una vez al día que automáticamente renueve los certificados.

crontab -e

Una vez dentro, configuraremos, por ejemplo, que se ejecute a las 06:45 cada mañana.

45 6 * * * certbot renew --dry-run

Configuración del firewall

Para acabar, vamos a activar el Firewall y dejar solo abierto los puertos de SSH (por los que estamos trabajando en estos momentos) y posteriormente los puertos web, dejando el resto inactivo.

ufw app list
ufw allow 'SMTP'
ufw allow 'OpenSSH'
ufw allow 'Nginx Full'
ufw enable

A partir de este momento podemos reiniciar la máquina si queremos, y ya la tendremos lista para comenzar su uso y montar los sitios web.


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.

Servicios de Administración de Sistemas WordPress

¿Tienes un sitio web con WordPress de alto tráfico? ¿Eres una Agencia con servidores con cPanel, Plesk u otro panel en los que mantienes WordPress para tus clientes?

Si es así y te interesa un servicio profesional de mantenimiento de infraestructura WordPress y de mejora del rendimiento de tus sitios web o los de tus clientes, contacta conmigo.