Cómo instalar WordPress en un VPS con Nginx, PHP y MariaDB

WordPress en tu propio VPS te da control total y rendimiento. Esta guía instala el conjunto clásico (Nginx, PHP-FPM y MariaDB), crea la base de datos, configura el sitio y activa HTTPS gratis.

Cómo instalar WordPress en un VPS con Nginx, PHP y MariaDB
  • Necesitas un dominio con un registro A hacia la IP del VPS y los puertos 80 y 443 abiertos.
  • Crea la base de datos con un usuario propio y una contraseña larga: no uses root para WordPress.
  • Comprueba la versión de PHP con ls /run/php/ antes de escribir la configuración de Nginx.
  • Haz copia de la base de datos y de la carpeta del sitio con regularidad.

Antes de empezar

  • Un VPS con Ubuntu o Debian y un usuario con sudo (primeros pasos).
  • Un dominio con un registro A hacia la IP del VPS y los puertos 80 y 443 abiertos (firewall).
  • Un snapshot del VPS limpio, por si quieres volver atrás.

1. Instalar Nginx, PHP y MariaDB

sudo apt update
sudo apt install -y nginx mariadb-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl unzip curl

Asegura la base de datos con el asistente y responde a las preguntas (contraseña de root de MariaDB, quitar usuarios anónimos, etc.):

sudo mysql_secure_installation

2. Crear la base de datos

Entra en MariaDB y crea una base de datos y un usuario solo para WordPress (cambia la contraseña por una larga y única):

sudo mariadb
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'CONTRASEÑA_LARGA_Y_UNICA';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3. Descargar WordPress

cd /tmp
curl -O https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
sudo mv wordpress /var/www/midominio.com
sudo chown -R www-data:www-data /var/www/midominio.com

4. Configurar Nginx

Mira qué versión de PHP-FPM tienes para poner bien el socket:

ls /run/php/

Verás algo como php8.3-fpm.sock. Crea el sitio con ese nombre en fastcgi_pass:

sudo nano /etc/nginx/sites-available/midominio.com
server {
    listen 80;
    server_name midominio.com www.midominio.com;
    root /var/www/midominio.com;
    index index.php;
    client_max_body_size 64M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}
sudo ln -s /etc/nginx/sites-available/midominio.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

5. HTTPS gratis con Certbot

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d midominio.com -d www.midominio.com

Más detalle en la guía web con Nginx y HTTPS.

6. Terminar la instalación en el navegador

  1. Abre https://midominio.com: WordPress te pide el idioma y los datos de la base de datos.
  2. Introduce el nombre wordpress, el usuario wpuser, la contraseña que creaste y el servidor localhost.
  3. Crea tu usuario administrador con una contraseña fuerte y entra en el panel (/wp-admin).

Mantenimiento y seguridad

  • Actualiza WordPress, los temas y los plugins con frecuencia; borra los que no uses.
  • Mantén el sistema al día: sudo apt update && sudo apt upgrade -y.
  • Haz copia de la base de datos y del sitio, por ejemplo: sudo mysqldump wordpress > wordpress.sql y una copia de /var/www/midominio.com. Guarda las copias fuera del VPS.
  • Usa contraseñas largas y, si puedes, doble factor en el administrador.

Para webs en PHP, React, Astro, Next.js o Python sin administrar un servidor, mira nuestro Web Hosting.

Preguntas frecuentes

¿Cuánta RAM necesita WordPress?

Un sitio pequeño funciona con poca memoria; con mucho tráfico o muchos plugins conviene más. Empieza con 2 GB y mide.

Me sale «502 Bad Gateway»

Casi siempre el socket de PHP-FPM no coincide con el de Nginx. Revisa ls /run/php/ y la línea fastcgi_pass, y reinicia con sudo systemctl restart php8.3-fpm (con tu versión).

¿Puedo subir archivos grandes?

Sube también upload_max_filesize y post_max_size en php.ini (en /etc/php/VERSIÓN/fpm/php.ini) además de client_max_body_size de Nginx.