Deploy delle tue applicazioni Fastify con PM2: La 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?
- 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. - env: Qui definiamo le variabili d'ambiente. L'app verrà eseguita su
PORT: 3000
in modalità sviluppo e suPORT: 8000
in produzione. - 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!