Vai al contenuto
Guide

Hosting Node.js: come pubblicare un'app con il tuo dominio e SSL

Aggiornata il

Hai un’app in Node.js (fatta con Express, per esempio) e vuoi vederla su https://tuo-dominio.com, con il lucchetto e senza doverti configurare un server da solo. Questa guida ti accompagna dalla cartella al dominio, seguendo come funziona NodeApp sul nostro server: la tua app vive in una cartella, PM2 la tiene in esecuzione, nginx collega il tuo dominio all’app e l’SSL di Let’s Encrypt è gratuito. Se prima vuoi vedere cosa include il servizio, lo trovi riassunto nella pagina hosting Node.js.

Cosa ti serve prima di iniziare

Tre cose: un piano che includa le app Node.js, un dominio e il tuo codice.

Caratteristica Cloud Startup
App Node.js Incluse
Accesso SSH Sì (shell isolata)
Siti Illimitati
Disco 100 GB SSD
Memoria e core 4 GB di RAM e 4 core
Database 300 (MySQL/MariaDB)
Prezzo di lancio 9,99 US$ al mese il primo anno, con pagamento annuale
Rinnovo 311,88 US$ all’anno (25,99 US$ al mese)
Pagamento mensile 27,99 US$
  • Piano. Una shell isolata è un terminale limitato al tuo account: esegui comandi, ma non tocchi il resto del server. Il pagamento avviene con carta di credito o di debito tramite Stripe, in US$. Se usi una carta boliviana, conferma con la tua banca che sia abilitata agli acquisti all’estero.
  • Dominio. Se ne hai già uno, puntalo a ns1.quimeracloud.com e ns2.quimeracloud.com dal tuo registrar; i passaggi sono nella guida come collegare un dominio .com o .bo al tuo hosting. Se te ne serve uno nuovo, viene registrato automaticamente quando il pagamento è confermato: .com e .net costano 20 US$ il primo anno e 25 US$ all’anno di rinnovo, e .org costa 16 US$ il primo anno e 20 US$ all’anno di rinnovo (altro nella pagina domini). Non vendiamo domini .bo.
  • Il tuo codice. Un progetto con il suo package.json.

Come funziona NodeApp, in quattro pezzi

NodeApp è il plugin HCPP-NodeApp (v2.0.3 sul nostro server) di HestiaCP, il pannello di controllo che usiamo. Secondo il suo README, permette di ospitare applicazioni Node.js gestite con PM2.

Pezzo Cosa fa per te
Cartella nodeapp La tua app vive in web/<dominio>/nodeapp.
PM2 È un gestore di processi: un programma che avvia la tua app e aiuta a tenerla online, secondo la sua documentazione. Se la tua app va in crash, la riavvia.
Porta automatica Il sistema assegna la porta e la passa alla tua app all’avvio.
nginx Riceve le visite al tuo dominio e le passa alla tua app, con supporto WebSocket.

Passo dopo passo

1. Attiva NodeApp sul tuo dominio

  1. Entra nel pannello (disponibile in spagnolo, portoghese, francese, italiano, tedesco e inglese).
  2. Nella scheda Web, modifica il tuo dominio e apri le opzioni avanzate (Advanced Options).
  3. Scegli NodeApp nell’elenco dei modelli proxy (Proxy Template), come indica la documentazione del plugin, e salva.

Il plugin richiede anche che il tuo utente abbia accesso SSH; su QuimeraCloud lo include il piano Cloud Startup. Se non vedi NodeApp tra i modelli o il tuo utente non ha ancora l’SSH, scrivici su WhatsApp.

2. Guarda l’esempio che trovi già pronto

Nella cartella web/<dominio>/nodeapp trovi un esempio con Express: app.js e app.config.js. Aprili prima di scrivere qualsiasi cosa, perché ti mostrano come un’app riceve la porta su questo server.

L’app.js di esempio non legge una variabile d’ambiente: riceve la porta come argomento -p. Questa è una versione abbreviata del file del plugin:

const express = require('express');
const app = express();

// Il plugin avvia l'app con: -p <porta>
const argv = require('minimist')(process.argv.slice(2));
const port = argv.p || 0;
if (port == 0) {
  console.log('Port number is not specified');
  process.exit(1);
}

app.get('*', (req, res) => res.send('Hello World!'));
app.listen(port, () => console.log(`In ascolto sulla porta ${port}`));

L’esempio usa express e minimist come dipendenze. E app.config.js è il file che PM2 legge per avviare l’app:

module.exports = {
  apps: (function () {
    let nodeapp = require('/usr/local/hestia/plugins/nodeapp/nodeapp.js')(__filename);
    return [nodeapp];
  })()
}

Non serve modificarlo. Secondo il suo stesso commento, quel modulo del plugin gestisce in automatico .nvmrc e l’assegnazione della porta. La tua cartella contiene la sua copia di questi file: usala come riferimento se noti qualche differenza con quanto sopra.

3. Scegli la versione di Node con .nvmrc

Crea (o modifica) un file chiamato .nvmrc dentro la cartella nodeapp. Contiene solo la versione:

v22

Sul nostro server sono installate quattro versioni con NVM (il gestore di versioni di Node): 16, 18, 20 e 22. Il README del plugin spiega che la configurazione di PM2 seleziona la versione a partire da questo file. Il README del repository descrive la versione più recente del plugin e può citare altre versioni di Node; per il tuo account vale l’elenco di questo paragrafo.

4. Carica la tua app

  1. Copia il tuo codice nella cartella nodeapp via SSH.
  2. Rinomina app.js e app.config.js con il nome della tua app, per esempio negozio.js e negozio.config.js. Il README indica di sostituire “app” con il nome della tua applicazione.
  3. Apri il tuo package.json e cambia il campo main con il nuovo nome ("main": "negozio.js").
  4. Fai in modo che il tuo codice legga la porta come nell’esempio (-p) e resti in ascolto su quella porta. Se ascolta su un’altra, nginx non la troverà.
  5. Installa i tuoi pacchetti con npm install dentro la cartella. Se la tua shell non trova npm, scrivici su WhatsApp.

5. Avvia e riavvia

Il pannello ha, nella scheda Web, un elenco dei processi NodeApp con le azioni avvia, ferma, riavvia e visualizza i log. Ci sono altri due modi, entrambi via SSH e dalla cartella nodeapp:

touch .restart/restart      # chiede un riavvio dell'app
pm2 start app.config.js     # avvia con PM2 (usa il nome del tuo file)

Ogni volta che modifichi il codice, riavvia l’app perché applichi le modifiche.

6. Leggi i log

Se qualcosa non funziona, parti dai log del processo: nel pannello, dall’elenco dei processi NodeApp, oppure via SSH con pm2 logs, che secondo la documentazione di PM2 mostra i log in tempo reale.

7. Attiva l’SSL e controlla il dominio

L’SSL di Let’s Encrypt è gratuito, si rinnova da solo ed è incluso in tutti i piani. Per emetterlo, Let’s Encrypt verifica che tu controlli il dominio richiedendogli un file via HTTP, sulla porta 80 (lo spiega la sua documentazione). Per questo il dominio deve già arrivare al nostro server: se l’hai collegato con i nameserver, la modifica può richiedere un po’ di tempo per propagarsi.

  1. Apri http://tuo-dominio.com e controlla che mostri già la tua app.
  2. Nel pannello, apri le opzioni del tuo dominio e spunta le caselle di SSL e di Let’s Encrypt (in inglese, Enable SSL for this domain e Use Let’s Encrypt to obtain SSL certificate). Se risultano già spuntate, non cambiare nulla. Salva. Così lo descrive la documentazione di HestiaCP.
  3. Apri https://tuo-dominio.com e controlla il lucchetto.

Limiti da conoscere

  • Un solo server, a Seattle (USA). I tuoi visitatori dalla Bolivia e dall’America Latina si collegano a quel server. Non ci sono repliche in altre regioni.
  • Niente root. La shell isolata non permette di installare software di sistema. Se la tua app lo richiede, ti conviene di più un VPS: li confrontiamo in hosting condiviso, cloud o VPS.
  • Solo MySQL/MariaDB come database inclusi.
  • Indirizzo IPv4 condiviso. Tutti gli account usano l’IPv4 del server.
  • Backup giornaliero sullo stesso server. Viene conservato il più recente.
  • Monitoraggio ogni minuto, anche se non pubblichiamo una cifra di disponibilità.

Problemi frequenti

Cosa vedi Causa probabile Cosa fare
Il log dice “Port number is not specified” L’esempio del plugin stampa questo messaggio quando parte senza l’argomento -p Avviala dal pannello o con pm2 start app.config.js, non con node app.js a mano
Hai cambiato il codice e non si nota L’app sta ancora eseguendo la versione precedente Riavviala
Non parte dopo aver rinominato i file Il nome del .config.js o il main del package.json non coincidono con il tuo file Controlla che i tre nomi coincidano
Il dominio non carica I nameserver non si sono ancora propagati Controlla che puntino a ns1.quimeracloud.com e ns2.quimeracloud.com (come verificarlo con nslookup, nella guida ai domini)

Se qualcosa non coincide con ciò che vedi nel tuo pannello, scrivici su WhatsApp al +591 773 14890: ti risponde una persona del team Quimera. E se stai ancora scegliendo, confronta i piani.

Domande frequenti

Posso usare Node.js se oggi ho il piano Premium o Unlimited?

Le app Node.js e l'accesso SSH sono inclusi nel piano Cloud Startup. Per cambiare piano, ci scrivi su WhatsApp e lo facciamo noi, senza spostare il tuo sito: i tuoi file, database ed email restano dove sono, senza che tu debba spostare nulla.

Quale database posso usare con la mia app?

I piani includono database MySQL/MariaDB (300 su Cloud Startup). Altri motori di database non sono inclusi. Se la tua app dipende da uno diverso, conviene un VPS, dove installi ciò che ti serve.

C'è un backup della mia app?

Sì, c'è un backup giornaliero automatico. Viene conservato il più recente, sullo stesso server, e lo ripristini o lo scarichi dal pannello. Come protezione in più, scarica ogni tanto una copia e tieni il tuo codice in un repository tuo.

Quali versioni di Node.js posso usare?

Sul server sono installate quattro versioni con NVM: 16, 18, 20 e 22. Ne scegli una con un file .nvmrc dentro la cartella nodeapp del tuo dominio, per esempio con la riga v22.

Fonti

← Tutte le guide

Pubblica il tuo sito questa settimana

Scegli il tuo piano, collega il tuo dominio e inizia. Se hai dubbi prima di acquistare, scrivici.