Applicazioni Node.js
Node.js, sviluppato e gestito accanto al tuo PHP.
Sviluppiamo in Node API, siti renderizzati lato server, servizi in tempo reale e worker, e li facciamo girare sugli stessi server dei tuoi siti PHP, dietro un unico Nginx.
Cosa sviluppiamo in Node
Cinque tipi di lavoro, ognuno qui perché Node gli si addice.
-
01
Express
API e back-end piccoli e diretti: poche route, middleware chiari, niente di nascosto.
API e back-end -
02
NestJS
Servizi più grandi con moduli, dependency injection e contratti tipizzati in TypeScript, per codice che un team farà crescere per anni.
Servizi strutturati -
03
Next.js · Nuxt
Rendering lato server per React e Vue: le pagine arrivano pronte per i motori di ricerca e per una prima visualizzazione rapida, poi si comportano come un'app.
Siti renderizzati lato server -
04
Socket.IO · WebSockets
Chat, notifiche, dashboard dal vivo e tracciamento che si aggiornano nell'istante in cui qualcosa cambia, su un'unica connessione aperta.
Tempo reale -
05
Worker e code
Job in background, attività pianificate e consumer di code su Redis che tengono il lavoro lento fuori dalla richiesta.
Lavoro in background
Perché Node sa aspettare così bene
Un processo Node esegue il tuo JavaScript su un solo thread e affida l'attesa - disco, rete, database - al sistema. È così che un solo processo tiene aperte molte connessioni contemporaneamente.
- Il tuo codice gira sulla call stack, una funzione alla volta.
- Il lavoro lento lascia il thread: file, DNS e hashing vanno al pool di libuv, mentre i socket li sorveglia il sistema operativo.
- Quando il lavoro è finito, la sua callback attende nella coda dei task.
- Prima del task successivo vengono eseguite tutte le callback delle promise nella coda dei microtask.
- Il loop attraversa le sue fasi e prende il task successivo.
PHP e Node su un solo server
Nginx risponde a ogni richiesta e manda ogni percorso al processo che lo gestisce. Il tuo sito PHP e il tuo servizio Node condividono la macchina, il database e il certificato - non la memoria l'uno dell'altro.
Quale per quale lavoro
Sviluppiamo con entrambi, quindi la risposta viene dal lavoro, non da un'abitudine.
Scegli PHP quando
- Il sito è fatto soprattutto di pagine, moduli e un pannello di amministrazione: negozi, siti di contenuti, gestionali.
- Vuoi WordPress, WooCommerce o Laravel e tutto ciò che esiste già per loro.
- Ogni richiesta è indipendente e finisce in fretta.
- Le persone che lo manterranno conoscono già PHP.
Scegli Node quando
- Le connessioni restano aperte: chat, dashboard dal vivo, notifiche, tracciamento.
- Le pagine React o Vue vengono renderizzate sul server con Next.js o Nuxt.
- Il servizio passa gran parte del tempo ad attendere altre API e a far scorrere flussi di dati.
- Un solo linguaggio nel browser e sul server aiuta il tuo team.
Spesso la risposta è: entrambi
PHP tiene il sito, il negozio e il pannello; un piccolo servizio Node accanto si occupa della parte in tempo reale. Entrambi leggono lo stesso database e stanno dietro lo stesso Nginx.
Rilasci senza buchi
Una nuova versione parte accanto alla vecchia, dimostra di essere in salute e solo allora prende il traffico. I vecchi worker completano le richieste che hanno già prima di fermarsi.
- Visitatori serviti
- Versione attuale
- Nuova versione
-
01
Scarica e installa
git pull && npm ciLe versioni esatte del lockfile, niente di più recente a sorpresa.
-
02
Compila
npm run buildTypeScript e asset vengono compilati prima che qualcosa si riavvii.
-
03
Avvia accanto alla vecchia
pm2 reload appLa nuova versione si avvia accanto a quella che sta ancora servendo.
-
04
Attendi che sia pronta
wait_ready: trueDeve superare il suo health check prima di ricevere un visitatore.
-
05
Prendi il traffico
cluster → new workersLe nuove connessioni vanno alla nuova versione.
-
06
Svuota la vecchia
SIGINT → server.close()I vecchi worker completano le richieste in corso, poi si chiudono.
Il server attorno al codice
Ciò che tiene in piedi un servizio Node è scritto sul server, in file che manteniamo noi e che puoi leggere anche tu.
-
/etc/nginx/sites-enabled/app.confReverse proxy
TLS, compressione, file statici in cache e upgrade a WebSocket, davanti a ogni processo.
-
/srv/app/ecosystem.config.jsGestore dei processi
PM2 tiene vivo il processo, lo riavvia se va in crash e usa ogni core in modalità cluster. Dove basta un solo processo, una unit systemd fa lo stesso lavoro.
-
/srv/app/.env (0600)Ambiente e segreti
Chiavi e password stanno fuori dal codice e fuori da git, leggibili solo dall'utente proprio dell'applicazione.
-
/srv/app/package-lock.jsonAudit delle dipendenze
npm audit a ogni rilascio; gli aggiornamenti vengono letti e testati prima di arrivare in produzione.
-
/srv/app/.nvmrcAggiornamenti tra versioni LTS di Node
L'app gira su una versione a supporto a lungo termine, e la portiamo alla successiva prima che la vecchia esca dal supporto.
-
/var/log/app/Log e monitoraggio
Log strutturati e ruotati, con un avviso quando il processo si riavvia, la memoria sale o gli errori aumentano.

Raccontaci cosa deve fare la tua app Node
Un nuovo servizio, un sito Next.js o un'app che gira già da qualche parte e ha bisogno di una casa come si deve. La esaminiamo e ti facciamo un preventivo dopo una breve conversazione.