--- title: "Cómo instalar WordPress con WP-CLI en Ubuntu 24.04" description: "Instala WP-CLI y despliega WordPress desde la terminal en Ubuntu 24.04 con Nginx, PHP-FPM y MariaDB, y gestiona plugins, actualizaciones y copias de la base." category: "Despliegue de Aplicaciones" language: es source: https://cubepath.com/es/docs/despliegue-de-aplicaciones/instalacion-de-wordpress-via-cli-wp-cli updated: 2026-09-25 --- # Cómo instalar WordPress con WP-CLI en Ubuntu 24.04 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: ```bash 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: ```bash sudo ufw allow 'Nginx Full' ``` Comprueba que los tres servicios están activos: ```bash systemctl is-active nginx mariadb php8.3-fpm ``` ```output active active active ``` ## Paso 2: Instalar WP-CLI WP-CLI se distribuye como un único archivo PHAR. Descárgalo: ```bash curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar ``` Comprueba que funciona antes de instalarlo: ```bash php wp-cli.phar --info ``` ```output 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`: ```bash chmod +x wp-cli.phar sudo mv wp-cli.phar /usr/local/bin/wp ``` Verifica la instalación: ```bash wp --version ``` ```output 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): ```bash sudo mariadb ``` Ejecuta estas sentencias sustituyendo `your_strong_password` por una contraseña larga y aleatoria: ```sql 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: ```bash mariadb -u wpuser -p -e "SHOW DATABASES;" ``` ```output +--------------------+ | 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`): ```bash 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 ``` > Importante: No ejecutes WP-CLI como root. Se negará a hacerlo salvo que añadas `--allow-root`, y cualquier archivo que cree quedará a nombre de root. Usa siempre `sudo -u www-data wp ...`. ## Paso 5: Descargar WordPress y crear wp-config.php Descarga la última versión de WordPress en español: ```bash sudo -u www-data wp core download --locale=es_ES --path=/var/www/your_domain ``` ```output 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: ```bash sudo -u www-data wp config create --path=/var/www/your_domain --dbname=wordpress --dbuser=wpuser --dbhost=localhost --locale=es_ES --prompt=dbpass ``` ```output 1/1 [--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: ```bash sudo chmod 640 /var/www/your_domain/wp-config.php ``` Puedes cambiar constantes más tarde sin editar el archivo a mano, por ejemplo: ```bash 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: ```bash sudo nano /etc/nginx/sites-available/your_domain ``` ```nginx 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: ```bash 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: ```bash sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d your_domain ``` ```output 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`: ```bash 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 ``` ```output 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: ```bash 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 ``` ```output Instalado 6.x ``` Configura los enlaces permanentes por nombre de entrada y la zona horaria: ```bash 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. > Consejo: Para no repetir `--path` en cada comando, entra primero en el directorio con `cd /var/www/your_domain`. WP-CLI detecta la instalación de WordPress del directorio actual. En el resto de la guía se asume que estás en él. ## Paso 8: Gestionar plugins y temas Busca un plugin en el directorio oficial: ```bash 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: ```bash sudo -u www-data wp plugin install two-factor --activate ``` Lista los plugins y su estado: ```bash sudo -u www-data wp plugin list ``` ```output +------------+----------+--------+---------+ | 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: ```bash sudo -u www-data wp plugin delete hello akismet ``` Los temas funcionan igual con `wp theme`: ```bash 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`: ```bash 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 ``` ```output 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: ```bash 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: ```bash sudo -u www-data wp core verify-checksums ``` ```output 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: ```bash sudo -u www-data wp search-replace 'https://old_domain' 'https://your_domain' --skip-columns=guid --dry-run ``` ```output +------------------+-----------------------+--------------+------+ | 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: ```bash 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: ```bash 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.