WP-CLI es la herramienta oficial de línea de comandos de WordPress. Permite descargar el núcleo, crear wp-config.php, completar la instalación y gestionar plugins, usuarios y la base de datos sin abrir el navegador, lo que la hace ideal para servidores y automatización. En este tutorial instalarás WP-CLI en Ubuntu 24.04, desplegarás un sitio WordPress sobre Nginx, PHP-FPM y MariaDB, y verás los comandos que usarás a diario para mantenerlo.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS y al menos 1 GB de RAM, por ejemplo un VPS de CubePath.
  • Un usuario no root con privilegios sudo.
  • Un dominio con un registro DNS A apuntando a la IP del servidor. En los ejemplos se usa your_domain.
  • Los puertos 80 y 443 abiertos en el cortafuegos.

Paso 1: Instalar Nginx, MariaDB y PHP

WordPress necesita un servidor web, PHP con varias extensiones y una base de datos MySQL o MariaDB. Instala todo desde los repositorios de Ubuntu:

sudo apt update
sudo apt install nginx mariadb-server php8.3-fpm php8.3-cli php8.3-mysql php8.3-curl php8.3-xml php8.3-mbstring php8.3-zip php8.3-intl php8.3-gd php8.3-imagick

Abre HTTP y HTTPS en UFW:

sudo ufw allow 'Nginx Full'

Comprueba que los tres servicios están activos:

systemctl is-active nginx mariadb php8.3-fpm
active
active
active

Paso 2: Instalar WP-CLI

WP-CLI se distribuye como un único archivo PHAR. Descárgalo:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Comprueba que funciona antes de instalarlo:

php wp-cli.phar --info
OS:     Linux 6.8.0-... x86_64
Shell:  /bin/bash
PHP binary:     /usr/bin/php8.3
PHP version:    8.3.6
...
WP-CLI version: 2.12.0

Hazlo ejecutable y muévelo a una ruta del PATH con el nombre wp:

chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Verifica la instalación:

wp --version
WP-CLI 2.12.0

Para actualizar WP-CLI más adelante, ejecuta sudo wp cli update.

Paso 3: Crear la base de datos y el usuario

Crea una base de datos y un usuario exclusivos para WordPress. Entra en la consola de MariaDB como root (en Ubuntu se autentica por socket, sin contraseña):

sudo mariadb

Ejecuta estas sentencias sustituyendo your_strong_password por una contraseña larga y aleatoria:

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

Comprueba que el usuario puede conectarse:

mariadb -u wpuser -p -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wordpress          |
+--------------------+

Paso 4: Preparar el directorio del sitio

Los archivos de WordPress pertenecerán a www-data, el usuario con el que se ejecuta PHP-FPM, y ejecutarás WP-CLI como ese mismo usuario para que los archivos que cree tengan el propietario correcto. Crea el directorio del sitio y la carpeta de caché de WP-CLI (en el directorio personal de www-data, que es /var/www):

sudo mkdir -p /var/www/your_domain /var/www/.wp-cli
sudo chown www-data:www-data /var/www/your_domain /var/www/.wp-cli

Paso 5: Descargar WordPress y crear wp-config.php

Descarga la última versión de WordPress en español:

sudo -u www-data wp core download --locale=es_ES --path=/var/www/your_domain
Downloading WordPress 6.x (es_ES)...
md5 hash verified: ...
Success: WordPress downloaded.

Genera wp-config.php. La opción --prompt=dbpass pide la contraseña de forma interactiva para que no quede en el historial de la shell:

sudo -u www-data wp config create --path=/var/www/your_domain --dbname=wordpress --dbuser=wpuser --dbhost=localhost --locale=es_ES --prompt=dbpass
1/1 [--dbpass=<dbpass>]: 
Success: Generated 'wp-config.php' file.

wp config create comprueba la conexión con la base de datos y añade claves de seguridad (salts) aleatorias. Restringe los permisos del archivo, ya que contiene la contraseña:

sudo chmod 640 /var/www/your_domain/wp-config.php

Puedes cambiar constantes más tarde sin editar el archivo a mano, por ejemplo:

sudo -u www-data wp config set DISALLOW_FILE_EDIT true --raw --path=/var/www/your_domain

Esta constante desactiva el editor de temas y plugins del panel, una medida de seguridad habitual.

Paso 6: Configurar Nginx

Crea el bloque de servidor del sitio:

sudo nano /etc/nginx/sites-available/your_domain
server {
    listen 80;
    listen [::]:80;
    server_name your_domain;

    root /var/www/your_domain;
    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 = /xmlrpc.php {
        deny all;
    }

    location ~ /\.(?!well-known) {
        deny all;
    }
}

La regla try_files envía a index.php cualquier URL que no sea un archivo real, necesario para los enlaces permanentes. Si no usas la app móvil de WordPress ni Jetpack, bloquear xmlrpc.php elimina un objetivo frecuente de ataques de fuerza bruta.

Activa el sitio y recarga Nginx:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Obtén un certificado TLS con Certbot. El plugin de Nginx modifica el bloque anterior para servir HTTPS y redirigir HTTP:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain
Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain
Congratulations! You have successfully enabled HTTPS on https://your_domain

Paso 7: Completar la instalación de WordPress

Con la base de datos, los archivos y el servidor web listos, instala WordPress. Usa https:// en la URL para que el sitio se configure directamente con HTTPS y elige un nombre de administrador distinto de admin:

sudo -u www-data wp core install --path=/var/www/your_domain --url=https://your_domain --title="Mi sitio" --admin_user=your_admin_user --admin_email=you@your_domain --skip-email
Admin password: xK8#...generada...
Success: WordPress installed successfully.

Como no has indicado --admin_password, WP-CLI genera una contraseña aleatoria y la muestra una sola vez. Guárdala en tu gestor de contraseñas.

Comprueba la instalación:

sudo -u www-data wp core is-installed --path=/var/www/your_domain && echo "Instalado"
sudo -u www-data wp core version --path=/var/www/your_domain
Instalado
6.x

Configura los enlaces permanentes por nombre de entrada y la zona horaria:

sudo -u www-data wp rewrite structure '/%postname%/' --path=/var/www/your_domain
sudo -u www-data wp option update timezone_string Europe/Madrid --path=/var/www/your_domain

Abre https://your_domain en el navegador para ver el sitio y https://your_domain/wp-admin para entrar al panel.

Paso 8: Gestionar plugins y temas

Busca un plugin en el directorio oficial:

cd /var/www/your_domain
sudo -u www-data wp plugin search "two factor" --fields=name,slug,rating --per-page=5

Instala y activa un plugin por su slug:

sudo -u www-data wp plugin install two-factor --activate

Lista los plugins y su estado:

sudo -u www-data wp plugin list
+------------+----------+--------+---------+
| name       | status   | update | version |
+------------+----------+--------+---------+
| akismet    | inactive | none   | 5.x     |
| hello      | inactive | none   | 1.7.2   |
| two-factor | active   | none   | 0.x     |
+------------+----------+--------+---------+

Elimina los plugins que no uses, empezando por los que trae la instalación:

sudo -u www-data wp plugin delete hello akismet

Los temas funcionan igual con wp theme:

sudo -u www-data wp theme list
sudo -u www-data wp theme install astra --activate

Paso 9: Actualizar WordPress de forma segura

Antes de actualizar, exporta la base de datos. wp db export usa las credenciales de wp-config.php:

sudo mkdir -p /var/backups/wordpress
sudo chown www-data:www-data /var/backups/wordpress
sudo -u www-data wp db export /var/backups/wordpress/pre-update-$(date +%F).sql
Success: Exported to '/var/backups/wordpress/pre-update-2026-09-25.sql'.

Consulta qué hay pendiente y actualiza el núcleo, la base de datos, los plugins y los temas:

sudo -u www-data wp core check-update
sudo -u www-data wp core update
sudo -u www-data wp core update-db
sudo -u www-data wp plugin update --all
sudo -u www-data wp theme update --all
sudo -u www-data wp language core update

Tras actualizar, verifica que los archivos del núcleo coinciden con los publicados en wordpress.org. Es también una forma rápida de detectar archivos modificados por un malware:

sudo -u www-data wp core verify-checksums
Success: WordPress installation verifies against checksums.

Si algo falla tras la actualización, restaura la copia con sudo -u www-data wp db import /var/backups/wordpress/pre-update-2026-09-25.sql.

Paso 10: Cambiar el dominio del sitio

Al migrar un sitio a otro dominio, WordPress guarda la URL antigua en muchas filas de la base, algunas en datos serializados de PHP. wp search-replace las sustituye respetando la serialización. Primero haz una simulación para ver cuántos cambios haría:

sudo -u www-data wp search-replace 'https://old_domain' 'https://your_domain' --skip-columns=guid --dry-run
+------------------+-----------------------+--------------+------+
| Table            | Column                | Replacements | Type |
+------------------+-----------------------+--------------+------+
| wp_options       | option_value          | 2            | PHP  |
| wp_posts         | post_content          | 37           | SQL  |
...
Success: 46 replacements to be made.

Si el resultado es el esperado, repite el comando sin --dry-run. La columna guid se excluye porque es un identificador permanente de cada entrada y no debe cambiar.

Solución de problemas

"Error: This does not seem to be a WordPress installation." No estás en el directorio del sitio. Entra en /var/www/your_domain o añade --path=/var/www/your_domain.

"Warning: Failed to create directory '/var/www/.wp-cli/cache/'". El directorio de caché no existe o no pertenece a www-data. Créalo como en el paso 4.

"Error establishing a database connection". Comprueba las credenciales que tiene wp-config.php y prueba la conexión:

sudo -u www-data wp config get DB_USER
sudo -u www-data wp db check

Errores de memoria al instalar plugins grandes. WP-CLI usa el php.ini de la CLI (/etc/php/8.3/cli/php.ini), no el de FPM. Sube el límite solo para un comando:

sudo -u www-data php -d memory_limit=512M /usr/local/bin/wp plugin install woocommerce

Conclusión

Has instalado WP-CLI y desplegado WordPress en Ubuntu 24.04 sin pasar por el asistente web: base de datos, configuración, HTTPS e instalación desde la terminal. También sabes gestionar plugins, actualizar con una copia previa de la base y cambiar el dominio de forma segura.

Como siguientes pasos, programa copias diarias de la base de datos y de wp-content con un temporizador de systemd, activa una caché de objetos con Redis o ajusta el pool de PHP-FPM a la memoria de tu servidor.