Esta guía cubre únicamente los pasos específicos de WordPress: base de datos MariaDB dedicada, configuración de Nginx para WordPress, instalación mediante WP-CLI, optimizaciones de PHP y seguridad de wp-admin. Los pasos previos están documentados por separado, consulte los enlaces al inicio de cada sección.
Requisitos previos
Antes de empezar, los siguientes elementos deben estar en su lugar en su VPS:
- Nginx y PHP 8.4-FPM instalados → guía Nginx + PHP-FPM
- Cortafuegos UFW configurado (puertos 80 y 443 abiertos) → guía UFW
- Acceso SSH protegido mediante clave → guía clave SSH
- Un nombre de dominio apuntando a la IP del VPS (registro A configurado)
Extensiones PHP requeridas para WordPress (fuente: wordpress.org/about/requirements/), verifique que están instaladas:
- php8.4-mysql, php8.4-curl, php8.4-gd, php8.4-mbstring, php8.4-xml, php8.4-zip, php8.4-intl, php8.4-opcache
Si estas extensiones no están presentes, añádalas:
sudo apt install -y php8.4-mysql php8.4-curl php8.4-gd php8.4-mbstring php8.4-xml php8.4-zip php8.4-intl php8.4-opcache ¿Nginx y PHP-FPM aún no están instalados? Siga primero nuestra guía instalar Nginx y PHP-FPM en un VPS Linux. Y para un acceso seguro desde el principio, configure una clave SSH.
Paso 1 - Crear la base de datos MariaDB dedicada
WordPress necesita una base de datos y un usuario dedicados. No utilice root para las conexiones de la aplicación.
Conéctese a MariaDB:
sudo mariadb -u root Cree la base de datos, el usuario y los privilegios (sustituya los valores de ejemplo):
CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'contrasena_segura';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'localhost';
FLUSH PRIVILEGES;
EXIT; Nota: utf8mb4 es el juego de caracteres recomendado por WordPress para la compatibilidad completa con emojis y caracteres Unicode (fuente: developer.wordpress.org/advanced-administration/before-install/howto-install/).
Paso 2 - Instalar WP-CLI
WP-CLI es la herramienta oficial de línea de comandos para WordPress. Permite instalar, configurar y mantener WordPress sin interfaz gráfica.
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp Verifique la instalación:
wp --info Fuente: wp-cli.org/docs/installing/
Paso 3 - Descargar y configurar WordPress
Descargar WordPress
sudo mkdir -p /var/www/misitio.es
sudo chown -R www-data:www-data /var/www/misitio.es
cd /var/www/misitio.es
sudo -u www-data wp core download --locale=es_ES Crear wp-config.php
sudo -u www-data wp config create \
--dbname=wordpress_db \
--dbuser=wordpress_user \
--dbpass=contrasena_segura \
--dbhost=localhost \
--dbcharset=utf8mb4 \
--locale=es_ES Ejecutar la instalación de WordPress
sudo -u www-data wp core install \
--url=https://misitio.es \
--title="Mi sitio" \
--admin_user=admin \
--admin_password=contrasena_admin \
[email protected] Nota: sustituya todos los valores de ejemplo por los suyos. Utilice una contraseña de administrador fuerte (16 caracteres como mínimo, mayúsculas, cifras, símbolos).
Paso 4 - Configurar el vhost de Nginx para WordPress
La configuración de Nginx para WordPress requiere directivas específicas para los enlaces permanentes y la seguridad. Cree un archivo de configuración dedicado:
sudo nano /etc/nginx/sites-available/misitio.es Contenido del archivo (sustituya misitio.es por su dominio):
server {
listen 80;
listen [::]:80;
server_name misitio.es www.misitio.es;
root /var/www/misitio.es;
index index.php;
# Tamaño máximo de las subidas (alinear con PHP)
client_max_body_size 64M;
# Enlaces permanentes de WordPress
location / {
try_files $uri $uri/ /index.php?$args;
}
# Procesamiento de PHP mediante PHP-FPM
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Bloquear el acceso a los archivos sensibles
location ~ /\.(ht|git|env) {
deny all;
}
# Bloquear el acceso directo a xmlrpc.php si no se utiliza
location = /xmlrpc.php {
deny all;
}
# Caché del navegador para los recursos estáticos
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
} Active el sitio y recargue Nginx:
sudo ln -s /etc/nginx/sites-available/misitio.es /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx Nota: la directiva try_files $uri $uri/ /index.php?$args; es indispensable para que los enlaces permanentes de WordPress funcionen correctamente (fuente: nginx.org/en/docs/http/ngx_http_core_module.html).
Paso 5 - Activar HTTPS con Certbot
Las opciones avanzadas de Certbot (renovación, wildcard, Apache) se detallan en nuestra guía dedicada a Certbot.
El certificado SSL es indispensable. Siga nuestra guía dedicada para obtenerlo y renovarlo automáticamente.
Tras la obtención del certificado, Certbot modifica automáticamente el vhost para redirigir HTTP hacia HTTPS y añadir las directivas SSL.
Paso 6 - Optimizaciones de PHP para WordPress
OPcache
OPcache almacena en caché el bytecode PHP compilado, lo que reduce el tiempo de procesamiento de cada petición. Verifique que está activado en /etc/php/8.4/fpm/conf.d/10-opcache.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=2
opcache.fast_shutdown=1 Estos valores están adaptados a un VPS con 4 GB de RAM. Fuente: php.net/manual/es/opcache.configuration.php.
Tamaño máximo de las subidas
Alinee el límite de subida de PHP con la directiva de Nginx client_max_body_size:
sudo nano /etc/php/8.4/fpm/php.ini Modifique o añada:
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 120 Reinicie PHP-FPM:
sudo systemctl restart php8.4-fpm Paso 7 - Proteger wp-admin
Como complemento, blinde el propio servidor: cortafuegos UFW y Fail2ban contra los ataques de fuerza bruta.
Proteger wp-admin por IP (opcional pero recomendado)
Si accede a la administración desde una IP fija, restrinja el acceso en el vhost de Nginx:
location /wp-admin {
allow 203.0.113.10; # Sustituir por su IP
deny all;
} Proteger wp-login.php contra la fuerza bruta
Añada en el vhost de Nginx para limitar los intentos de conexión:
location = /wp-login.php {
limit_req zone=login burst=3 nodelay;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
} Declare la zona de limitación en el bloque http de /etc/nginx/nginx.conf:
http {
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/m;
...
} Fail2ban para WordPress
Para una protección complementaria contra los intentos de conexión repetidos, configure Fail2ban con un filtro de WordPress: consulte la guía Fail2ban.
¿Qué configuración de VPS para WordPress?
| Tráfico mensual estimado | RAM recomendada | Oferta OuiHeberg |
|---|---|---|
| Hasta 10 000 visitas | 4 GB | VPS Linux 04G - 7,00 € IVA incl./mes |
| De 10 000 a 50 000 visitas | 8 GB | Ver la gama VPS Linux |
| Más de 50 000 visitas | 16 GB+ | Ver la gama VPS Linux |
Estas estimaciones suponen un sitio WordPress estándar con caché activada (WP Super Cache o W3 Total Cache). Un sitio WooCommerce o con mucho tráfico simultáneo necesita más RAM.
Preguntas frecuentes
¿Se pueden alojar varios sitios WordPress en un solo VPS?
Sí. Cree un vhost de Nginx distinto y una base de datos MariaDB dedicada para cada sitio. Cada sitio dispone así de su propio espacio de aislamiento. La RAM del VPS es el factor limitante: cuente aproximadamente 256-512 MB por sitio WordPress activo con OPcache.
¿Es necesario un VPS gestionado para WordPress?
No. Esta guía cubre la instalación en un VPS no gestionado con acceso root completo. Un VPS gestionado delega el mantenimiento del sistema (actualizaciones del SO, copias de seguridad) pero reduce el control y aumenta el coste. Para la mayoría de los proyectos, un VPS no gestionado con las buenas prácticas de seguridad (SSH por clave, UFW, Fail2ban) es suficiente.
¿Es necesario WP-CLI o se puede instalar WordPress manualmente?
WP-CLI es opcional. La instalación manual consiste en descargar el archivo desde wordpress.org/download/, extraerlo en /var/www/misitio.es y luego rellenar wp-config.php a mano. WP-CLI automatiza estos pasos y facilita las actualizaciones futuras (wp core update).
¿Cómo actualizar WordPress mediante WP-CLI?
cd /var/www/misitio.es
sudo -u www-data wp core update
sudo -u www-data wp plugin update --all
sudo -u www-data wp theme update --all ¿Cómo hacer una copia de seguridad de WordPress en un VPS?
Dos elementos que respaldar: los archivos y la base de datos.
# Copia de seguridad de la base de datos
sudo -u www-data wp db export /var/www/misitio.es/backup-$(date +%F).sql
# Copia de seguridad de los archivos
tar -czf /root/backup-wordpress-$(date +%F).tar.gz /var/www/misitio.es Automatice mediante cron o utilice las copias de seguridad automáticas incluidas en su oferta VPS OuiHeberg.
¿Aún no tiene un VPS? La oferta VPS Linux 04G (4 GB de RAM, NVMe, Anti-DDoS, soporte 24/7) es el punto de entrada recomendado para alojar WordPress.
→ Descubrir los VPS Linux de OuiHeberg
¿Tu sitio WordPress ya funciona en un alojamiento compartido? El procedimiento para trasladarlo a un VPS sin cortes (rsync, base de datos, cambio de DNS) se detalla en nuestra guía de migración.
