Cómo instalar WordPress en un VPS con Alpine Linux (guía optimizada y realista)

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.conf en lugar de fastcgi_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/wordpress son correctos
  • Nginx apunta a /var/www/wordpress
  • Usaste fastcgi.conf en 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.