Plesk e Node.js
Plesk Obsidian supporta nativamente l'hosting di applicazioni Node.js tramite l'estensione Node.js (gratuita). Il pannello gestisce automaticamente il proxy Apache/Nginx verso il processo Node.js, l'avvio/arresto dell'app, l'installazione delle dipendenze npm e la gestione delle variabili d'ambiente.
L'estensione utilizza Phusion Passenger come application server: e' robusto, gestisce automaticamente il restart in caso di crash e supporta multiple versioni Node.js sullo stesso server.
Installare l'estensione Node.js
Plesk Obsidian include Node.js per default. Se manca:
- Tools & Settings → Updates and Upgrades → Add/Remove Components
- Selezionare "Node.js support"
- Cliccare Continue
Da SSH:
plesk installer --select-product-id panel --select-release-current --install-component nodejs
Versioni Node.js disponibili
Plesk gestisce più' versioni Node.js in parallelo. Le versioni LTS supportate sono tipicamente 16, 18, 20 e 22. Per vedere le versioni installate:
plesk bin nodejs --list
Per installare una nuova versione:
plesk installer --select-product-id panel --select-release-current --install-component nodejs-22
Configurare un'app Node.js
Su una sottoscrizione:
- Aprire Subscriptions → dominio.it → Node.js
- Cliccare Enable Node.js
- Configurare:
- Node.js version: scegli la versione (es. 20.x LTS)
- Document root: usato per file statici (es.
httpdocs/public) - Application mode: production / development
- Application root: directory del progetto (es.
/httpdocs) - Application startup file: il file principale (es.
app.js,server.js,index.js)
Installare le dipendenze
Plesk offre il bottone NPM install che esegue npm install nella application root usando il package.json del progetto.
Per dipendenze di produzione:
NPM install → aggiungere flag --production
O da SSH:
cd /var/www/vhosts/dominio.it/httpdocs npm install --production
Variabili d'ambiente
Nel pannello Node.js c'e' una sezione Custom environment variables per definire env vars accessibili da Node.js. Esempio per Express:
NODE_ENV=productionDB_HOST=localhostDB_USER=miouserDB_PASS=segreto
Le variabili sono accessibili tramite process.env.NODE_ENV.
Restart dell'app
Dopo modifiche al codice o alle dipendenze:
- Pannello: cliccare Restart App
- SSH: creare/aggiornare il file
tmp/restart.txtnella application root
touch /var/www/vhosts/dominio.it/tmp/restart.txt
Configurazione proxy
Plesk configura automaticamente Apache/Nginx come reverse proxy verso Passenger. Il proxy gestisce richieste HTTP/HTTPS, file statici, websockets.
Per modifiche custom andare in Apache & nginx Settings e aggiungere direttive aggiuntive (es. headers di sicurezza, rewrite rules).
Log e debugging
I log dell'app Node.js si trovano in:
/var/www/vhosts/dominio.it/logs/error_log
In application mode development Passenger mostra stack trace dettagliati. In production mostra errori generici (consigliato per sicurezza).
WebSocket support
Plesk supporta nativamente le WebSocket. Funzionano automaticamente se l'app espone WebSocket sulla stessa porta HTTP (es. Socket.io, ws). Non serve configurazione aggiuntiva.
Framework supportati
Tutti i framework Node.js funzionano: Express, Fastify, Koa, NestJS, Hapi, Next.js, Nuxt.js, SvelteKit. Per app Next.js con SSR, impostare lo startup file su server.js (custom server) o usare la build standalone.
Logs e debugging avanzato
Per debugging Node.js, attivare il logging dettagliato Passenger nel pannello: Settings → Log Level: 3 (info). I log dettagliati appaiono in /var/log/passenger.log.
Per app che usano logging strutturato (Winston, Bunyan, Pino), redirigere stdout/stderr al file system applicativo:
const logger = require('winston').createLogger({
transports: [new winston.transports.File({ filename: 'app.log' })]
});Gestione memoria
Passenger imposta un limite di memoria per processo. Per app pesanti aumentare:
PassengerMemoryLimit 512
In Apache & nginx Settings → Additional Apache directives.
Multiple process
Per app che possono beneficiare di multi-processing:
PassengerMinInstances 2 PassengerMaxPoolSize 8
Bilancia tra performance e consumo memoria.
Database connections
Per app che si connettono a MySQL/PostgreSQL/MongoDB, usare connection pooling (mysql2.createPool, pg.Pool) per evitare di esaurire le connessioni. Plesk MySQL ha limite default 151 connessioni.
Static files via Nginx
Anche con Apache Passenger, e' possibile far servire i file statici da Nginx (frontend) e proxy verso Node.js solo per le route dinamiche. Migliora drasticamente le performance per app con molti asset.
Restart in seguito a git deploy
Configurare un'hook post-deploy che fa touch del restart.txt:
touch tmp/restart.txt
Così' ogni git push triggera automaticamente il restart dell'app.
Monitoring con PM2
Per app critiche e' possibile sostituire Passenger con PM2 (process manager) e usare Plesk solo come reverse proxy. PM2 offre cluster mode, restart automatico, monitoring dashboard.
Stratificazione architetturale
Per app Node.js in produzione consigliamo una struttura tipica:
- Frontend statico (SPA build) servito direttamente da Nginx
- API backend Node.js dietro proxy
- WebSocket su path dedicato (es. /ws)
- Static assets su CDN per scaling
Cluster mode
Node.js e' single-threaded ma il modulo cluster permette di lanciare multiple istanze su core diversi. Passenger gestisce automaticamente il cluster: configurare PassengerMaxPoolSize = numero di CPU.
Health checks
Esporre un'endpoint /health che verifica DB, cache, queue e restituisce 200 se tutto OK. Sistemi di monitoring esterni (UptimeRobot, Better Uptime) possono triggerare alert se il check fallisce.
Environment per stage
Mantenere environment separati: NODE_ENV=production per produzione, NODE_ENV=development per staging. Plesk lo configura nel pannello Node.js.
Aggiornamento Node.js
Per aggiornare la versione Node.js di un'app:
- Verificare compatibilità' nel package.json (campo engines)
- Cambiare la versione dal pannello Plesk
- Eseguire npm install per ricompilare moduli nativi
- Restart app
- Verificare comportamento
Memory leak troubleshooting
Le app Node.js possono accumulare memory leak. Per identificarli usare node --inspect e Chrome DevTools per heap snapshot, oppure heapdump + analyzer offline.
Hai bisogno di aiuto?
Se vuoi gestione Plesk dal team di G Tech Group, scrivici tramite il modulo di contatto.