Plesk Node.js: hosting applicazioni JavaScript

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:

  1. Tools & Settings → Updates and Upgrades → Add/Remove Components
  2. Selezionare "Node.js support"
  3. 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:

  1. Aprire Subscriptions → dominio.it → Node.js
  2. Cliccare Enable Node.js
  3. 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=production
  • DB_HOST=localhost
  • DB_USER=miouser
  • DB_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.txt nella 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:

  1. Verificare compatibilità' nel package.json (campo engines)
  2. Cambiare la versione dal pannello Plesk
  3. Eseguire npm install per ricompilare moduli nativi
  4. Restart app
  5. 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.

Hai trovato utile quest'articolo?