Administrando servidores para WordPress

Como en todas mis entradas, voy a crear esta «chuleta» para consultarla posteriormente en lugar de buscar entre todas las urls guardadas de documentación, libros, documentos, etc., y si además le puede servir a alguien de ayuda, pues tanto mejor. 😉

Si administráis algún servidor con vuestras instalaciones de WordPress (léase aquí vuestras, como de vuestros clientes), estos comandos os podrán ser de utilidad en alguna ocasión.

Stack en el servidor

Como ya he contado en más de una ocasión, en estos momentos mi única opción de panel para servidores que administre yo es GridPane, eso no quiere decir que no utilice servicios de hosting como los de SiteGround, Kinsta o Nexcess (disclaimer: referal links. Uso todos estos servicios con clientes).

Debido a esto, al uso de GridPane, algunos comandos comenzarán con gp (de GridPane) y son exclusivos para este stack específico. Otros serán más genéricos y aplicables a cualquier servidor, así como los de wp-cli que tienen un equivalente similar sin gp y el dominio.

Espacio en el servidor o en directorios

Si queremos saber el espacio disponible en nuestro servidor, ejecutaremos df (disk free), en la mayoría de estos comandos, la opción -h (human) nos dará una salida más fácil de leer (en Kb, Mb. Gb, etc…):

df -h
df

Si lo que queremos es ver el tamaño de un directorio en concreto con todos sus directorios, usaremos el comando du (disk use) con el mismo parámetro anterior -h y añadiéndole el parámetro -c para que nos dé el total. Pero además con el parámetro añadido –max-depth=1 para que solo nos muestre un directorio dentro del seleccionado (o si lo preferimos con 0 o con 2 para que baje otro nivel, etc.) y como parámetro final, el directorio que queremos consultar, por ejemplo:

du -hc --max-depth=1 /var/www/fotodng.com/htdocs/wp-content/
du

Con estos comandos podemos encontrar fácilmente problemas de espacio en nuestro servidor o instalación de WordPress simplemente cambiando el directorio y el nivel de profundidad a inspeccionar.

Buscar textos en nuestra instalación

En ocasiones debemos buscar un determinado texto en nuestra instalación, ya sea porque no sabemos de donde viene esa cadena, ese error, etc.

En este caso podremos buscar si el texto está en la base de datos o en los archivos (en algún plugin o tema).

Para el primer caso, usaremos wp-cli con la opción db search y como en GridPane nos conectamos como root y tendríamos que usar la opción –allow-root, usaremos el comando gp (aquí la explicación del motivo). Si queremos buscar por ejemplo Carlos Longarela, ejecutaríamos (versión con gp y la estándar):

gp wp fotodng.com db search "Carlos Longarela"

wp db search "Carlos Longarela" --allow-root
db search

El comando de wp-cli search-replace no lo vamos a ver aquí, queda para un posterior artículo en el que hablaré de las migraciones entre servidores.

Si el texto lo queremos buscar directamente sobre los archivos, podemos usar grep con los modificadores -r (recursive) y -n (number) para mostrar el número de línea de la coincidencia y si queremos que no distinga entre mayúsculas y minúsculas le añadimos -i (ignore-case):

grep -rni "Carlos Longarela" /var/www/fotodng.com/htdocs/wp-content/*
grep

Si lo que queremos es buscar archivos, utilizaremos find seguido del directorio a buscar y si solo queremos buscar directorios -type d y -type f si lo queremos es buscar solo archivos, por ejemplo:

find /var/www -name calendario_server*.*
find

Memoria y procesos

Si queremos saber los procesos en ejecución en nuestro servidor, utilizaremos top, que nos permite ver la memoria total consumida, CPU, procesador «robado» en caso de tener «vecinos ruidosos» (máquinas virtuales que nos roben ciclos de CPU) y muchas otras opciones. Aquí tenéis un buen artículo sobre el uso de top.

También os recomiendo el uso de htop, muy similar al anterior y del que también han escrito un fantástico artículo en GridPane.

htop

Además de estos dos comandos interactivos, podemos ver la información de la CPU con lscpu o la memoria total, libre y usada con free -h.

Para ver información acerca de las particiones del disco, ejecutaremos lsblk o si queremos obtener información más detallada de cada partición fdisk -l.

Para obtener el nombre y versión del Sistema Operativo, ejecutaremos lsb_release -a.

Permisos de archivos y directorios

Si queremos tener configurado correctamente nuestro WordPress deberíamos darle un vistazo a Hardening WordPress.

En primer lugar, nos dice que los directorios de nuestra instalación deben pertenecer a la cuenta de usuario y aunque encontraremos en muchos sitios por internet como configurar que el propietario sea el usuario del servidor web (normalmente www-data); esto es un problema de seguridad, por lo que no se debería de utilizar la recomendación de chown www-data:www-data -R *

En su lugar deberemos hacer (dentro del directorio de WordPress):

chown <username>:<group>  -R *

Si estamos trabajando con GridPane ya tenemos una opción para que el sistema nos configure bien estos permisos, si por cualquier motivo los hemos cambiado (al pisar archivos de otra instalación).

reset permissions

Si debemos cambiar «manualmente» los permisos de nuestros archivos y directorios, estos deberán ser de 644 para los archivos y 755 para los directorios.

Los cambiaremos recursivamente con estos dos comandos:

find /var/www/misitio.com/htdocs/ -type f -exec chmod 644 {} \;

find /var/www/misitio.com/htdocs/ -type d -exec chmod 755 {} \;

Ver logs

En cualquier tarea de debug o comprobación del estado de salud de nuestra instalación de WordPress, deberemos ver diferentes archivos de logs, a veces de gran tamaño.

Ya hemos visto como buscar determinadas cadenas de texto con grep que también podemos aplicar para buscar en un único archivo de logs (o en varios) buscando un determinado error o evento.

Si queremos ver el contenido completo de un archivo, usaremos el comando cat, si además le añadimos el parámetro -n nos numerará las líneas, por ejemplo:

cat -n /var/www/misitio.com/wp-config.php

Pero hay ocasiones en las que los archivos, sobre todo de logs, son muy grandes y solo queremos ver un determinado número de líneas.

Para esta labor tenemos dos comandos, dependiendo de si queremos ver las primeras líneas (head) o las últimas líneas (tail). Ambos nos mostrarán las 10 primeras o últimas líneas del archivo. Si le añadimos el parámetro -n y un número, nos mostrará las X líneas del inicio o final del archivo.

head -n 25 /var/www/misitio.com/wp-config.php

Por último, con el parámetro -f para el comando tail, se quedará ejecutándose y nos irá mostrando las nuevas líneas del archivo. Esto es muy útil para ir monitorizando en tiempo real los archivos de logs e ir viendo los accesos a nuestra web o los errores.

tail -n 20 -f /var/log/nginx/fotodng.com.access.log
tail logs

Si queremos tener una monitorización en tiempo real de varios logs (accesos, errores, mysql, etc.) y con colores (configurables por tipos de logs) para ver rápidamente la información, multitail nos será de mucha utilidad.

Consideraciones finales

Esta ha sido una muy breve guía de comandos que considero de utilidad para hacer debug de problemas y manejar en el día a día nuestras instalaciones de WordPress.

He omitido la navegación por directorio, copia y creación de archivos y otros comandos básicos, simplemente he puesto aquí una selección que quizá en algún momento amplíe en alguna otra entrada (quizá multitail).

He puesto las opciones que utilizo más a menudo, pero cada comando tiene muchas más opciones. Recordad que podéis ver la ayuda y todas las opciones de cada uno con man, por ejemplo, man tail para ver la ayuda del comando tail.

También recordad que podemos «encadenar» comandos con el símbolo | (pipe) o enviar la salida de un comando a un archivo > (redirección de la salida), por ejemplo, para enviar los resultados de la búsqueda con grep a un archivo de texto:

ls -l | more

grep -rni "Carlos Longarela" /var/www/fotodng.com/htdocs/wp-content/* > resultados-cl.txt

Por último, quiero mencionar que todos estos comandos se han probado desde una máquina en Windows con Windows Terminal e instalaciones en WSL2 de Ubuntu y Kali Linux, y los comandos ejecutados en máquinas propias o de clientes conectadas mediante SSH o Mosh.

Deja un comentario