Hace poco compartí una guía práctica para configurar Nginx con WordPress en Debian. Esta vez necesitaba un entorno nuevo para pruebas y decidí probar Alpine Linux, una de las distribuciones más ligeras y rápidas que existen para un VPS.
Esa ligereza tiene su precio: casi nada viene configurado por defecto. Y WordPress no es precisamente indulgente con las configuraciones a medias. Esta guía te muestra paso a paso cómo montar un stack completo Nginx + PHP-FPM + MariaDB + WordPress, con las optimizaciones reales que suelo usar en entornos de producción.
1. Preparación inicial del sistema
Lo primero, como siempre, es actualizar el sistema:
apk update && apk upgrade
Después instalamos las herramientas básicas que vamos a necesitar:
apk add nano curl wget unzip
2. Instalación del stack
Instalar Nginx, PHP-FPM y MariaDB
Con un solo comando instalamos todo el stack principal:
apk add nginx mariadb mariadb-client \
php83 php83-fpm php83-mysqli php83-json php83-openssl \
php83-curl php83-zlib php83-xml php83-phar php83-intl \
php83-dom php83-xmlreader php83-xmlwriter php83-ctype \
php83-session php83-mbstring php83-gd
Importante: Alpine no instala las extensiones de PHP de forma automática. Si falta alguna, WordPress puede fallar silenciosamente o mostrar errores confusos. Instala todas las que aparecen arriba.
Paso crítico: eliminar la configuración por defecto de Nginx
Alpine incluye un archivo de configuración predeterminado que rompe WordPress. Si no lo eliminas, vas a tener errores 404 o 500 muy difíciles de diagnosticar.
rm /etc/nginx/http.d/default.conf
No saltes este paso. Te ahorrará mucho dolor de cabeza.
3. Configurar MariaDB
Inicializamos la base de datos y arrancamos el servicio:
mysql_install_db --user=mysql --datadir=/var/lib/mysql
rc-service mariadb start
rc-update add mariadb
Ahora ejecutamos el asistente de seguridad para eliminar las configuraciones inseguras por defecto:
mysql_secure_installation
Una vez dentro de MySQL, creamos la base de datos y el usuario para WordPress:
CREATE DATABASE wordpress;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'password_seguro';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
4. Configurar PHP-FPM
Editamos el archivo del pool de PHP-FPM:
nano /etc/php83/php-fpm.d/www.conf
Buscamos y modificamos estas líneas:
user = nginx
group = nginx
listen = 127.0.0.1:9000
Si dejas el usuario como
nobody(valor por defecto), tendrás problemas de permisos cuando WordPress intente escribir archivos.
Iniciamos el servicio y lo agregamos al arranque:
rc-service php-fpm83 start
rc-update add php-fpm83
5. Configurar Nginx para WordPress
Creamos el archivo de configuración del sitio:
nano /etc/nginx/http.d/wordpress.conf
Y usamos esta configuración base:
server {
listen 80;
server_name tu-dominio.com;
root /var/www/wordpress;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
}
Nota importante: En Alpine se recomienda usar
fastcgi.confen lugar defastcgi_params. Esto evita el clásico error «File not found» al procesar los archivos PHP.
6. Descargar e instalar WordPress
Creamos el directorio y descargamos la última versión:
mkdir -p /var/www/wordpress
cd /var/www
wget https://wordpress.org/latest.zip
unzip latest.zip
7. Permisos (un punto clave en Alpine)
Asignamos los permisos correctos para que Nginx pueda leer y escribir sin problemas:
chown -R nginx:nginx /var/www/wordpress
chmod -R 755 /var/www
Recuerda que todas las carpetas en la ruta necesitan permiso de ejecución (
+x). Si falta en alguna, WordPress no podrá acceder a sus propios archivos
8. Iniciar Nginx y terminar la instalación
Arrancamos Nginx y lo agregamos al arranque automático:
rc-service nginx start
rc-update add nginx
Ahora puedes abrir tu navegador e ir a:
http://TU_IP
Deberías ver el asistente de instalación de WordPress.
9. Optimizaciones para producción
FastCGI Cache
El caché de FastCGI es una de las mejoras más efectivas para reducir la carga del servidor. Primero añadimos esto fuera del bloque server (en nginx.conf o en el archivo del sitio):
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
Luego, dentro del bloque server, agregamos la lógica para evitar cachear peticiones que no deben guardarse:
set $no_cache 0;
if ($request_method = POST) {
set $no_cache 1;
}
if ($http_cookie ~* "wordpress_logged_in") {
set $no_cache 1;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_cache WORDPRESS;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
}
Gzip
Activamos la compresión para reducir el tamaño de las respuestas hasta en un 80%:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 256;
10. Fix para Cloudflare con SSL Flexible
Si estás usando Cloudflare en modo SSL Flexible, agrega este código al principio de wp-config.php para evitar bucles de redirección:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
&& $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS'] = 'on';
}
Problemas frecuentes y soluciones
Error 403
Casi siempre es por permisos. Solución rápida:
chown -R nginx:nginx /var/www/wordpress
Error «File not found»
Significa que FastCGI está mal configurado. Asegúrate de usar include fastcgi.conf; en el bloque de PHP.
WordPress no sube imágenes
Verifica que tengas instalados php83-gd y php83-mbstring.
No se conecta a la base de datos
Confirma que php83-mysqli esté instalado y que las credenciales en wp-config.php coincidan exactamente con las que creaste en MariaDB.
Checklist antes de publicar
- Eliminaste
/etc/nginx/http.d/default.conf - Instalaste todas las extensiones PHP necesarias
- Cambiaste el usuario de PHP-FPM a
nginx - Los permisos en
/var/www/wordpressson correctos - Nginx apunta a
/var/www/wordpress - Usaste
fastcgi.confen la configuración de PHP - Activaste el caché FastCGI (recomendado)
- Activaste Gzip
Listo para usar
Alpine Linux no es “plug and play”. Es más como armar un servidor desde cero, pieza por pieza. Si algo está mal configurado, suele fallar sin darte muchas pistas.
Pero cuando lo haces bien, el resultado vale la pena: un stack extremadamente ligero, rápido y estable que consume muy pocos recursos de tu VPS.
Al final terminas con un WordPress que responde con velocidad y sin desperdiciar memoria RAM. Justo lo que buscas cuando quieres un entorno eficiente.
¿Usas Alpine para WordPress? ¿Qué truco o optimización extra has descubierto? Cuéntame en los comentarios.