Cómo instalar WordPress con Nginx y Let’s Encrypt SSL en CentOS 8
WordPress es un sistema de gestión de contenidos gratuito, de código abierto y el más utilizado en el mundo. Es una plataforma de blogging muy potente que puede utilizarse para alojar un blog, un sitio web de cartera y una plataforma de comercio electrónico. WordPress utiliza Apache/Nginx como servidor web, MariaDB/MySQL como base de datos y procesamiento PHP. WordPress proporciona un gran número de temas y plugins que se pueden utilizar para personalizar su funcionalidad.
En este tutorial, explicaremos cómo instalar WordPress con Nginx en un servidor CentOS 8 y luego aseguraremos el servidor utilizando un certificado SSL gratuito de Let’s Encrypt.
Requisitos previos
- Un servidor con CentOS 8.
- Una contraseña de root configurada en tu servidor.
- Un nombre de dominio válido que apunte a la dirección IP de tu servidor.
Cómo empezar
Por defecto, SELinux está activado en el servidor CentOS 8. Así que primero tendrás que desactivarlo.
Puedes hacerlo editando el archivo /etc/selinux/config:
nano /etc/selinux/config
Haz los siguientes cambios:
SELINUX=disabled
Guarda y cierra el archivo. A continuación, reinicia tu servidor para aplicar los cambios.
Instalar el servidor LEMP
Antes de empezar, tendrás que instalar Nginx, MariaDB, PHP y otros paquetes necesarios en tu servidor. Puedes instalarlos todos ejecutando el siguiente comando:
yum install nginx php php-cli php-curl php-zip php-mbstring php-mysqlnd php-fpm curl unzip mariadb-server -y
Una vez instalados todos los paquetes, inicia el servicio de Nginx, PHP-FPM y MariaDB y haz que se inicien después de reiniciar el sistema:
systemctl start nginx systemctl enable nginx systemctl start mariadb systemctl enable mariadb systemctl start php-fpm systemctl enable php-fpm
También puedes comprobar el estado del servicio PHP-FPM con el siguiente comando:
systemctl status php-fpm
Deberías obtener la siguiente salida:
? php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2019-10-17 05:39:11 EDT; 4min 40s ago Main PID: 1475 (php-fpm) Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec" Tasks: 6 (limit: 5060) Memory: 28.5M CGroup: /system.slice/php-fpm.service ??1475 php-fpm: master process (/etc/php-fpm.conf) ??1478 php-fpm: pool www ??1479 php-fpm: pool www ??1480 php-fpm: pool www ??1481 php-fpm: pool www ??1482 php-fpm: pool www Oct 17 05:39:10 centos8 systemd[1]: Starting The PHP FastCGI Process Manager... Oct 17 05:39:11 centos8 systemd[1]: Started The PHP FastCGI Process Manager.
Una vez hecho esto, puedes pasar al siguiente paso.
Configurar la base de datos de WordPress
Por defecto, el servidor MariaDB no está protegido. Así que primero tendrás que asegurarlo. Puedes asegurarlo con el siguiente comando:
mysql_secure_installation
Responde a todas las preguntas que se muestran a continuación:
Enter current password for root (enter for none): Set root password? [Y/n] n 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
Una vez asegurado, deberías obtener el siguiente resultado:
Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
A continuación, entra en el shell de MariaDB con el siguiente comando:
mysql -u root -p
Proporciona tu contraseña de root cuando se te pida y luego crea una base de datos y un usuario para WordPress con los siguientes comandos:
MariaDB [(none)]> CREATE DATABASE wpdb; MariaDB [(none)]> GRANT ALL PRIVILEGES on wpdb.* to 'wpuser'@'localhost' identified by 'password';
A continuación, vacía los privilegios y sal del shell de MariaDB con el siguiente comando:
MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> EXIT;
Una vez configurada tu base de datos, puedes pasar al siguiente paso.
Descarga WordPress
Puedes descargar la última versión de WordPress con el siguiente comando:
cd /var/www/html wget https://wordpress.org/latest.tar.gz
Una vez descargado, extrae el archivo descargado con el siguiente comando:
tar -xvzf latest.tar.gz
A continuación, cambia la propiedad del directorio wordpress al nginx:
chown -R nginx: /var/www/html/wordpress/
A continuación, cambia el directorio a wordpress y renombra el archivo de configuración por defecto de wordpress:
cd /var/www/html/wordpress cp wp-config-sample.php wp-config.php
A continuación, edita el archivo wp-config.php en tu editor de texto favorito:
nano wp-config.php
Define la información de tu base de datos como se muestra a continuación:
/** The name of the database for WordPress */ define( 'DB_NAME', 'wpdb' ); /** MySQL database username */ define( 'DB_USER', 'wpuser' ); /** MySQL database password */ define( 'DB_PASSWORD', 'password' ); /** MySQL hostname */ define( 'DB_HOST', 'localhost' );
Guarda y cierra el archivo, cuando hayas terminado.
Configurar Nginx para WordPress
A continuación, tendrás que crear un archivo de configuración del host virtual Nginx para servir a WordPress. puedes crearlo con el siguiente comando:
nano /etc/nginx/conf.d/wordpress.conf
Añade las siguientes líneas:
server { listen 80; server_name example.com; root /var/www/html/wordpress; index index.php; access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires max; log_not_found off; } }
Guarda y cierra el archivo. A continuación, comprueba si el 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 de configuración:
systemctl restart nginx
Accede al panel de control de WordPress
WordPress está instalado y configurado, ahora es el momento de acceder a la interfaz web.
Abre tu navegador web y escribe la URL http://example.com. Serás redirigido a la siguiente página:
Proporciona toda la información requerida como el nombre del sitio, el nombre de usuario del administrador, la contraseña, el correo electrónico del administrador y haz clic en el botón Instalar WordPress. Una vez terminada la instalación. Deberías ver la siguiente página:
Haz clic en el botón de inicio de sesión. Serás redirigido a la página de inicio de sesión de WordPress:
Proporciona tu nombre de usuario y contraseña de administrador y haz clic en el botón Iniciar sesión. Deberías ver el panel de control de WordPress en la siguiente página:
Asegurar WordPress con Let’s Encrypt
Para asegurar tu sitio de WordPress con el SSL gratuito de Let’s Encrypt, tendrás que instalar el cliente Certbot Let’s Encrypt en tu sistema. Por defecto, Certbot no está disponible en el repositorio por defecto de CentOS 8. Así que tendrás que descargarlo del sitio web oficial de Certbot.
Puedes descargar e instalar Certbot con los siguientes comandos:
wget https://dl.eff.org/certbot-auto mv certbot-auto /usr/local/bin/certbot-auto chown root /usr/local/bin/certbot-auto chmod 0755 /usr/local/bin/certbot-auto
Ahora, ejecuta el siguiente comando para obtener e instalar un certificado SSL para tu sitio web de WordPress.
certbot-auto --apache -d example.com
Se te pedirá que proporciones una dirección de correo electrónico y que aceptes las condiciones del servicio. También tendrás que elegir si quieres redirigir el tráfico HTTP a HTTPS. Selecciona la opción adecuada y pulsa Enter. Una vez que la instalación haya finalizado con éxito, deberías obtener la siguiente salida:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2019-08-14. 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
Configurar la renovación automática de Let’s Encrypt
El certificado Let’s Encrypt tiene una validez de 90 días. Por lo que se recomienda renovar el certificado antes de que caduque. Puedes configurar la tarea Cron para que renueve el certificado automáticamente.
Para ello, crea el crontab con el siguiente comando:
crontab -e
Añade la siguiente línea:
0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renew
Guarda y cierra el archivo, cuando hayas terminado.
Conclusión
En el tutorial anterior, hemos aprendido a instalar y configurar WordPress con Nginx en un servidor CentOS. También hemos aprendido a asegurar el sitio de WordPress con el SSL gratuito de Let’s Encrypt. Espero que ahora puedas alojar fácilmente tu propio sitio web de WordPress.