Ricerca nel sito web

Come installare Sails.js Framework con Nginx su Ubuntu 22.04


Su questa pagina

  1. Prerequisiti
  2. Passaggio 1: configurazione del firewall
  3. Passaggio 2 - Installa Node Version Manager (NVM)
  4. Passaggio 3 - Installa Node.js
  5. Passaggio 4 - Installa Sails.js
  6. Passaggio 5: crea un'applicazione demo
  7. Passaggio 6 - Crea un file di servizio systemd
  8. Passaggio 7 - Installa Nginx
  9. Passaggio 8 - Installa SSL
  10. Passaggio 9 - Configura Nginx
  11. Passaggio 10 - Accedi all'app Sails.js
  12. Conclusione

Sails.js è un framework JavaScript MVC full-stack per Node.js. Viene utilizzato per lo sviluppo di applicazioni Web in tempo reale. È ispirato a Ruby on Rails, ma con supporto per API basate sui dati e architettura scalabile e orientata ai servizi. Utilizza un potente Object-Relational Mapping (ORM) chiamato Waterline che ne consente l'utilizzo con database come MySQL, PostgreSQL, MongoDB, Redis, ecc.

In questo tutorial imparerai come installare il framework Sails.js per creare un'app di test e distribuirla utilizzando il server Nginx insieme a Lets Encrypt SSL su un server Ubuntu 22.04.

Prerequisiti

  • A server running Ubuntu 22.04.

  • A non-root user with sudo privileges.

  • The Uncomplicated Firewall(UFW) is enabled and running.

  • A Fully Qualified domain name pointed to the server. For our tutorial, we will be using the domain sails.example.com.

  • Everything is updated.

    $ sudo apt update && sudo apt upgrade
    

Passaggio 1: configurare il firewall

Il primo passo prima di installare qualsiasi pacchetto è configurare il firewall per consentire le connessioni HTTP e HTTPS.

Controlla lo stato del firewall.

$ sudo ufw status

Dovresti vedere qualcosa di simile al seguente.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Consenti porte HTTP e HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Controlla di nuovo lo stato per confermare.

$ sudo ufw status
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: installare Node Version Manager (NVM)

Installeremo Node utilizzando l'applicazione Node Version Manager (nvm). Puoi utilizzare NVM per installare più versioni di Node e passare da una all'altra con facilità. Eseguire il seguente comando per scaricare e installare NVM.

Controlla l'ultima versione di NVM dalla pagina delle versioni di Github. Al momento della stesura di questo tutorial, v0.39.1 è l'ultima versione disponibile.

$ NVMVERSION=0.39.1
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/$NVMVERSION/install.sh | bash

Aggiorna il terminale.

$ source ~/.bashrc

Verificare che NVM sia installato.

$ command -v nvm

Dovresti vedere il seguente output in caso di installazione riuscita.

nvm

Passaggio 3: installa Node.js

Installeremo l'ultima versione della versione LTS (supporto a lungo termine) di Node.js. Esegui il seguente comando per farlo.

$ nvm install --lts

Verifica che Node.js sia installato.

$ node --version
v16.17.0

Passo 4 - Installa Sails.js

Ora che Node.js è installato, è il momento di installare il framework Sails.js. Eseguire il seguente comando per installarlo a livello globale.

$ npm -g install sails

Verificare che il framework Sails.js sia installato.

$ sails --version
1.5.3

Puoi controllare altri comandi disponibili con l'applicazione a riga di comando sails usando il flag --help.

$ sails --help

Riceverai il seguente output.

Usage: sails [command]

  Options:

    -v, --version  output the version number
    -h, --help     output usage information

  Commands:

    version
    lift|l [options]
    new [options] [path_to_new_app]
    generate
    upgrade
    migrate
    console|c [options]
    www
    debug                            (for Node v5 and below)
    inspect                          (for Node v6 and above)
    run
    test
    lint
    deploy
    debug-console|dc
    help [command]

Passaggio 5: creare un'applicazione demo

Eseguire il comando seguente per generare un'applicazione demo.

$ sails new howtoforge-app

Otterrai le seguenti due opzioni.

Choose a template for your new Sails app:
 1. Web App  ·  Extensible project with auth, login, & password recovery
 2. Empty    ·  An empty Sails app, yours to configure
 (type "?" for help, or <CTRL+C> to cancel)

Puoi digitare 1 per andare con un modello predefinito per un'applicazione completa con autenticazione, una pagina di accesso e una funzione di recupero della password. Se vuoi iniziare con una tabula rasa, vai con l'opzione 2.

Andremo con l'opzione 1. Dovrai attendere alcuni minuti per il completamento del processo.

? 1
 info: Installing dependencies...
Press CTRL+C to cancel.
(to skip this step in the future, use --fast)
 info: Created a new Sails app `howtoforge-app`!

Passare alla directory di lavoro dell'applicazione appena creata. Il nome della directory è lo stesso dell'applicazione.

$ cd howtoforge-app

Controlla l'elenco delle cartelle. La cartella conterrà tutti i file e i pacchetti essenziali installati per iniziare con l'applicazione.

$ ls
total 944
drwxrwxr-x   9 navjot navjot   4096 Aug 23 07:14 .
drwxr-x---   8 navjot navjot   4096 Aug 23 07:13 ..
drwxrwxr-x   8 navjot navjot   4096 Aug 23 07:13 api
-rw-rw-r--   1 navjot navjot   1841 Aug 23 07:13 app.js
drwxrwxr-x   8 navjot navjot   4096 Aug 23 07:13 assets
drwxrwxr-x   4 navjot navjot   4096 Aug 23 07:13 config
-rw-rw-r--   1 navjot navjot   1046 Aug 23 07:13 .editorconfig
-rw-rw-r--   1 navjot navjot     44 Aug 23 07:13 .eslintignore
-rw-rw-r--   1 navjot navjot   4228 Aug 23 07:13 .eslintrc
-rw-rw-r--   1 navjot navjot   3531 Aug 23 07:13 .gitignore
-rw-rw-r--   1 navjot navjot    669 Aug 23 07:13 Gruntfile.js
-rw-rw-r--   1 navjot navjot    709 Aug 23 07:13 .htmlhintrc
-rw-rw-r--   1 navjot navjot   2162 Aug 23 07:13 .lesshintrc
drwxrwxr-x 510 navjot navjot  20480 Aug 23 07:14 node_modules
-rw-rw-r--   1 navjot navjot    369 Aug 23 07:13 .npmrc
-rw-rw-r--   1 navjot navjot   6151 Aug 23 07:13 package.json
-rw-rw-r--   1 navjot navjot 854958 Aug 23 07:14 package-lock.json
-rw-rw-r--   1 navjot navjot   1732 Aug 23 07:13 README.md
-rw-rw-r--   1 navjot navjot    123 Aug 23 07:13 .sailsrc
drwxrwxr-x   2 navjot navjot   4096 Aug 23 07:13 scripts
drwxrwxr-x   4 navjot navjot   4096 Aug 23 07:13 tasks
drwxrwxr-x   5 navjot navjot   4096 Aug 23 07:13 views

Eseguire l'applicazione Sails. Il seguente comando avvierà l'applicazione in modalità di sviluppo. Sails.js utilizza lo strumento Grunt per monitorare la cartella /assets. Se modifichi qualcosa in quella cartella, si rifletterà automaticamente nel browser. Puoi anche modificare i tuoi file di visualizzazione senza riavviare Sails perché i modelli non sono memorizzati nella cache.

$ sails lift

Otterrai il seguente output al corretto avvio dell'applicazione.

 info: Starting app...

 info: Initializing project hook... (`api/hooks/custom/`)
 info: Initializing `apianalytics` hook...  (requests to monitored routes will be logged!)
 info: ·• Auto-migrating...  (alter)
 info:    Hold tight, this could take a moment.
 info:  ? Auto-migration complete.

debug: Running v0 bootstrap script...  (looks like this is the first time the bootstrap has run on this computer)
 info:
 info:                .-..-.
 info:
 info:    Sails              <|    .-..-.
 info:    v1.5.3              |\
 info:                       /|.\
 info:                      / || \
 info:                    ,'  |'  \
 info:                 .-'.-==|/_--'
 info:                 `--'-------'
 info:    __---___--___---___--___---___--___
 info:  ____---___--___---___--___---___--___-__
 info:
 info: Server lifted in `/home/navjot/howtoforge-app`
 info: To shut down Sails, press <CTRL> + C at any time.
 info: Read more at https://sailsjs.com/support.

debug: -------------------------------------------------------
debug: :: Tue Aug 23 2022 09:01:32 GMT+0000 (Coordinated Universal Time)

debug: Environment : development
debug: Port        : 1337
debug: -------------------------------------------------------

Sails.js espone la tua app alla porta 1337. Dovrai aprire la porta per accedere all'applicazione. Avvia un altro terminale sul tuo server ed esegui il seguente comando per aprire la porta.

$ sudo ufw allow 1337

Avvia l'URL http://:1337 nel tuo browser. Otterrai la pagina seguente.

Premi Ctrl + C sul terminale per chiudere l'applicazione Sails.

Passaggio 6: creare un file di servizio systemd

In questo momento, l'app Sails funziona solo se il terminale è attivo. Per mantenerlo persistente durante i riavvii, dobbiamo creare un file di servizio systemd per Sails.

Crea e apri il file howtoforge-app.service per la modifica.

$ sudo nano /etc/systemd/system/howtoforge-app.service

Incolla il seguente codice al suo interno.

[Unit]
After=network.target

[Service]
Type=simple
User=navjot
WorkingDirectory=/home/navjot/howtoforge-app
ExecStart=/home/navjot/.nvm/versions/node/v16.17.0/bin/node app.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

Sostituire i valori per le variabili User, WorkingDirectory e ExecStart con il nome utente del sistema, il percorso dell'applicazione e il percorso dell'applicazione del nodo. Per individuare il percorso di Node.js, puoi utilizzare il seguente comando.

$ which node
/home/navjot/.nvm/versions/node/v16.17.0/bin/node

Utilizziamo Node.js invece dell'applicazione Sails CLI perché è più semplice configurarla ed eseguirla tramite uno script di sistema. Salva il file premendo Ctrl + X e immettendo Y quando richiesto.

Ricarica il demone di sistema per applicare le modifiche.

$ sudo systemctl daemon-reload

Avvia il servizio Sails.js e abilitalo per l'avvio all'avvio del sistema.

$ sudo systemctl enable howtoforge-app --now

Controlla lo stato del servizio.

$ sudo systemctl status howtoforge-app
? howtoforge-app.service - Sails.js Howtoforge App
     Loaded: loaded (/etc/systemd/system/howtoforge-app.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-08-23 11:52:58 UTC; 5s ago
   Main PID: 15385 (node)
      Tasks: 22 (limit: 2237)
     Memory: 123.8M
        CPU: 3.894s
     CGroup: /system.slice/howtoforge-app.service
             ??15385 /home/navjot/.nvm/versions/node/v16.17.0/bin/node app.js
             ??15392 grunt "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">

Aug 23 11:53:01 sails node[15385]:  info:  ____---___--___---___--___---___--___-__
Aug 23 11:53:01 sails node[15385]:  info:
Aug 23 11:53:01 sails node[15385]:  info: Server lifted in `/home/navjot/howtoforge-app`
Aug 23 11:53:01 sails node[15385]:  info: To shut down Sails, press <CTRL> + C at any time.
Aug 23 11:53:01 sails node[15385]:  info: Read more at https://sailsjs.com/support.
Aug 23 11:53:01 sails node[15385]: debug: -------------------------------------------------------
Aug 23 11:53:01 sails node[15385]: debug: :: Tue Aug 23 2022 11:53:01 GMT+0000 (Coordinated Universal Time)
Aug 23 11:53:01 sails node[15385]: debug: Environment : development
Aug 23 11:53:01 sails node[15385]: debug: Port        : 1337
Aug 23 11:53:01 sails node[15385]: debug: -------------------------------------------------------

Puoi verificare il servizio aprendo l'URL http://:1337 nel tuo browser.

Passaggio 7: 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.0

Passaggio 8: 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.

$ 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 possa essere 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 --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d sails.example.com

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

Genera un certificato di gruppo Diffie-Hellman.

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

Apri il file /etc/letsencrypt/renewal/sails.example.com.conf per la modifica.

$ sudo nano /etc/letsencrypt/renewal/sails.example.com.conf

Incolla il seguente codice in fondo.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

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

Abbiamo generato il certificato SSL utilizzando l'opzione standalone di Certbot. Esegue il suo server Web per creare il certificato, il che significa che Nginx dovrebbe essere spento durante il rinnovo. I comandi pre_hook e post_hook vengono eseguiti prima e dopo il rinnovo per arrestare e riavviare automaticamente il server Nginx, quindi non richiedono alcun intervento manuale.

Per verificare se il rinnovo SSL funziona correttamente, eseguire un'esecuzione a secco del processo.

$ sudo certbot renew --dry-run

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

Passaggio 9: 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/sails.conf per la modifica.

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

Incolla il seguente codice al suo interno. Sostituisci sails.example.com con il tuo nome di dominio. Assicurati che il valore di client_max_body_size sia impostato su 10 MB. Cambialo in base alle tue esigenze.

upstream backend {
   server 127.0.0.1:1337;
   keepalive 32;
}

server {
  listen 80 default_server;
  server_name sails.example.com;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name sails.example.com;

   http2_push_preload on; # Enable HTTP/2 Server Push

   ssl_certificate /etc/letsencrypt/live/sails.example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/sails.example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/sails.example.com/chain.pem;
   ssl_session_timeout 1d;

   # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
   ssl_protocols TLSv1.2 TLSv1.3;

   # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
   # prevent replay attacks.
   #
   # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
   ssl_early_data on;

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

   add_header X-Early-Data $tls1_3_early_data;
   
   access_log /var/log/nginx/sails.access.log main;
   error_log  /var/log/nginx/sails.error.log;

   location / {
       client_max_body_size 10M;
       proxy_set_header Host $http_host;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffering off;
       proxy_http_version 1.1;
       proxy_pass http://backend;
   }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

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

Verifica la configurazione di Nginx.

$ sudo nginx -t

Riavvia il server Nginx.

$ sudo systemctl restart nginx

Passaggio 10: accedi all'app Sails.js

Avvia l'URL https://sails.example.com nel tuo browser e verrai accolto con la home page di Sails.

Fare clic sul pulsante Iscriviti in alto a destra per creare un nuovo account.

Inserisci i dettagli del tuo account e fai clic sul pulsante Crea account per terminare.

Verrai immediatamente portato alla schermata di benvenuto.

Ora puoi iniziare a utilizzare l'applicazione per creare un'applicazione dinamica con autenticazione utente, supporto database e un gateway di pagamento integrato basato su Stripe.

Conclusione

Questo completa il tutorial in cui hai imparato come installare il framework Sails.js e creato un'applicazione demo. Hai anche imparato come configurare un servizio systemd per esso e utilizzare il server proxy Nginx con Lets Encrypt per avviare un'applicazione Web sicura. Se hai domande, pubblicale nei commenti qui sotto.