È uscito il Corso Java Completo
Torna al blog

Cos'è Railway e come funziona

Cos'è Railway e come funziona: deploy da Git di backend, worker e database, il modello di prezzo a consumo di risorse e quando conviene rispetto a un VPS.

Edoardo Midali

Edoardo Midali

Developer · Content Creator

10 min di lettura

Il frontend l'hai messo online in cinque minuti e funziona. Poi ti serve il pezzo dietro: un backend che resti acceso, un database vero, magari una coda che smaltisce i lavori lenti. E lì scopri che la piattaforma comodissima che hai usato per il sito non è fatta per quel mestiere. In questo articolo trovi cos'è Railway, come funziona il deploy, cosa significa davvero pagare a consumo di risorse e in quali casi ti conviene invece prenderti un server e gestirlo da solo.

Cos'è

Railway è una piattaforma che prende il tuo repository e ci fa girare sopra qualsiasi cosa — un backend sempre attivo, un worker, un processo pianificato, un database gestito — senza che tu configuri un server.

La parola importante è qualsiasi cosa. Non è una piattaforma per siti, ma per processi. Se il tuo codice è un programma che parte, resta acceso e ascolta, Railway lo fa girare. Che sia Node, Python, Go, Ruby, Rust o un'immagine Docker, il modello non cambia.

Il problema che risolve

Vale la pena essere precisi su questo, perché è il motivo per cui esistono piattaforme come questa.

Le piattaforme pensate per il frontend — Vercel, Netlify, Cloudflare Pages — sono eccellenti in quello che fanno: prendono un sito o un'applicazione, la costruiscono e la distribuiscono ovunque nel mondo. Il codice lato server lo eseguono con le funzioni serverless: partono su richiesta, rispondono, si spengono.

Quel modello ha tre conseguenze pratiche che scopri tutte insieme, di solito nel momento sbagliato:

  • Niente processi sempre attivi. Una funzione vive il tempo di una richiesta. Un consumatore di code, un bot connesso a una chat, un server WebSocket: non hanno un posto dove stare.
  • Niente lavori lunghi. C'è un tetto alla durata di un'esecuzione. Generare un report pesante, elaborare un video, importare un file da centomila righe: la funzione viene interrotta a metà.
  • Niente stato. Nessun file scritto su disco sopravvive, nessuna variabile in memoria si ritrova alla chiamata successiva.

E in più c'è il database, che su quelle piattaforme sta sempre da un'altra parte: un fornitore diverso, un altro pannello, un'altra fattura.

Railway riempie esattamente quel buco: processi che restano accesi, lavori che durano quanto devono, disco che persiste e database sulla stessa infrastruttura, con la stessa comodità di deploy da Git a cui ti sei abituato con il frontend.

Come funziona il deploy

Il flusso è quello che ormai dai per scontato, ed è il punto di forza del prodotto.

  1. Colleghi un repository GitHub.
  2. Railway analizza il codice e capisce da solo com'è fatto: che linguaggio è, come si installano le dipendenze, con quale comando si avvia.
  3. Costruisce un container e lo avvia.
  4. A ogni push sul ramo collegato ripete il giro, sostituendo la versione precedente.

Il passaggio 2 sorprende chi arriva da un server gestito a mano: non scrivi un Dockerfile, non installi un runtime, non configuri un gestore di processi come systemd.

Quando invece ti serve controllo, metti un Dockerfile nel repository e viene usato quello.

Esiste anche una CLI, comoda per i log e le variabili:

npm i -g @railway/cli
railway login
railway link                  # collega la cartella a un progetto esistente
railway up                    # deploy della cartella corrente
railway logs                  # log in tempo reale del servizio
railway variables             # elenca le variabili d'ambiente
railway run npm run migrate   # esegue in locale con le variabili del progetto remoto

L'ultimo comando merita attenzione: ti fa lanciare uno script sulla tua macchina ma con le variabili d'ambiente del progetto in remoto. È il modo pulito per far girare una migrazione senza copiare le credenziali in un file locale.

Il flusso normale però resta Git. Se stai facendo deploy a mano ogni giorno, ti stai perdendo il pezzo migliore — sul principio generale c'è cos'è la CI/CD.

Servizi, non siti

L'unità di ragionamento su Railway si chiama progetto, e dentro ci sono più servizi. Un servizio è un processo che gira. Un progetto tipico ne contiene tre o quattro:

  • L'API HTTP, quella che risponde alle richieste.
  • Un worker che consuma una coda e fa il lavoro lento fuori dal ciclo della richiesta.
  • Un processo pianificato che gira a orari fissi — pulizie, invii, riconciliazioni.
  • Il database.

Tutti i servizi di un progetto si parlano su una rete privata interna: il traffico interno non attraversa la rete pubblica, e il database non ha bisogno di essere esposto verso l'esterno per essere raggiunto dalla tua API.

I database in un clic

Questa è la funzione per cui molti arrivano qui.

Aggiungi un database da un menu e in pochi secondi hai un'istanza gestita di PostgreSQL, MySQL, MongoDB o Redis, con backup automatici. Non installi niente, non configuri utenti, non apri porte.

La parte davvero comoda sono le variabili collegate. Railway espone le credenziali del database come variabili d'ambiente e le rende disponibili agli altri servizi del progetto per riferimento:

DATABASE_URL=${{Postgres.DATABASE_URL}}
REDIS_URL=${{Redis.REDIS_URL}}

Niente stringhe di connessione copiate a mano, e se il database viene ricreato le variabili si aggiornano da sole. Sul perché questi valori non vadano mai scritti nel codice, vedi cosa sono le variabili d'ambiente.

Un avvertimento onesto: un database gestito così è comodissimo per sviluppo, prototipi e progetti piccoli o medi. Se il database è il cuore di un prodotto serio, valuta anche fornitori specializzati — il confronto è in quale database scegliere.

Il modello di prezzo, spiegato

Qui serve chiarezza, perché è il punto che confonde di più e quello che genera le brutte sorprese.

Railway non ti vende un piano con una taglia. Ti misura quanto consumi e te lo fattura. Le grandezze misurate sono essenzialmente tre: la memoria RAM occupata dai processi, il tempo di CPU che usano, e lo spazio su disco. In più c'è un canone di accesso alla piattaforma.

Cosa significa in pratica, ed è controintuitivo:

Un servizio inattivo non costa quasi nulla in CPU, ma la memoria la occupa comunque. Un processo Node acceso senza ricevere richieste consuma pochissima CPU, ma i suoi duecento megabyte di RAM sono impegnati ventiquattro ore su ventiquattro, e quelli si pagano. È il contrario del modello serverless, dove a zero richieste paghi zero.

Non c'è un tetto naturale. Con un server a canone fisso, se il carico raddoppia la macchina rallenta e la spesa resta quella. Qui il consumo sale e la fattura lo segue. Un ciclo infinito in un worker, una perdita di memoria, un job che si riavvia in continuazione: si traducono in soldi, in silenzio.

Le tre cose da fare il primo giorno:

  • Imposta un limite di spesa. È la cosa più utile del pannello.
  • Metti un tetto di risorse per servizio, così un processo impazzito non si porta dietro tutto.
  • Spegni gli ambienti che non usi.

Railway o un VPS?

La domanda giusta, e la risposta onesta è che a parità di risorse un VPS costa meno. Spesso parecchio meno. Chi ti dice il contrario ti sta vendendo qualcosa.

Il punto è che non stai comprando solo CPU e RAM: stai comprando il tempo che non passi a fare il sistemista.

RailwayVPS gestito a mano
Costo a parità di risorsePiù altoPiù basso
Tempo per il primo deployMinutiQualche ora la prima volta
Manutenzione del sistemaNessunaAggiornamenti, sicurezza, monitoraggio
HTTPS e certificatiAutomaticiDa configurare (reverse proxy)
DatabaseAggiunto da un menuDa installare, mettere in sicurezza e salvare
BackupInclusiDa organizzare
ScalareUn cursoreMigrazione o bilanciamento a mano
ControlloQuello che la piattaforma esponeTotale

Railway conviene quando il tuo tempo vale più della differenza in bolletta. Sei solo o siete in pochi, state cercando di capire se il prodotto ha senso, e ogni ora spesa a configurare un server è un'ora non spesa sul prodotto. Per un MVP è la scelta ragionevole quasi sempre.

Il VPS conviene quando il carico è stabile e prevedibile, quando i costi cominciano a contare più del tempo risparmiato, o quando sai già amministrare un server e non ti pesa. In quel caso il percorso è in configurare un VPS da zero.

La parte rassicurante è che non è una scelta definitiva: se il servizio è containerizzato, spostarlo su una macchina tua è un lavoro di ore.

Gli errori che fanno perdere ore o soldi

Lasciare acceso quello che non serve. Ambienti di prova, rami di anteprima, database creati per un esperimento: consumano finché esistono. È la causa numero uno delle fatture inspiegabili.

Trattare il disco come permanente senza averlo chiesto. Il filesystem di un container è effimero: se salvi i caricamenti degli utenti in una cartella locale, quei file spariscono al prossimo push. Serve un volume dichiarato o uno storage esterno.

Non fissare un tetto di memoria. Una perdita di memoria su un processo sempre attivo non provoca un crash rumoroso, ma un consumo che cresce piano e una fattura che cresce con lui.

Aprire una connessione al database per ogni richiesta. Un pool configurato male satura il database prima che le risorse si esauriscano, e l'errore ("too many connections") sembra un problema del database mentre è del tuo codice.

Costruire tutto in un unico servizio. API, worker e processi pianificati insieme sembra semplice, finché un lavoro pesante blocca le risposte HTTP e non puoi dimensionare i pezzi separatamente.

Quando conviene e quando no

Conviene se: ti serve un backend sempre attivo, un worker o una coda; vuoi database e applicazione nello stesso posto; sei in una fase in cui la velocità conta più dell'ottimizzazione dei costi; non vuoi imparare ad amministrare Linux adesso.

Non conviene se: stai pubblicando un sito statico o un'applicazione prevalentemente frontend — lì le piattaforme dedicate fanno meglio e costano meno, vedi Vercel o Netlify. Nemmeno con un carico costante e pesante a budget stretto, o se ti serve controllo totale sulla macchina.

In sintesi

Railway fa girare processi, non pagine. È il pezzo che manca alle piattaforme pensate per il frontend: backend sempre attivi, worker, lavori pianificati e database, tutti con il deploy da Git.

Il modello di prezzo è a consumo di risorse, quindi paghi la memoria occupata anche quando nessuno usa il servizio: limite di spesa e tetti di risorse vanno impostati il primo giorno.

Costa più di un VPS a parità di risorse, ed è normale: quello che compri è il tempo di gestione che non spendi. Finché quel tempo vale più della differenza, il conto torna.

La regola pratica: all'inizio di un progetto Railway ti fa arrivare online in un pomeriggio. Quando il carico si stabilizza e i costi iniziano a pesare, rivaluta — con i container la migrazione non è un dramma.

Se vuoi confrontarla con l'alternativa più strutturata, leggi cos'è Render. Se invece il pezzo che ti manca è solo il database, guarda cos'è Neon.