Instalación Strapi · 11 min read · Oct 19, 2025

Cómo instalar Strapi CMS en Ubuntu 22.04

Strapi es un sistema de gestión de contenido (CMS) sin cabeza de código abierto, construido con JavaScript. Al igual que otros CMS sin cabeza, Strapi no viene con un frontend listo para usar. Utiliza una API para su frontend, lo que te permite construir el sitio web utilizando frameworks populares como React y Next.js. Basado en un sistema de plugins, Strapi es un CMS flexible cuyo panel de administración y API son extensibles, y cada parte es personalizable para adaptarse a cualquier caso de uso. Strapi también tiene un sistema de usuarios integrado para gestionar en detalle a qué tienen acceso los administradores y los usuarios finales.

En este tutorial, aprenderás cómo instalar la versión comunitaria de Strapi CMS en un servidor Ubuntu 22.04, junto con Nginx como servidor proxy inverso.

Requisitos previos

  • Un servidor que ejecute Ubuntu 22.04.
  • Un usuario no root con privilegios sudo.
  • Un nombre de dominio completamente calificado (FQDN) como strapi.example.com.
  • Asegúrate de que todo esté actualizado. $ sudo apt update $ sudo apt upgrade
  • Algunos paquetes que tu sistema necesita. $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y Algunos de estos paquetes pueden ya estar instalados en tu sistema.

Paso 1 - Configurar el Firewall

El primer paso es configurar el firewall. Ubuntu viene con ufw (Uncomplicated Firewall) por defecto.

Verifica si el firewall está en funcionamiento.

$ sudo ufw status

Deberías obtener la siguiente salida.

Estado: inactivo

Permite el puerto SSH para que el firewall no interrumpa la conexión actual al habilitarlo.

$ sudo ufw allow OpenSSH

Permite también los puertos HTTP y HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Habilita el Firewall

$ sudo ufw enable
El comando puede interrumpir las conexiones ssh existentes. ¿Proceder con la operación (y|n)? y
El firewall está activo y habilitado al inicio del sistema

Verifica el estado del firewall nuevamente.

$ sudo ufw status

Deberías ver una salida similar.

Estado: activo

Para                         Acción      Desde
--                         ------      ----
OpenSSH                    PERMITIR    En cualquier lugar
80/tcp                     PERMITIR    En cualquier lugar
443                        PERMITIR    En cualquier lugar
OpenSSH (v6)               PERMITIR    En cualquier lugar (v6)
80/tcp (v6)                PERMITIR    En cualquier lugar (v6)
443 (v6)                   PERMITIR    En cualquier lugar (v6)

Paso 2 - Instalar y Configurar PostgreSQL

Strapi funciona con PostgreSQL 11 y superior. Ubuntu 22.04 incluye PostgreSQL 14 por defecto. Usaremos PostgreSQL 15 para nuestro tutorial.

Ejecuta el siguiente comando para agregar la clave GPG de PostgreSQL.

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null

Agrega el repositorio APT a tu lista de fuentes.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Actualiza el repositorio del sistema.

$ sudo apt update

Ahora, puedes instalar PostgreSQL usando el siguiente comando.

$ sudo apt install postgresql postgresql-contrib

El paquete postgresql-contrib contiene algunas utilidades adicionales.

Verifica el estado del servicio de PostgreSQL.

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Cargado: cargado (/lib/systemd/system/postgresql.service; habilitado; preset del proveedor: habilitado)
     Activo: activo (salió) desde mié 2022-12-28 18:03:03 UTC; hace 17s
   PID principal: 4119 (código=salió, estado=0/ÉXITO)
        CPU: 2ms

Dec 28 18:03:03 strapi systemd[1]: Iniciando PostgreSQL RDBMS...
Dec 28 18:03:03 strapi systemd[1]: Finalizó PostgreSQL RDBMS.

Puedes ver que el servicio está habilitado y en funcionamiento por defecto.

Lanza la consola de PostgreSQL.

$ sudo -i -u postgres psql

Crea la base de datos Strapi.

postgres=# CREATE DATABASE strapidb;

Crea el usuario Strapi y elige una contraseña fuerte.

postgres-# CREATE USER strapiuser WITH PASSWORD 'Your_Password';

Cambia el propietario de la base de datos al usuario Strapi.

postgres-# ALTER DATABASE strapidb OWNER TO strapiuser;

Sal de la consola.

postgres-# \q

Verifica que tus credenciales funcionen.

$ psql --username strapiuser --password --host localhost strapidb
Contraseña:
psql (15.1 (Ubuntu 15.1-1.pgdg22.04+1))
Conexión SSL (protocolo: TLSv1.3, cifrado: TLS_AES_256_GCM_SHA384, bits: 256, compresión: apagada)
Escribe "help" para ayuda.

strapidb=>

Sal de la consola escribiendo \q.

Paso 3 - Instalar Node.js

Ubuntu 22.04 incluye Node v12, que está desactualizado. Instalaremos la última versión LTS de Node que es v18 en el momento de escribir este tutorial.

Obtén el instalador de Node v18 de Nodesource.

$ curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh

Ejecuta el script del instalador.

$ sudo bash nodesource_setup.sh

Instala Node.js.

$ sudo apt install nodejs

Verifica la versión de Node.js.

$ node -v
v18.12.1

Elimina el archivo del instalador.

$ rm nodesource_setup.sh

Paso 4 - Instalar Strapi

Ejecuta el siguiente comando para instalar Strapi.

$ npx create-strapi-app@latest howtoforge-project
Necesita instalar los siguientes paquetes:
  [email protected]
¿Está bien proceder? (y) y

Ingresa y para proceder con la instalación. A continuación, se te pedirá que elijas el tipo de instalación. Elige Personalizado para continuar y responde las preguntas de la siguiente manera.

? Elige tu tipo de instalación Personalizado (configuración manual)
? Elige tu idioma preferido JavaScript
? Elige tu cliente de base de datos predeterminado postgres
? Nombre de la base de datos: strapidb
? Host: 127.0.0.1
? Puerto: 5432
? Nombre de usuario: strapiuser
? Contraseña: Your_Password
? Habilitar conexión SSL: No

Dependiendo de tus requisitos, puedes elegir TypeScript o JavaScript como el idioma para Strapi.

Una vez que la instalación esté completa, estás listo para construir tu proyecto Strapi.

Cambia al directorio del proyecto.

$ cd howtoforge-project

Ejecuta el siguiente comando para construir el proyecto, incluyendo la interfaz de usuario de administración de Strapi.

$ NODE_ENV=production npm run build

Inicia el servidor Strapi usando el siguiente comando.

$ node ~/howtoforge-project/node_modules/.bin/strapi start

Tu aplicación debería ser visible en la URL http://:1337. Pero primero, abre el puerto en el firewall.

$ sudo ufw allow 1337

Una vez que abras la URL, deberías obtener la siguiente pantalla.

Strapi CMS Home

Presiona Ctrl + C en la terminal para detener el servidor. Deberías eliminar la regla del firewall porque no la necesitaremos.

$ sudo ufw delete allow 1337

Paso 5 - Instalar y Configurar PM2

En lugar de iniciar el servidor manualmente, podemos usar PM2 (Process Manager 2) para gestionar el proceso y crear un servicio systemd para el mismo.

Cambia al directorio home.

$ cd ~

Instala PM2.

$ sudo npm install pm2@latest -g

Crea y abre el archivo de configuración de PM2 para editar.

$ sudo nano ecosystem.config.js

Pega el siguiente contenido en el archivo. Asegúrate de ingresar el nombre de directorio correcto junto con las credenciales de Postgres.

module.exports = {
  apps: [
    {
      name: 'strapi',
      cwd: '/home/navjot/my-project',
      script: 'npm',
      args: 'start',
      env: {
        NODE_ENV: 'production',
        DATABASE_HOST: 'localhost',
        DATABASE_PORT: '5432',
        DATABASE_NAME: 'strapidb',
        DATABASE_USERNAME: 'strapiuser',
        DATABASE_PASSWORD: 'Your_Password',
      },
    },
  ],
};

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida una vez que termines.

Ejecuta tu instancia de Strapi en segundo plano usando PM2.

$ pm2 start ecosystem.config.js

Obtendrás la siguiente salida.

                        -------------

__/\\\\\\\\\____/\\\____________/\\\____/\\\\\\\_____ 
 _\/\\\/////////\\\_\/\\\\\______ /\\\\\__/\\\///////\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\///\\\/\\\/__\/\\\___________/\\\/___
    _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\__
        _\///______________\///______________\///__\///////////////__

                          Runtime Edition

        PM2 es un gestor de procesos de producción para aplicaciones Node.js
                     con un balanceador de carga incorporado.

                Inicia y demoniza cualquier aplicación:
                $ pm2 start app.js

                Balancea 4 instancias de api.js:
                $ pm2 start api.js -i 4

                Monitorea en producción:
                $ pm2 monitor

                Haz que pm2 se inicie automáticamente al reiniciar el servidor:
                $ pm2 startup

                Para ir más allá, consulta:
                http://pm2.io/

                        -------------

[PM2] Generando el demonio PM2 con pm2_home=/home/navjot/.pm2
[PM2] PM2 se ha demonizado correctamente
[PM2][WARN] Aplicaciones strapi no están en ejecución, iniciando...
[PM2] App [strapi] lanzada (1 instancias)
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id  ? name      ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user
    ? watching ?
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0   ? strapi    ? default     ? N/A     ? fork    ? 4824     ? 0s     ? 0    ? online    ? 0%       ? 31.9mb   ? navjot   ? disabled ?
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Las aplicaciones que se ejecutan bajo PM2 se reinician automáticamente si se bloquean o se cierran.

Crea un script de inicio systemd usando el siguiente comando.

$ pm2 startup

Obtendrás la siguiente salida.

[PM2] Sistema de inicio encontrado: systemd
[PM2] Para configurar el script de inicio, copia/pega el siguiente comando:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

Copia el comando de la salida anterior y ejecútalo.

$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

Guarda la lista de procesos de PM2.

$ pm2 save

Tu servicio Strapi ahora se está ejecutando en segundo plano en modo producción.

Paso 6 - Instalar Nginx

Ubuntu 22.04 incluye una versión más antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Agrega el repositorio para la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.1

Inicia el servidor Nginx.

$ sudo systemctl start nginx

Paso 7 - Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot usando el repositorio de Ubuntu o obtener la última versión usando la herramienta Snapd. Usaremos la versión de Snapd.

Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd esté actualizada. Asegúrate de que tu versión de Snapd esté actualizada.

$ sudo snap install core
$ sudo snap refresh core

Instala Certbot.

$ sudo snap install --classic certbot

Usa el siguiente comando para asegurarte de que el comando Certbot se ejecute creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d strapi.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/strapi.example.com en tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Haz una prueba del proceso para verificar si la renovación de SSL está funcionando bien.

$ sudo certbot renew --dry-run

Si no ves errores, estás listo. Tu certificado se renovará automáticamente.

Paso 8 - Configurar Nginx

Abre el archivo /etc/nginx/nginx.conf para editar.

$ sudo nano /etc/nginx/nginx.conf

Agrega la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.

Crea y abre el archivo /etc/nginx/conf.d/strapi.conf para editar.

$ sudo nano /etc/nginx/conf.d/strapi.conf

Pega el siguiente código en él.

server {
  # Redirigir cualquier solicitud http a https
  listen         80;
  listen         [::]:80;
  server_name    strapi.example.com;
  return 301     https://$host$request_uri;
}

server {
  listen                    443 ssl http2;
  listen                    [::]:443 ssl http2;
  server_name               strapi.example.com;

  access_log                /var/log/nginx/strapi.access.log;
  error_log                 /var/log/nginx/strapi.error.log;

  # Configuración de TLS
  ssl_certificate           /etc/letsencrypt/live/strapi.example.com/fullchain.pem;
  ssl_certificate_key       /etc/letsencrypt/live/strapi.example.com/privkey.pem;
  ssl_trusted_certificate   /etc/letsencrypt/live/strapi.example.com/chain.pem;
  ssl_protocols             TLSv1.2 TLSv1.3;

  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
  ssl_prefer_server_ciphers on;
  ssl_session_cache         shared:SSL:50m;
  ssl_session_timeout       1d;

  # OCSP Stapling ---
  # obtener registros OCSP de la URL en ssl_certificate y almacenarlos en caché
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  location / {
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_set_header        X-Forwarded-Host $http_host;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass              http://127.0.0.1:1337;
  }
}

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida una vez que termines.

Verifica la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: el archivo de configuración /etc/nginx/nginx.conf tiene una sintaxis correcta
nginx: la prueba del archivo de configuración /etc/nginx/nginx.conf fue exitosa

Reinicia el servicio Nginx.

$ sudo systemctl restart nginx

Ahora puedes acceder a Strapi CMS a través de la URL https://strapi.example.com. Verás la siguiente página que muestra que Strapi se está ejecutando en modo producción.

Strapi Production Home

Visita la URL https://strapi.example.com/admin para crear un usuario administrador.

Strapi Admin User Create Page

Completa tus detalles de administrador y haz clic en el botón Comencemos para proceder a la pantalla del panel de administración.

Strapi Admin Dashboard

A partir de aquí, puedes comenzar a crear contenido en Strapi.

Paso 9 - Actualizar Strapi

El primer paso para actualizar Strapi es detener el servidor.

$ cd ~
$ pm2 stop ecosystem.config.js

Cambia al directorio del proyecto y abre el archivo package.json para editar.

$ cd howtoforge-project
$ nano package.json

Actualiza todos los números de versión de los paquetes de Strapi a la última versión estable de Strapi. Puedes obtener la última versión disponible en la página de lanzamientos de GitHub de Strapi.

"devDependencies": {},
  "dependencies": {
    "@strapi/strapi": "4.5.5",
    "@strapi/plugin-users-permissions": "4.5.5",
    "@strapi/plugin-i18n": "4.5.5",
    "pg": "8.6.0"
  },

Aquí necesitas cambiar 4.5.5 a la última versión estable. Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida una vez que termines.

Instala la versión actualizada.

$ npm install

Reconstruye el panel de administración.

$ NODE_ENV=production npm run build

Inicia el servidor nuevamente.

$ cd ~
$ pm2 start ecosystem.config.js

Tu instalación de Strapi ahora está actualizada y en funcionamiento.

Conclusión

Esto concluye nuestro tutorial sobre la instalación de Strapi CMS en un servidor Ubuntu 22.04 y Nginx como servidor proxy inverso. Si tienes alguna pregunta, publícalas en los comentarios a continuación.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.