Ricerca nel sito web

Come installare Strapi CMS su Ubuntu 22.04


Su questa pagina

  1. Prerequisiti
  2. Passaggio 1: configurazione del firewall
  3. Passaggio 2 - Installa e configura PostgreSQL
  4. Passaggio 3 - Installa Node.js
  5. Passaggio 4 - Installa Strapi
  6. Passaggio 5 - Installa e configura PM2
  7. Passaggio 6 - Installa Nginx
  8. Passaggio 7 - Installa SSL
  9. Passaggio 8 - Configura Nginx
  10. Passaggio 9 - Aggiorna Strapi
  11. Conclusione

Strapi è un sistema di gestione dei contenuti (CMS) open source e senza testa, creato con JavaScript. Come altri CMS senza testa, Strapi non viene fornito con un frontend pronto all'uso. Utilizza un'API per il suo frontend, che consente di creare il sito Web utilizzando framework popolari come React e Next.js. Basato su un sistema di plug-in, Strapi è un CMS flessibile il cui pannello di amministrazione e API sono estensibili e ogni parte è personalizzabile per adattarsi a qualsiasi caso d'uso. Strapi ha anche un sistema utente integrato per gestire in dettaglio ciò a cui hanno accesso gli amministratori e gli utenti finali.

In questo tutorial imparerai come installare la versione community di Strapi CMS su un server Ubuntu 22.04, insieme a Nginx come server proxy inverso.

Prerequisiti

  • A server running Ubuntu 22.04.

  • A non-root user with sudo privileges.

  • A fully qualified domain name (FQDN) like strapi.example.com.

  • Make sure everything is updated.

    $ sudo apt update
    $ sudo apt upgrade
    
  • Few packages that your system needs.

    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

    Some of these packages may already be installed on your system.

Passaggio 1: configurare il firewall

Il primo passo è configurare il firewall. Ubuntu viene fornito con ufw (Uncomplicated Firewall) per impostazione predefinita.

Controlla se il firewall è in esecuzione.

$ sudo ufw status

Dovresti ottenere il seguente output.

Status: inactive

Consenti porta SSH in modo che il firewall non interrompa la connessione corrente attivandola.

$ sudo ufw allow OpenSSH

Consenti anche porte HTTP e HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Abilita il firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Controlla di nuovo lo stato del firewall.

$ sudo ufw status

Dovresti vedere un output simile.

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)

Passaggio 2: installa e configura PostgreSQL

Strapi funziona con PostgreSQL 11 e versioni successive. Ubuntu 22.04 viene fornito con PostgreSQL 14 per impostazione predefinita. Useremo PostgreSQL 15 per il nostro tutorial.

Eseguire il comando seguente per aggiungere la chiave GPG PostgreSQL.

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

Aggiungi il repository APT all'elenco delle fonti.

$ 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'

Aggiorna il repository di sistema.

$ sudo apt update

Ora puoi installare PostgreSQL usando il comando seguente.

$ sudo apt install postgresql postgresql-contrib

Il pacchetto postgresql-contrib contiene alcune utilità extra.

Controlla lo stato del servizio 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.

Puoi vedere che il servizio è abilitato e in esecuzione per impostazione predefinita.

Avvia la shell PostgreSQL.

$ sudo -i -u postgres psql

Creare il database Strapi.

postgres=# CREATE DATABASE strapidb;

Crea l'utente Strapi e scegli una password sicura.

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

Modificare il proprietario del database in utente Strapi.

postgres-# ALTER DATABASE strapidb OWNER TO strapiuser;

Esci dal guscio.

postgres-# \q

Verifica che le tue credenziali funzionino.

$ 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=>

Uscire dalla shell digitando \q.

Passaggio 3: installa Node.js

Ubuntu 22.04 viene fornito con Node v12 che è obsoleto. Installeremo l'ultima versione LTS di Node che è v18 al momento della stesura di questo tutorial.

Prendi il programma di installazione di Node v18 da Nodesource.

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

Esegui lo script di installazione.

$ sudo bash nodesource_setup.sh

Installa Node.js.

$ sudo apt install nodejs

Verifica la versione di Node.js.

$ node -v
v18.12.1

Elimina il file di installazione.

$ rm nodesource_setup.sh

Passo 4 - Installa Strapi

Eseguire il seguente comando per installare Strapi.

$ npx  howtoforge-project
Need to install the following packages:
  
Ok to proceed? (y) y

Inserisci y per procedere con l'installazione. Successivamente, ti verrà chiesto di scegliere il tipo di installazione. Scegli Personalizzato per procedere e rispondi alle domande come segue.

? 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

A seconda delle tue esigenze, puoi scegliere Typescript o JavaScript come lingua per Strapi.

Una volta completata l'installazione, sei pronto per costruire il tuo progetto Strapi.

Passa alla directory del progetto.

$ cd howtoforge-project

Eseguire il comando seguente per creare il progetto, inclusa l'interfaccia utente di amministrazione di Strapi.

$ NODE_ENV=production npm run build

Avvia il server Strapi usando il seguente comando.

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

La tua applicazione dovrebbe essere visibile sull'URL http://:1337. Ma prima, apri la porta nel firewall.

$ sudo ufw allow 1337

Una volta aperto l'URL, dovresti ottenere la seguente schermata.

Premi Ctrl + C nel terminale per arrestare il server. Dovresti eliminare la regola del firewall perché non ne avremo bisogno.

$ sudo ufw delete allow 1337

Passo 5 - Installa e configura PM2

Invece di avviare il server manualmente, possiamo utilizzare PM2 (Process Manager 2) per gestire il processo e creare un servizio systemd per lo stesso.

Passa alla home directory.

$ cd ~

Installa PM2.

$ sudo npm install  -g

Crea e apri il file di configurazione PM2 per la modifica.

$ sudo nano ecosystem.config.js

Incolla il seguente contenuto nel file. Assicurati di inserire il nome della directory corretto insieme alle credenziali di 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',
      },
    },
  ],
};

Salva il file premendo Ctrl + X e inserendo Y quando richiesto una volta terminato.

Esegui la tua istanza Strapi in background utilizzando PM2.

$ pm2 start ecosystem.config.js

Otterrai il seguente output.

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

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


                          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 ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Le applicazioni in esecuzione su PM2 si riavviano automaticamente se si arrestano in modo anomalo o vengono interrotte.

Crea uno script systemd di avvio utilizzando il seguente comando.

$ pm2 startup

Otterrai il seguente output.

[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 il comando dall'output precedente ed eseguilo.

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

Salva l'elenco dei processi PM2.

$ pm2 save

Il tuo servizio Strapi è ora in esecuzione in background in modalità di produzione.

Passaggio 6: installa Nginx

Ubuntu 22.04 viene fornito con una versione precedente di Nginx. Per installare l'ultima versione, devi scaricare il repository Nginx ufficiale.

Importa la chiave di firma Nginxs.

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

Aggiungi il repository per la versione stabile di Nginxs.

$ 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

Aggiorna i repository di sistema.

$ sudo apt update

Installa Nginx.

$ sudo apt install nginx

Verificare l'installazione.

$ nginx -v
nginx version: nginx/1.22.1

Avvia il server Nginx.

$ sudo systemctl start nginx

Passaggio 7: installa SSL

Dobbiamo installare Certbot per generare il certificato SSL. Puoi installare Certbot usando il repository Ubuntus o prendere l'ultima versione usando lo strumento Snapd. Useremo la versione Snapd.

Ubuntu 22.04 viene fornito con Snapd installato per impostazione predefinita. Esegui i seguenti comandi per assicurarti che la tua versione di Snapd sia aggiornata. Assicurati che la tua versione di Snapd sia aggiornata.

$ sudo snap install core
$ sudo snap refresh core

Installa Cerbot.

$ sudo snap install --classic certbot

Utilizzare il seguente comando per assicurarsi che il comando Certbot venga eseguito creando un collegamento simbolico alla directory /usr/bin.

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

Eseguire il seguente comando per generare un certificato SSL.

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

Il comando precedente scaricherà un certificato nella directory /etc/letsencrypt/live/strapi.example.com sul tuo server.

Genera un certificato di gruppo Diffie-Hellman.

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

Esegui un'esecuzione a secco del processo per verificare se il rinnovo SSL funziona correttamente.

$ sudo certbot renew --dry-run

Se non vedi errori, sei a posto. Il tuo certificato si rinnoverà automaticamente.

Passaggio 8: configurare Nginx

Apri il file /etc/nginx/nginx.conf per la modifica.

$ sudo nano /etc/nginx/nginx.conf

Aggiungere la riga seguente prima della riga include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Salva il file premendo Ctrl + X e immettendo Y quando richiesto.

Crea e apri il file /etc/nginx/conf.d/strapi.conf per la modifica.

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

Incolla il seguente codice al suo interno.

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;
  }
}

Salva il file premendo Ctrl + X e inserendo Y quando richiesto una volta terminato.

Verificare la sintassi del file di configurazione 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

Riavvia il servizio Nginx.

$ sudo systemctl restart nginx

Ora puoi accedere a Strapi CMS tramite l'URL https://strapi.example.com. Vedrai la pagina seguente che mostra che Strapi è in esecuzione in modalità di produzione.

Visita l'URL https://strapi.example.com/admin per creare un utente amministratore.

Inserisci i dettagli dell'amministratore e fai clic sul pulsante Iniziamo per passare alla schermata del dashboard dell'amministratore.

Da qui in poi puoi iniziare a creare contenuti su Strapi.

Passaggio 9: aggiorna Strapi

Il primo passo per aggiornare Strapi è fermare il server.

$ cd ~
$ pm2 stop ecosystem.config.js

Passa alla directory del progetto e apri il file package.json per la modifica.

$ cd howtoforge-project
$ nano package.json

Aggiorna tutti i numeri di versione del pacchetto Strapi all'ultima versione stabile di Strapi. È possibile ottenere l'ultima versione disponibile dalla pagina dei rilasci di Strapis 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"
  },

Qui devi cambiare 4.5.5 all'ultima versione stabile. Salva il file premendo Ctrl + X e inserendo Y quando richiesto una volta terminato.

Installa la versione aggiornata.

$ npm install

Ricrea il pannello di amministrazione.

$ NODE_ENV=production npm run build

Riavvia il server.

$ cd ~
$ pm2 start ecosystem.config.js

L'installazione di Strapi è ora aggiornata e funzionante.

Conclusione

Questo conclude il nostro tutorial sull'installazione di Strapi CMS su un server Ubuntu 22.04 e Nginx come server proxy inverso. Se hai domande, pubblicale nei commenti qui sotto.