Configurando Nginx para servir webs con WordPress

Configurando Nginx para servir webs con WordPress - Antonio Sanchez Pro

Nota: Esta es la segunda entrega de una guías para configurar un VPS autoadministrado para alojar muchos proyectos pequeños y webs en desarrollo:

  1. Configurar un VPS con Ubuntu 20.04
  2. Configurar Nginx para servir webs con WordPress
  3. Configurar Redis y FastCGI como la mejor caché
  4. Migrar tus WordPress a tu VPS autoadministrado

Una vez configurado el VPS con Nginx, MariaDB y PHP siguiendo el tutorial anterior, nos pondremos manos a la obra para configurar Nginx para poder servir webs de forma segura, con certificados SSL.

Si quieres saber porqué elijo Nginx en lugar de Apache, pregúntamelo abajo en los comentarios 😉

Si a la hora de configurar tu servidor VPS te asaltan dudas de cómo continuar o de si lo estás haciendo correctamente, escríbeme en mi formulario de contacto y te intentaré ayudar.

Configurar Certbot para instalar certificados SSL

Para empezar, tenemos que instalar en nuestro Ubuntu el repositorio de aplicaciones Universe.

sudo apt install software-properties-common && add-apt-repository universe && apt update

Una vez agregado el repositorio ya podremos instalar la aplicación de Certbot, que será la que nos permita generar el certificado SSL. Estos certificados son “Let’s Encrypt” por lo que no tienen ningún coste adicional.

sudo apt install certbot python3-certbot-nginx -y

Crear certificados SSL es muy simple. Con el siguiente comando podemos crear un certificado para el dominio “dominio.com” en su versión con y sin www.

Vamos a poner un email donde recibiremos los avisos relacionados con el certificado, en este caso de ejemplo he usado “micorreo@mail.com”.

sudo certbot --nginx certonly -m micorreo@mail.com -d dominio.com -d www.dominio.com

Después de darle a intro, Certbot se encargará de generar el certificado para el dominio indicado y lo guardará en el directorio de instalación, normalmente /etc/letsencrypt/live/.

Solo nos queda que activar estas actualizaciones de forma recurrente y desatendida. Ponemos:

sudo certbot renew --post-hook "service nginx restart"

La parte final es para reiniciar el servidor de Nginx y que se vean reflejados los cambios en el navegador.

Si en el navegador te aparece como certificado caducado es posible que, aunque lo hayas renovado, que no hayas reiniciado Nginx y por eso te de el error.

Necesitamos SSL para implementar HTTP/2

Antes de continuar quería comentarte una mejora que conseguiremos al instalar un certificado SSL.

HTTPS es un protocolo de comunicación en internet que “garantiza” un mínimo de seguridad, cifrando los datos enviados entre servidor y el cliente. Sin HTTPS los datos se mandan en texto plano, por lo que cualquier intermediario puede “leer” esos datos enviados.

Es por eso que ya los navegadores, como Chrome o Firefox, muestran un candado abierto en rojo cuando la comunicación no es segura.

HTTP/2 es una evolución del protocolo HTTP que mejora los tiempos de carga porque permite enviar archivos en paralelo en una misma llamada.

Para habilitar HTTP/2 solo necesitamos SSL y habilitaro.

Veamos como se hace.

¿Te gusta lo que lees?

Cada martes a la 13h, una reflexión sobre negocios, crecimiento profesional, sentido poco común, hábitos, captación, ventas y persuasión.

Una gran lección explicada de forma simple para que la interiorices y hagas tuya.

Apúntate aquí.

Información básica sobre protección de datos

Responsable y destinatario
Antonio Sánchez Sánchez (un servidor).

Finalidad de la recogida y tratamiento
Al dejarme tu email, la idea es apuntarte a la newsletter. Te llegará un email de confirmación diferente. Mucha gente no pasa de ahí.

Derechos
En cada email que recibas, abajo del todo, hay un enlace para borrarse y dejar de recibir más. Un clic y estás fuera, cero resentimientos.

Información adicional
En la política de privacidad encontrarás información adicional sobre la recopilación y el uso de su información personal, incluida información sobre acceso, conservación, rectificación, eliminación, seguridad, y otros temas legales.

Crear un bloque de nginx y las carpetas donde irán los archivos

Para que el servidor Nginx entienda las peticiones y atienda las solicitudes para un dominio específico, tenemos que crear un bloque especifico para dirigir el tráfico hacia un directorio.

Para ello iremos a la “home” del usuario, y crearemos tres carpetas: una para los archivos, otra para la caché y la última para los logs, todo ello con un comando.

cd ~/ && mkdir -p dominio.com/logs dominio.com/public  dominio.com/cache

La carpeta logs está destinada a almacenar todos los reportes de error y de acceso de Nginx.

Después aplicaremos los permisos 775, que significa que propietario de los archivos puede leer, escribir y ejecutarlos, y que todos los demás solo pueden leer y ejecutarlo, a todas las carpetas.

sudo chmod -R 755 dominio.com

Por último, iremos a la carpeta de sitios disponibles de Nginx y comenzaremos a editar el archivo con el nombre de nuestro dominio.

cd /etc/nginx/sites-available && sudo nano dominio.com

Pegamos una configuración como la siguiente, pero, evidentemente, adaptando “dominio.com” a tu dominio.

También tendrás que modificar [RUTA A CARPETA] con la ruta de las carpetas que hemos creado antes.

Una vez pegado todo el archivo, tenemos que cerrar Nano y guardar el archivo. Para pulsaremos ctrl+X y luego Y para confirmar que queremos guardar los cambios.

Después, crearemos un enlace o link del archivo que acabamos de reditar en la carpeta de sitios habilitados de Nginx.

sudo ln -s /etc/nginx/sites-available/dominio.com /etc/nginx/sites-enabled/dominio.com

Y para comprobar que el archivo está correctamente configurado, lanzamos el siguiente comando:

sudo nginx -t

Si todo ha salido bien, se leerá en el visor:

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

Esto significa que está bien configurado, pero tendremos que reiniciar el servicio para que carguen los cambios implementados.

sudo service nginx reload

Y ya está, ya tenemos Nginx listo y funcionando.

Crear una base de datos en MySQL para WordPress

Una vez hemos terminado de configurar es hora de ponernos manos a la obra con la base de datos.

Como ya hemos instalado María DB en el post anterior, ahora oslamente tyenemos que loguearnos.

Para ello entraremos con el siguiente comando y pondremos la contraseña que hemos configurado a la hora de instalarlo.

mysql -u root -p

Ahora crearemos una base de datos, yo suelo ponerle un nombre que me ayude luego a identificarlo con el dominio para el que la voy a utilizar. En tu caso cambia “dominio_com” por el nombre que le quieras poner. El resto igual.

CREATE DATABASE dominio_com CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;

Para darle acceso a WordPress a esta base de datos que hemos creado, tenemos que darle un nombre de usuario y contraseña. Como es lógico, no le vamos a dar el acceso root porque cualquier problema de seguridad afectaría al resto de las webs que tengamos instaladas.

Tienes que cambiar “usuario” y “contraseña” en el siguiente comando.

CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'contraseña';

Y, para que pueda acceder a la base de datos que acabamos de crear, tenemos que concederle todos los privilegios.

Recuerda cambiar “usuario” y “dominio_com”.

GRANT ALL PRIVILEGES ON dominio_com.* TO 'usuario'@'localhost';

Y ya está, ya lo tenemos todo. Antes usaba el comando FLUSH PRIVILEGES para recargar la caché, pero Mysql ya lo hace en el momento que ha terminado de hacer el GRANT, por lo que no es necesario repetirlo.

Ya solamente te queda salir de MySQL con el siguiente comando.

exit;

Por último, instalamos WordPress utilizando WP-Cli

En el post anterior hemos instalado WP-CLI. A de crear una nueva instalación de WordPress es sin duda la forma más rápida de hacerlo, directamente desde la consola de comandos.

Cuando estoy creando instalaciones, yo suelo pegar todos los comandos seguidos para ir más rápido.

Pero para hacértelo más simple lo iré desarrollando y explicando línea por línea.

Primero tenemos que ir de nuevo al directorio “public” que hemos creado y donde instalaremos WordPress.

cd ~/sites/dominio.com/public

Ahora descargaremos el core de WordPress. Como estás leyendo este artículo imagino que tu idioma de uso cotidiano es el español, por ello mejor descargarlo directamente con el locale “es_ES”. Si me estás leyendo desde latinoamérica, también te recomiendo que instales es_ES en lugar de la específica de tu país, ya que tendrás más posibilidades de encontrar plugins que tengan la traducción en este idioma.

wp core download --locale=es_ES

Si accedes en este punto a tu dominio, verás la pantalla de configuración de WordPress, pero todos esos pasos los podemos solucionar con un solo comando.

Recuerda escribir el nombre de la base de datos que has creado arriba, junto con el usuario y la contraseña de MySQL.

También escoge otro prefijo para las tablas. Por defecto es “wp_” pero le puedes poner lo que quieras, como por ejemplo “dominio_”.

Como estamos creando un nuevo wp-config.php, yo suelo aprovechar para meter en este paso configuración extra.

La primera de las dos líneas que empiezan por “define(” es para deshabilitar la edición de ficheros desde el panel de administrador de WordPress, la segunda para limitar el número de revisiones a 10.

Aquí puedes meter lo que quieres. Si sueles trabajar con el DEBUG, también es buen momento.

wp config create --dbname=dominio_com --dbuser='usuario' --dbpass='contraseña' --dbprefix=wp_ --locale=es_ES --force --extra-php <<PHP define( 'DISALLOW_FILE_EDIT', true ); define( 'WP_POST_REVISIONS', 10 ); PHP

Ahora toca terminar de configurar las opciones e instalar WordPress en la base de datos.

Del comando de abajo tienes que cambiar “dominio.com”, “usuario”, “mi@correo.com” y “contraseña”. La variable del final de --skip-email es para que no te mande el email de bienvenida y el de nuevo usuario admin.

wp core install --url=https://dominio.com --title="dominio.com" --admin_user="usuario de wordpress" --admin_password="contraseña para WordPress" --admin_email=mi@correo.com --skip-email

Y voilà, ya tenemos WordPress listo, si entras en tu dominio.com verás la página de inicio de WordPress con el último theme instalado.

Pero antes de irte a celebrarlo, será mejor que configures los permisos de seguridad de las carpetas y archivos.

Para ello pondremos 755 en las carpetas y 644 en los archivos. Por último, permisos 600, que significa que solo el usuario propietario del archivo puede editarlo, el resto nada de nada.

find . -type d -exec chmod 755 {} \; find . -type f -exec chmod 644 {} \; chmod 600 wp-config.php

BONUS: Borrar el contenido por defecto de WordPress usando WP-Cli

Personalmente, cuando estoy dando de alta una nueva web con WP-Cli, yo no me quedo ahí. Sigo haciendo cositas en lugar de pasarme a hacerlo desde el administrador de WordPress.

Lo primero que hago es cargarme el artículo, comentario y página que viene por defecto.

wp post delete 1,2,3,4 --force

Después me cargo los dos plugins que vienen por defecto, y si tengo que instalar alguno de los que siempre uso, pues aprovecho y lo instalo en este paso también.

wp plugin delete hello wp plugin delete akismet

Y por último borro los themes por defecto. PAra poder borrarlos todos necesitas tener instalado y activo otro de tu elección.

En mi caso el tema que siempre suelo instalar por defecto es Astra WP Theme o Genesis Framework, es muy raro que me salga de esos dos.

Entonces lanzo este comando para instalar y activar Astra:

wp theme install astra --activate

Y estos para borrar los themes por defecto:

wp theme delete twentyseventeen wp theme delete twentynineteen wp theme delete twentytwenty wp theme delete twentytwentyone

Recopilando

¡¡Y ya está!!

Ya estás listo para comenzar a trabajar en tu WordPress. Ya solo nos quedarían dos artículos por revisar: configurar la caché y cómo migrar las webs de otro hosting a tu VPS.

Recuerda que esta es la segunda parte una serie de guías para configurar e instalar muchos proyectos de WordPress en un VPS autoadministrado para alojar muchos proyectos pequeños y webs en desarrollo:

  1. Configurar un VPS con Ubuntu 20.04
  2. Configurar Nginx para servir webs con WordPress
  3. Configurar Redis y FastCGI como la mejor caché
  4. Migrar tus WordPress a tu VPS autoadministrado

¿Te has quedado con alguna duda?

No te preocupes, déjame abajo un comentario e intentaré ayudarte y que tu duda sirva de inspiración para muchos otros.

Fotografía principal realizada por @scienceinhd en Unsplash