Resumen
En la siguiente publicación, cubriremos el escenario en el que instalaremos WordPress con una base de datos remota en Debian. En otras palabras, tendremos un entorno en el que tendremos dos servidores separados, uno que solo tendrá la instalación de WordPress (lo que significa que solo alojará el sitio web) y el otro solo tendrá la base de datos (actúa solo como un servidor de base de datos) .
Hay muchas razones beneficiosas por las que se configura este tipo de entorno:una de ellas es la facilidad de mantenimiento del sitio web y el mantenimiento de la base de datos, el aumento del rendimiento (es decir, WordPress, ya que no depende de un servidor, requerirá muchos menos recursos).
Pero la desventaja es que, dado que ahora tenemos dos servidores, el mantenimiento del servidor aumentará.
Esta configuración se configurará en dos servidores Debian (ambos en la misma red/misma LAN).
La pila será LEMP:servidor web Nginx, servidor PHP y MariaDB.
Configuración del servidor de base de datos
Nos centraremos primero en el servidor de la base de datos:
1. Instale el servidor MariaDB
sudo apt install mariadb-server
Ejecute mysql_secure_installation
sudo mysql_secure_installation
2. Edite el archivo de configuración de la base de datos y cambie el parámetro de dirección de enlace e ingrese la dirección privada de su servidor de base de datos:
El archivo a editar:
sudo /etc/mysql/mariadb.conf.d/50-server.cnf
Línea para editar:dirección de enlace =127.0.0.1
dirección de enlace =192.168.56.252
Guarde y salga, reinicie y habilite el servicio mariadb.
sudo systemctl restart mariadb.service sudo systemctl enabled mariadb.service
Para averiguar la dirección IP de su servidor de base de datos, ejecute el comando – ip a.
3. Cree la base de datos, el usuario y configure los privilegios (la información en los comandos se usa como ejemplo)
sudo mysql -u root -p CREATE DATABASE wptest; GRANT ALL ON wptest.* TO 'wpadmin'@'192.168.56.251' IDENTIFIED BY 'StrongPassword'; FLUSH PRIVILEGES; exit
En la base de datos es necesario crear un usuario remoto, también conocido como la cuenta de usuario que utilizará nuestra instalación de WordPress para conectarse a la base de datos. Es necesario que sepa primero la dirección IP del servidor de WordPress y la especifique/vincule a la cuenta de usuario remota.
Configuración del cortafuegos
Si tiene un firewall en ejecución en su servidor de base de datos, entonces es necesario abrir el puerto 3306 para aceptar la conexión desde el servidor web y acceder a la base de datos. Solo para estar seguro, es bueno configurar las reglas para aceptar solo las conexiones solo desde nuestro servidor web.
Configuración del cortafuegos UFW
sudo ufw allow from 192.168.56.251 to any port 3306
Configuración de IPTABLES
iptables -I INPUT -p tcp -s 192.168.56.251 --dport 3306 -j ACCEPT
Configuración del servidor web
1. Instale el servidor web Nginx con otras bibliotecas php necesarias para ejecutar WordPress y comunicarse con el servidor de la base de datos y el cliente mysql/mariadb.
sudo apt install nginx php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl sudo apt install mariadb-client
Podemos probar la conexión con el servidor de la base de datos si ejecutamos este comando desde nuestro servidor web (esencialmente, iniciando sesión de forma remota en la base de datos):
sudo mysql -u remote-admin -h 192.168.56.252 -p
2. Instala WordPress, configúralo y configura Nginx. Aquí ahora configuraremos solo la parte de WordPress donde necesitamos agregar la dirección de nuestro servidor de base de datos remoto. Si necesita los pasos detallados sobre cómo instalar WordPress y configurar Nginx, puede encontrar las instrucciones en esta publicación.
cd /var/www/html/wordpress/ sudo mv wp-config-sample.php wp-config.php sudo nano wp-config.php
En la línea de la base de datos, reemplace localhost con la dirección IP de su servidor de base de datos. Consulte la siguiente imagen como ejemplo:
3. Cree el archivo conf de Nginx y elimine el predeterminado:
sudo nano /etc/nginx/sites-available/wordpress.conf sudo ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/
La configuración de Nginx que puede usar, puede ubicarla en la misma publicación que mencionamos anteriormente.
sudo rm /etc/nginx/sites-available/default sudo rm /etc/nignx/sites-enabled/default
Después de esta configuración, debería poder ejecutar WordPress, acceder a su base de datos remota y finalizar la instalación de WordPress.
Y ahora debería tener un sitio de WordPress en ejecución con un servidor web y de base de datos separado. Puede detenerse aquí si está satisfecho con la configuración. Estos fueron los pasos necesarios para instalar WordPress con una base de datos remota y, en este punto, todo debería estar en funcionamiento. De lo contrario, continúe con el próximo y último capítulo sobre cómo proteger y cifrar la conexión de la base de datos y el tráfico entre la web y el servidor de la base de datos y cómo hacer que la configuración sea más segura.
Proteja y cifre la conexión de la base de datos con un SSL (opcional pero recomendado)
También es una buena práctica de seguridad y una capa adicional de seguridad para proteger y cifrar el tráfico entre la web y el servidor de la base de datos. La razón es que si no es seguro y está encriptado, y SI de alguna manera un atacante irrumpe en su subred privada (la red LAN privada donde se encuentran los servidores) o en el servidor web, el atacante puede interceptar y rastrear el tráfico (supervisarlo y obtener datos) que pueden dar lugar a la violación y la piratería de su sitio web y los servidores.
Certificado de servidor de base de datos
1. En ambos servidores (web y base de datos), cree un directorio temporal para almacenar los certificados (por ejemplo, ssl o certs) en su directorio de inicio como ejemplo o en algún lugar donde sea fácil almacenarlos; como ejemplo, aquí haremos el directorio de certificados en nuestro directorio de inicio:
cd mkdir certs
Primero comenzaremos con el servidor de la base de datos, así que cambie al nuevo directorio de certificados que acabamos de crear:
cd certs
2. En el servidor de la base de datos vamos a generar la clave CA, el certificado y la clave privada. Siga las indicaciones y responda en consecuencia cuando se le solicite. Puede usar las imágenes a continuación como referencia. Una cosa a tener en cuenta es el indicador de nombre común (que es bastante importante). Está pidiendo el nombre del servidor de la base de datos. Aquí debe agregar la dirección IP del servidor (como la que tenemos) o el nombre de dominio del servidor si tiene o nombre de host. La información debe coincidir, ya que crearemos los certificados del servidor y las claves del cliente para que coincidan.:
sudo openssl genrsa 4096 > ca-key.pem sudo openssl req -new -x509 -nodes -days 1825 -key ca-key.pem -out cacert.pem
En el segundo comando, el atributo -days 1825 se refiere a que el certificado creado tendrá una validez de 5 años (1825 días). Puedes configurar los días como quieras o necesites.
3. Lo siguiente es crear la clave privada RSA y firmar el certificado:
sudo openssl rsa -in server-key.pem -out server-key.pem
sudo openssl req -newkey rsa:4096 -days 1825 -nodes -keyout server-key.pem -out server-req.pem
sudo openssl x509 -req -in server-req.pem -days 1825 -CA cacert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Ahora podemos mover los certificados a una ubicación permanente:
sudo mkdir /etc/mysql/ssl sudo mv *.* /etc/mysql/ssl cd /etc/mysql/ssl
Certificado de servidor web
4. Genere el certificado de cliente. Las indicaciones serán las mismas que para el servidor de la base de datos, pero en la pregunta Nombre común, ingrese los detalles del servidor web donde está instalado Wodpress (como la dirección IP del servidor web). Escriba el RSA y firme el certificado:
sudo openssl req -newkey rsa:2048 -days 1825 -nodes -keyout client-key.pem -out client-req.pem sudo openssl rsa -in client-key.pem -out client-key.pem sudo openssl x509 -req -in client-req.pem -days 1825 -CA cacert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
Configuración SSL para ambos servidores
Configuración del servidor de base de datos
1. El siguiente paso es configurar nuestros servidores para usar los certificados que creamos y habilitar la conexión SSL entre la web y el servidor de la base de datos. Primero edite la configuración en la configuración del servidor MariaDB:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Y encuentre las siguientes líneas, elimine los comentarios y reescriba las líneas que coinciden con los directorios y archivos de nuestros certificados que creamos:
ssl-ca=/etc/mysql/ssl/cacert.pem ssl-cert=/etc/mysql/ssl/server-cert.pem ssl-key=/etc/mysql/ssl/server-key.pem
Guarde el archivo y salga.
2. Ahora inicie sesión en MariDB como root y ejecute las siguientes consultas para habilitar en el servidor que permitirá la conexión desde el servidor web solo con SSL:
sudo mysql -u root -p GRANT ALL PRIVILEGES ON wptest.* TO 'wpadmin'@'192.168.56.251' REQUIRE SSL; FLUSH PRIVILEGES; exit
Reinicie el servidor de la base de datos:
sudo systemctl restart mariadb.service
Configuración del servidor web
3. Mientras aún se encuentra en el directorio /etc/mysql/ssl (o muévase aquí), con la herramienta scp, copie los certificados del cliente en el servidor web (el usuario web y la dirección IP se reemplazan con el nombre de usuario y la dirección IP reales de su servidor web):
scp cacert.pem client-cert.pem client-key.pem [email protected]:~/certs
Ahora cambie/inicie sesión en el servidor web y mueva los certificados a algún lugar permanente también (igual que para el servidor de la base de datos):
sudo mkdir /etc/mysql/ssl cd certs sudo mv /certs/*.* /etc/mysql/ssl
Edite el archivo de configuración para el cliente MariaDB que instalamos en el primer paso. Tiene la misma ubicación que tiene el servidor:
sudo nano /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
Y busque la misma línea SSL (debe estar en la sección [mysql]) que hicimos para el servidor de la base de datos y haga que coincidan con la ubicación y los nombres de los archivos de los certificados que agregamos en el directorio /etc/mysql/ssl:
[mysql] ssl-ca=/etc/mysql/ssl/cacert.pem ssl-cert=/etc/mysql/ssl/client-cert.pem ssl-key=/etc/mysql/ssl/client-key.pem
Guarde el archivo, salga.
Puede probar si la conexión funciona con inicio de sesión remoto:
mysql -u wpadmin -h 192.168.56.252 -p
4. El último archivo a editar es nuevamente wp-config.php. Necesitamos allí también la línea de configuración SSL:
sudo nano /var/www/html/wordpress/wp-config.php
y agregue la línea antes de la línea con el nombre de la base de datos:
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
Consulte la imagen:
Reinicie el servidor web Nginx y finalice la instalación de WordPress desde el navegador web. Debería estar en funcionamiento.
Resumen
Para resumir este artículo, cubrimos los pasos para instalar WordPress con una base de datos remota. También cubrimos el proceso de cómo asegurar la conexión entre los dos servidores (si no ha experimentado antes los certificados autofirmados y cómo trabajar con ellos, puede omitir el paso, como se dijo anteriormente, no es necesario, solo una recomendación) . El proceso básico en sí mismo sobre cómo instalar WordPress con una base de datos remota no es tan difícil y brinda un par de beneficios, uno de los cuales es que el rendimiento y el mantenimiento del servidor web ahora pueden ser bastante más fáciles y reducir los tiempos de inactividad cuando se necesita mantenimiento.