itsez.dev
📖Tutorial

Cómo instalar WordPress en un VPS

2026-07-30·4 min de lectura·Contenido y CMS

Ejecutar WordPress en tu propio VPS te da control sobre la aplicación, la base de datos y los backups. En este tutorial desplegarás los contenedores oficiales de WordPress y MySQL con Docker Compose, los pondrás detrás de HTTPS y prepararás el mantenimiento inicial.

Requisitos previos

Prepara un VPS Ubuntu 22.04 o 24.04 con SSH, IP pública y al menos 2 GB de RAM. Usa más memoria si esperas muchos plugins, procesamiento frecuente de imágenes o varios editores conectados. Crea un registro A como www.example.com apuntando al servidor y permite SSH, HTTP y HTTPS en el firewall del proveedor.

Necesitarás un cliente SSH, conocimientos básicos de Docker y un destino de backup fuera del VPS. WordPress es fácil de iniciar, pero también es fácil de perder si nunca copias la base de datos y los uploads.

Paso 1, Conectarte a tu servidor

Conéctate y actualiza el host:

ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curl

Crea un directorio dedicado con permisos restringidos:

mkdir -p /opt/wordpress
cd /opt/wordpress
chmod 750 /opt/wordpress

No ejecutes WordPress desde una carpeta accesible por otros usuarios. El archivo Compose y el de variables deben quedar limitados a administradores.

Paso 2, Instalar Docker y Docker Compose

Instala Docker Engine y el plugin de Compose siguiendo las instrucciones actuales de Docker para Ubuntu. Comprueba el runtime:

docker --version
docker compose version
systemctl enable --now docker

El plugin moderno se invoca como docker compose, no necesariamente como el binario antiguo docker-compose. Usa el comando actual para mantener la instalación soportada.

Paso 3, Ejecutar WordPress con Docker Compose

Crea un archivo .env y sustituye todos los placeholders antes de arrancar. Usa valores aleatorios largos para las dos contraseñas de la base de datos y no subas el archivo a Git:

MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=REPLACE_WITH_A_RANDOM_VALUE
MYSQL_ROOT_PASSWORD=REPLACE_WITH_ANOTHER_RANDOM_VALUE
WORDPRESS_DB_HOST=db:3306
WORDPRESS_DB_NAME=wordpress
WORDPRESS_DB_USER=wordpress
WORDPRESS_DB_PASSWORD=REPLACE_WITH_A_RANDOM_VALUE

Crea compose.yaml:

services:
  db:
    image: mysql:8.0
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    restart: unless-stopped
    depends_on:
      - db
    environment:
      WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST}
      WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
      WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
      WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      - wordpress_data:/var/www/html

volumes:
  db_data:
  wordpress_data:

La imagen wordpress:latest por defecto incluye Apache y es la mejor opcion para la mayoria de los casos. Quien empiece deberia usar esta imagen. La variante fpm requiere un servidor web externo; si la usas, nunca publiques el puerto 9000 al host — exponer el socket FPM es un riesgo de seguridad.

Desde marzo de 2021 la imagen oficial de WordPress genera wp-config.php automaticamente a partir de las variables de entorno en el primer inicio. No crees ni edites este archivo dentro del contenedor — configura WordPress unicamente mediante variables de entorno.

Arranca el stack y revisa su estado:

docker compose up -d
docker compose ps
docker compose logs --tail 100 wordpress

La base de datos puede tardar unos segundos en aceptar conexiones. No borres db_data mientras diagnosticas un error.

Paso 4, Configurar el proxy inverso

El contenedor de WordPress solo escucha en el puerto 8080 de localhost, por lo que no queda expuesto directamente. Colócalo detrás de Caddy, Nginx o el proxy de tu proveedor. El proxy debe dirigir www.example.com a 127.0.0.1:8080 y obtener el certificado mediante su flujo ACME soportado.

Abre los puertos 80 y 443 en el firewall del proveedor y del host, pero mantén el 8080 cerrado al exterior. Durante el asistente del navegador, usa la dirección HTTPS final para evitar cookies y redirects con el esquema incorrecto. Si WordPress está detrás de un proxy HTTPS, el proxy inverso debe reenviar la cabecera X-Forwarded-Proto para que WordPress genere enlaces HTTPS correctos. Sin ella, la página de login y los redirects de administración causan bucles infinitos de redirección.

Paso 5, Primer acceso y configuración inicial

Visita https://www.example.com. Elige idioma, define el título y crea la cuenta administradora con una contraseña única. Borra el contenido de ejemplo, revisa los permalinks e instala solo plugins que hayas revisado.

Configura la zona horaria y comprueba las subidas de medios. Si usas proxy, verifica que el panel detecta HTTPS y que no hay bucles de redirección. Crea una cuenta de editor sin privilegios de administrador para publicar normalmente.

Mantenimiento

Haz backup de los dos volúmenes — wordpress_data (temas, plugins, subidas) y db_data (base de datos) — así como del Compose y del .env mediante un proceso protegido. Prueba la restauración en otra máquina. Actualiza WordPress, plugins e imágenes dentro de una ventana de mantenimiento y revisa la compatibilidad antes de cambiar la versión mayor de MySQL.

Vigila disco, memoria y logs. Si el sitio cae, revisa docker compose ps, los logs de WordPress y los de la base de datos antes de reiniciar todo, porque el primer error suele ser el más útil.

Herramientas mencionadas

WordPress

CMS open-source que impulsa gran parte de la web, con plugins, temas y un editor de bloques integrado.

GratisSin tarjetaOSS

Software auto-hospedado completamente gratis. Hospédalo donde quieras con PHP y MySQL.

SOBRE NOSOTROS

Honesto, independiente, sin relleno.

Sin patrocinios. Solo un análisis claro de qué hace, cuánto cuesta y lo que debes saber antes de comprometerte.

Leer más

FAQ

Preguntas frecuentes

Cuánta RAM necesita un WordPress pequeño?

Un sitio pequeño puede empezar con 2 GB de RAM, pero los plugins, las imágenes y el tráfico pueden requerir más. Vigila la memoria antes de aumentar límites.

WordPress debe usar MySQL o MariaDB?

Usa una imagen compatible con la documentación actual de WordPress y fija una versión mayor compatible. No actualices la base de datos a ciegas.

Dónde se guardan las imágenes subidas?

Guárdalas en un volumen persistente de Docker o en un destino de backup separado. El filesystem del contenedor no es un backup.