Cómo instalar Strapi CMS en Ubuntu 22.04
Strapi es un Sistema de Gestión de Contenidos (CMS) de código abierto y sin cabecera, construido con JavaScript. Al igual que otros CMS sin cabeza, Strapi no viene con un frontend de fábrica. Utiliza una API para su interfaz, lo que te permite construir el sitio web utilizando marcos 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 una de sus partes 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 a 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 con Ubuntu 22.04.
- Un usuario no root con privilegios sudo.
- Un nombre de dominio completo (FQDN) como
strapi.example.com
. - Asegúrate de que todo está actualizado.
$ sudo apt update $ sudo apt upgrade
- Pocos paquetes que necesite tu sistema.
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
Puede que algunos de estos paquetes ya estén instalados en tu sistema.
Paso 1 – Configurar el Cortafuegos
El primer paso es configurar el cortafuegos. Ubuntu viene con ufw (Uncomplicated Firewall) por defecto.
Comprueba si el cortafuegos se está ejecutando.
$ sudo ufw status
Deberías obtener la siguiente salida.
Status: inactive
Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al activarlo.
$ sudo ufw allow OpenSSH
Permite también los puertos HTTP y HTTPS.
$ sudo ufw allow http $ sudo ufw allow https
Habilita el cortafuegos
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Comprueba de nuevo el estado del cortafuegos.
$ sudo ufw status
Deberías ver un resultado similar.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
Paso 2 – Instalar y configurar PostgreSQL
Strapi funciona con PostgreSQL 11 y superiores. Ubuntu 22.04 viene con PostgreSQL 14 por defecto. Nosotros utilizaremos PostgreSQL 15 para nuestro tutorial.
Ejecuta el siguiente comando para añadir 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
Añade 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 utilizando el comando siguiente.
$ sudo apt install postgresql postgresql-contrib
El paquete postgresql-contrib
contiene algunas utilidades adicionales.
Comprueba el estado del servicio PostgreSQL.
$ sudo systemctl status postgresql ? postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Wed 2022-12-28 18:03:03 UTC; 17s ago Main PID: 4119 (code=exited, status=0/SUCCESS) CPU: 2ms Dec 28 18:03:03 strapi systemd[1]: Starting PostgreSQL RDBMS... Dec 28 18:03:03 strapi systemd[1]: Finished PostgreSQL RDBMS.
Verás que el servicio está activado y en ejecución por defecto.
Inicia el intérprete de comandos 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 segura.
postgres-# CREATE USER strapiuser WITH PASSWORD 'Your_Password';
Cambia el propietario de la base de datos por el usuario Strapi.
postgres-# ALTER DATABASE strapidb OWNER TO strapiuser;
Sal del intérprete de comandos.
postgres-# \q
Comprueba que tus credenciales funcionan.
$ psql --username strapiuser --password --host localhost strapidb Password: psql (15.1 (Ubuntu 15.1-1.pgdg22.04+1)) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. strapidb=>
Sal del intérprete de comandos escribiendo \q
.
Paso 3 – Instala Node.js
Ubuntu 22.04 incluye Node v12, que está obsoleto. Instalaremos la última versión LTS de Node, que es la v18 en el momento de escribir este tutorial.
Coge el instalador de Node v18 de Nodesource.
$ curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh
Ejecuta el script de instalación.
$ sudo bash nodesource_setup.sh
Instala Node.js.
$ sudo apt install nodejs
Comprueba la versión de Node.js.
$ node -v v18.12.1
Elimina el archivo de instalación.
$ rm nodesource_setup.sh
Paso 4 – Instala Strapi
Ejecuta el siguiente comando para instalar Strapi.
$ npx create-strapi-app@latest howtoforge-project Need to install the following packages: [email protected] Ok to proceed? (y) y
Introduce y
para proceder a la instalación. A continuación, se te pedirá que elijas el tipo de Instalación. Elige Personalizada para proceder y responde a las preguntas que se te plantean a continuación.
? Choose your installation type Custom (manual settings) ? Choose your preferred language JavaScript ? Choose your default database client postgres ? Database name: strapidb ? Host: 127.0.0.1 ? Port: 5432 ? Username: strapiuser ? Password: Your_Password ? Enable SSL connection: No
Dependiendo de tus necesidades, puedes elegir Typescript o JavaScript como lenguaje para Strapi.
Una vez completada la instalación, 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 Strapi Admin.
$ NODE_ENV=production npm run build
Inicia el servidor Strapi con el siguiente comando.
$ node ~/howtoforge-project/node_modules/.bin/strapi start
Tu aplicación debería ser visible en la URL http://<yourserverIP>:1337
. Pero antes, abre el puerto en el cortafuegos.
$ sudo ufw allow 1337
Una vez abierta la URL, deberías obtener la siguiente pantalla.
Pulsa Ctrl + C en el terminal para detener el servidor. Deberías eliminar la regla del cortafuegos porque no la necesitaremos.
$ sudo ufw delete allow 1337
Paso 5 – Instalar y configurar PM2
En lugar de iniciar el servidor manualmente, podemos utilizar PM2 (Process Manager 2) para gestionar el proceso y crear un servicio systemd para el mismo.
Cambia al directorio de inicio.
$ cd ~
Instala PM2.
$ sudo npm install pm2@latest -g
Crea y abre el archivo de configuración de PM2 para editarlo.
$ sudo nano ecosystem.config.js
Pega el siguiente contenido en el archivo. Asegúrate de introducir el nombre correcto del directorio junto con las credenciales 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 pulsando Ctrl + X e introduciendo Y cuando se te pida una vez hayas terminado.
Ejecuta tu instancia Strapi en segundo plano utilizando PM2.
$ pm2 start ecosystem.config.js
Obtendrás el siguiente resultado.
------------- __/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____ _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___ _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__ _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___ _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____ _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________ _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________ _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_ _\///______________\///______________\///__\///////////////__ Runtime Edition PM2 is a Production Process Manager for Node.js applications with a built-in Load Balancer. Start and Daemonize any application: $ pm2 start app.js Load Balance 4 instances of api.js: $ pm2 start api.js -i 4 Monitor in production: $ pm2 monitor Make pm2 auto-boot at server restart: $ pm2 startup To go further checkout: http://pm2.io/ ------------- [PM2] Spawning PM2 daemon with pm2_home=/home/navjot/.pm2 [PM2] PM2 Successfully daemonized [PM2][WARN] Applications strapi not running, starting... [PM2] App [strapi] launched (1 instances) ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? 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 con PM2 se reinician automáticamente si se bloquean o mueren.
Crea un script systemd de inicio utilizando el siguiente comando.
$ pm2 startup
Obtendrás el siguiente resultado.
[PM2] Init System found: systemd [PM2] To setup the Startup Script, copy/paste the following command: 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 PM2.
$ pm2 save
Ahora tu servicio Strapi se está ejecutando en segundo plano en modo de producción.
Paso 6 – Instalar Nginx
Ubuntu 22.04 incluye una versión 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
Añade el repositorio de 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
Iniciar el servidor Nginx.
$ sudo systemctl start nginx
Paso 7 – Instalar SSL
Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Ubuntu o descargar la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión 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
Utiliza el siguiente comando para asegurarte de que se ejecuta el comando Certbot 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
de tu servidor.
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.
$ sudo certbot renew --dry-run
Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.
Paso 8 – Configurar Nginx
Abre el archivo /etc/nginx/nginx.conf
para editarlo.
$ sudo nano /etc/nginx/nginx.conf
Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Crea y abre el archivo /etc/nginx/conf.d/strapi.conf
para editarlo.
$ sudo nano /etc/nginx/conf.d/strapi.conf
Pega en él el siguiente código.
server { # Redirect any http requests to 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; # TLS configuration 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 --- # fetch OCSP records from URL in ssl_certificate and cache them 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 pulsando Ctrl + X e introduciendo Y cuando se te solicite una vez hayas terminado.
Comprueba la sintaxis del archivo de configuración de Nginx.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
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 de producción.
Visita la URL https://strapi.example.com/admin
para crear un usuario administrador.
Introduce tus datos de administrador y haz clic en el botón Comencemos para acceder a la pantalla del panel de control del administrador.
A partir de aquí, puedes empezar 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 editarlo.
$ 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 versiones de Strapi en GitHub.
"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í tienes que cambiar 4.5.5
a la última versión estable. Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida una vez hayas terminado.
Instala la versión actualizada.
$ npm install
Reconstruye el panel de administración.
$ NODE_ENV=production npm run build
Arranca de nuevo el servidor.
$ cd ~ $ pm2 start ecosystem.config.js
Tu instalación de Strapi ya está actualizada y funcionando.
Conclusión
Con 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ícala en los comentarios más abajo.