Test indipendenti Aggiornato agosto 2026 387 guide di self-hosting 5 provider VPS testati

guide

Come Fare Deploy su un VPS con Kamal (Guida Completa)

Kamal porta la tua app Docker su un normale VPS via SSH, senza Kubernetes. Scrivi config/deploy.yml, dimensiona il server e rilascia senza interruzioni di servizio.

Kamal non gira sul tuo VPS. È uno strumento di deploy che installi sulla tua macchina o sul tuo runner CI, e che si collega al server via SSH per fare il suo lavoro. Basecamp l’ha creato per rilasciare applicazioni Rails senza Kubernetes, ma fa il deploy di qualunque cosa si costruisca in un’immagine Docker.

Questa distinzione cambia ciò che stai cercando. Il VPS è la destinazione di Kamal, quindi deve essere abbastanza capiente per la tua applicazione, i suoi database e qualche giorno di versioni dell’immagine. L’impronta di Kamal sul server è invece nulla.

Cosa Kamal lascia davvero sul server

kamal setup si collega via SSH (come root per impostazione predefinita, autenticato con la tua chiave SSH) ed esegue tre passaggi: installa Docker se non c’è, avvia gli accessori dichiarati, poi fa il deploy dell’applicazione. Dopodiché l’host esegue:

Kamal in sé è una gem (gem install kamal, 2.12.0 al momento in cui scriviamo) e non lascia alcun demone in esecuzione.

Requisiti

Prima di iniziare, procurati:

Scegliere il provider VPS

Poiché il server esegue solo container, valuta i provider sull’affidabilità della rete, sul margine di disco e sulla rapidità con cui puoi ricostruire un host:

ProviderPrezzoCaratteristicheLink affiliato
Contabo VPS5.99 EUR/mese400 GB di disco assorbono immagini grandi e una lunga cronologia di rollbackContabo VPS
Hetzner Cloud5.49 EUR/mese2 vCPU / 4 GB / 40 GB NVMe, snapshot per ricostruire in frettaHetzner Cloud
DigitalOcean6 USD/meseLa migliore documentazione e API per automatizzare l’hostDigitalOcean
Vultr5 USD/meseAmpia scelta di regioni per avvicinare l’app ai suoi utentiVultr
Linode5 USD/mesePrezzi prevedibili, configurazione di rete lineareLinode

Per un confronto completo, consulta il nostro confronto VPS.

DigitalOcean è il punto di partenza più semplice, perché la sua documentazione copre esattamente il lavoro a livello di host che Kamal non fa al posto tuo: regole del firewall, swap e aggiornamenti automatici.

Preparare il server

  1. Crea il VPS con un’immagine minimale di Ubuntu 24.04 e la tua chiave SSH associata.
  2. Verifica che l’accesso SSH come root funzioni, perché è così che Kamal si collega per impostazione predefinita:
ssh root@ip-del-tuo-vps
  1. Apri solo il necessario. kamal-proxy termina TLS sul server, quindi bastano le porte 22, 80 e 443:
ufw allow 22,80,443/tcp && ufw enable

Non devi installare Docker: se manca, ci pensa Kamal al primo kamal setup.

Installare Kamal e scrivere la configurazione

Sulla tua macchina, nella cartella dell’applicazione:

gem install kamal
kamal init

kamal init crea config/deploy.yml. Una configurazione minima funzionante richiede un nome di servizio, un’immagine e almeno un host:

service: myapp
image: your-registry-user/myapp

servers:
  web:
    hosts:
      - 203.0.113.10

registry:
  username: your-registry-user
  password:
    - KAMAL_REGISTRY_PASSWORD

proxy:
  ssl: true
  host: app.example.com

I segreti stanno in .kamal/secrets, che Kamal legge al momento del deploy. Cerca prima .kamal/secrets-common, poi .kamal/secrets:

KAMAL_REGISTRY_PASSWORD=$KAMAL_REGISTRY_PASSWORD

Tieni quel file fuori dal controllo di versione e prendi il valore dall’ambiente della shell o da un gestore di password.

Il primo deploy

kamal setup

Questo singolo comando installa Docker, avvia gli accessori, costruisce e carica l’immagine e avvia l’applicazione. Ogni deploy successivo si riduce a:

kamal deploy

Per vedere cosa sta girando sull’host:

kamal app containers

Dove viene costruita l’immagine

Per impostazione predefinita Kamal costruisce in locale, sulla macchina da cui lo lanci, e poi carica sul registry. Il server si limita a scaricare. Se il tuo portatile è arm64 e il VPS è amd64, fissa l’architettura di destinazione oppure indica a Kamal un builder remoto:

builder:
  arch: amd64
  remote: ssh://[email protected]

La compilazione incrociata tramite emulazione è abbastanza lenta da notarsi a ogni deploy. Se il VPS è la tua unica macchina amd64, può fare anche da builder — ma allora dimensionalo per una build Docker e non solo per far girare l’app, il che di solito significa salire di un piano.

Dimensionare il disco

Kamal conserva container e immagini vecchie sul server, così kamal rollback può riavviare una versione precedente senza tornare al registry. Per impostazione predefinita li rimuove dopo tre giorni. Calcola i dati della tua applicazione più circa tre giorni di versioni dell’immagine e i loro layer di base condivisi.

Un’immagine da 1 GB rilasciata qualche volta al giorno sta comodamente sui 40 GB NVMe di Hetzner. Un’immagine da 3 GB riempie un disco da 25 GB nel giro di una settimana, e un disco pieno rompe il deploy successivo, non quello in corso — il che rende il problema facile da trascurare finché non diventa urgente.

Il passaggio senza interruzioni

kamal-proxy sposta il traffico sul nuovo container solo quando questo risponde 200 a GET /up. Ne discendono due cose:

Se il controllo di salute non passa mai, il deploy va in timeout e Kamal lascia il vecchio container a servire il traffico.

Mettere in sicurezza il deploy

Consigli finali

Per approfondire la scelta del server sottostante, consulta il nostro confronto VPS.

Frequently asked questions

Kamal gira sul VPS o sulla mia macchina?

Kamal gira sulla tua macchina o sul tuo runner CI. È una gem Ruby che si collega al server via SSH, installa Docker se manca e avvia i tuoi container. Sul VPS restano soltanto kamal-proxy e i container dell'applicazione e degli accessori, mai Kamal stesso.

Quanto disco serve a un VPS usato come destinazione di Kamal?

Calcola i dati della tua applicazione più circa tre giorni di versioni dell'immagine, perché Kamal conserva container e immagini vecchie per i rollback e le rimuove solo dopo tre giorni. Un'immagine da 1 GB rilasciata più volte al giorno sta in 40 GB, una da 3 GB su un disco da 25 GB no.

Perché il mio deploy con Kamal va in timeout e torna indietro?

kamal-proxy sposta il traffico solo quando il nuovo container risponde 200 a GET /up. Se la tua applicazione non espone quell'endpoint, oppure restituisce ancora un errore mentre sta avviandosi, il controllo di salute non passa mai e Kamal ripristina il container precedente.