Deploy delle tue applicazioni Fastify con PM2: La combo perfetta:

Scopri come combinare Fastify e PM2 per gestire in modo efficiente le tue applicazioni Node.js in produzione. In questa guida imparerai a configurare un'app Fastify, utilizzare il file ecosystem.config.js per la gestione avanzata con PM2, e automatizzare il processo di deploy. Ottimizza le performance e semplifica la gestione del ciclo di vita delle tue applicazioni con questa combo perfetta!

Quando sviluppi un’applicazione utilizzando Fastify, uno dei passaggi cruciali è assicurarne una gestione solida ed efficiente in produzione. PM2 è il tool ideale per gestire in maniera semplice ed efficace le applicazioni Node.js, rendendo il deploy e la gestione dei processi un gioco da ragazzi.

In questo articolo vedremo come utilizzare Fastify insieme a PM2, configurare il file ecosystem.config.js e gestire il deploy in produzione senza intoppi.

Perché scegliere Fastify e PM2?

Fastify è un framework web progettato per essere veloce e flessibile, perfetto per la creazione di API e microservizi. Le sue performance elevate e la sua semplicità d'uso lo rendono una delle scelte più apprezzate dagli sviluppatori.

Dall'altra parte, PM2 è un potente process manager per applicazioni Node.js che semplifica notevolmente il deploy, la gestione e il monitoraggio dei processi in produzione. PM2 permette di:

  • Gestire processi multipli con facilità.
  • Ridurre i tempi di inattività grazie al clustering e al reload senza downtime.
  • Monitorare l’uso delle risorse, come CPU e memoria.
  • Automatizzare il deploy con configurazioni avanzate.

Combinare Fastify e PM2 ti permette di ottenere una gestione scalabile e affidabile della tua applicazione, massimizzando le performance e minimizzando i problemi di gestione.

Passo 1: Creare una semplice applicazione Fastify

Se non hai ancora un’applicazione Fastify pronta, partiamo dal creare una semplice API. Prima di tutto, apri il terminale e crea una nuova cartella per il progetto:

mkdir fastify-app
cd fastify-app
npm init -y

Installa Fastify come dipendenza:

npm install fastify

Ora crea un file index.js con una semplice route per testare l’applicazione:

// index.js
const fastify = require('fastify')({ logger: true })

fastify.get('/', async (request, reply) => {
  return { hello: 'world' }
})

const start = async () => {
  try {
    await fastify.listen({ port: 3000 })
    console.log('Server running at http://localhost:3000')
  } catch (err) {
    fastify.log.error(err)
    process.exit(1)
  }
}

start()

Esegui l’app con:

node index.js

Se tutto funziona correttamente, l’applicazione risponderà alla richiesta GET / con { hello: 'world' }.

Passo 2: Installare e configurare PM2

Per gestire questa applicazione in produzione, installeremo PM2 globalmente:

npm install -g pm2

Con PM2 installato, possiamo avviare l'applicazione semplicemente eseguendo:

pm2 start index.js

Ma per ottenere il massimo da PM2, configurare un file di gestione come ecosystem.config.js è il passaggio successivo.

Passo 3: Configurare PM2 con ecosystem.config.js

Il file ecosystem.config.js è il cuore della gestione avanzata di PM2. In questo file definiamo tutti i parametri necessari per eseguire, gestire e fare il deploy della nostra applicazione.

Nella root del progetto, crea un file ecosystem.config.js con il seguente contenuto:

module.exports = {
  apps: [
    {
      name: 'fastify-app',        // Nome dell'applicazione
      script: './index.js',       // Punto di ingresso dell'applicazione
      instances: 'max',           // Utilizza tutte le CPU disponibili
      exec_mode: 'cluster',       // Esecuzione in modalità cluster
      autorestart: true,          // Riavvio automatico in caso di crash
      watch: false,               // Disabilita il watch in produzione
      max_memory_restart: '200M', // Riavvia se l'uso della memoria supera 200MB
      env: {
        NODE_ENV: 'development',
        PORT: 3000
      },
      env_production: {
        NODE_ENV: 'production',
        PORT: 8000                // Porta da usare in produzione
      }
    }
  ],
  deploy: {
    production: {
      user: 'node',                // Utente per SSH
      host: 'your-server.com',     // Indirizzo del server
      ref: 'origin/main',          // Branch Git di riferimento
      repo: 'git@github.com:tuo-repo/fastify-app.git', // Repository Git
      path: '/var/www/fastify-app', // Directory del deploy
      'pre-deploy': 'git fetch --all',    // Comando pre-deploy
      'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production' // Post-deploy
    }
  }
}

Cosa significa questa configurazione?

  1. apps: In questa sezione definiamo la configurazione dell’applicazione. Abbiamo impostato il nome dell’app come fastify-app e il punto di ingresso è index.js. Utilizzando il numero massimo di CPU disponibili (instances: 'max') e la modalità cluster (exec_mode: 'cluster'), assicuriamo che l'app sfrutti tutte le risorse del server.
  2. env: Qui definiamo le variabili d'ambiente. L'app verrà eseguita su PORT: 3000 in modalità sviluppo e su PORT: 8000 in produzione.
  3. deploy: Questa sezione automatizza il processo di deploy. PM2 si occuperà di connettersi al server remoto via SSH, eseguire il pull del repository, installare le dipendenze e riavviare l’applicazione in modalità cluster senza downtime.

Passo 4: Automatizzare il deploy con PM2

Una volta configurato il file ecosystem.config.js, il deploy dell’applicazione diventa semplice. Per inizializzare il processo di deploy sul server remoto, usa:

pm2 deploy production setup

Dopo aver impostato l'ambiente di deploy, puoi fare il deploy delle modifiche eseguendo:

pm2 deploy production

In questo modo, PM2 si occuperà di tutto il processo: scaricare il codice aggiornato dal repository, installare le dipendenze e riavviare l’app.

Monitorare e gestire le applicazioni con PM2

Uno dei principali vantaggi di PM2 è la capacità di monitorare in tempo reale le tue applicazioni. Per visualizzare lo stato di tutti i processi gestiti, usa:

pm2 list

Se vuoi monitorare i log in tempo reale, puoi usare:

pm2 logs

Per ottenere una panoramica dettagliata del comportamento delle tue applicazioni, usa il comando:

pm2 monit

Conclusioni

L’accoppiata Fastify e PM2 è una soluzione solida per gestire applicazioni Node.js in produzione. Fastify offre velocità e flessibilità, mentre PM2 ti permette di gestire il ciclo di vita dell’applicazione, automatizzare il deploy e monitorare le risorse in modo semplice e intuitivo.

Configurando correttamente il file ecosystem.config.js, puoi scalare la tua applicazione, ottimizzare l’uso delle risorse del server e rendere il processo di deploy molto più fluido.

Non ti resta che provare questo setup e goderti una gestione senza pensieri della tua app Fastify!