Unabhängige Tests Aktualisiert August 2026 387 Self-Hosting-Guides 5 VPS-Anbieter getestet

guide

Mit Kamal auf einen VPS deployen (Komplettanleitung)

Kamal bringt Ihre Docker-App per SSH auf einen gewöhnlichen VPS, ganz ohne Kubernetes. config/deploy.yml schreiben, Server richtig dimensionieren, ohne Downtime ausliefern.

Kamal läuft nicht auf Ihrem VPS. Es ist ein Deployment-Werkzeug, das Sie auf Ihrem eigenen Rechner oder CI-Runner installieren und das sich per SSH mit dem Server verbindet. Basecamp hat es entwickelt, um Rails-Anwendungen ohne Kubernetes auszuliefern, aber es deployt alles, was sich in ein Docker-Image bauen lässt.

Dieser Unterschied ändert, wonach Sie suchen. Der VPS ist Kamals Ziel und muss deshalb groß genug für Ihre Anwendung, deren Datenbanken und einige Tage an Image-Versionen sein. Kamal selbst belegt auf dem Server nichts.

Was Kamal tatsächlich auf dem Server ablegt

kamal setup verbindet sich per SSH (standardmäßig als root, authentifiziert über Ihren SSH-Key) und führt drei Schritte aus: Docker installieren, falls es fehlt, die deklarierten Accessories starten, dann die App deployen. Danach laufen auf dem Host:

Kamal selbst ist ein Gem (gem install kamal, aktuell 2.12.0) und hinterlässt keinen Daemon.

Voraussetzungen

Bevor Sie beginnen, brauchen Sie:

Die Wahl des VPS-Anbieters

Da der Server nur Container ausführt, zählen vor allem Netzwerkqualität, Reserve beim Speicherplatz und wie schnell Sie einen Host neu aufsetzen können:

AnbieterPreisMerkmaleAffiliate-Link
Contabo VPS5,99 EUR/Monat400 GB Speicher fangen große Images und lange Rollback-Historie abContabo VPS
Hetzner Cloud5,49 EUR/Monat2 vCPU / 4 GB / 40 GB NVMe, Snapshots für schnelles NeuaufsetzenHetzner Cloud
DigitalOcean6 USD/MonatBeste Dokumentation und API, um den Host selbst zu skriptenDigitalOcean
Vultr5 USD/MonatGroße Regionsauswahl, um die App nah an ihren Nutzern zu platzierenVultr
Linode5 USD/MonatKalkulierbare Preise, unkomplizierte NetzwerkeinrichtungLinode

Einen vollständigen Überblick bietet unser großer VPS-Vergleich.

DigitalOcean ist hier der einfachste Einstieg, weil die Dokumentation genau die Host-Arbeit abdeckt, die Kamal Ihnen nicht abnimmt: Firewall-Regeln, Swap und automatische Updates.

Den Server vorbereiten

  1. Den VPS aufsetzen mit einem minimalen Ubuntu-24.04-Image und hinterlegtem SSH-Key.
  2. Prüfen, dass root per SSH funktioniert, denn so verbindet sich Kamal standardmäßig:
ssh root@ihre-vps-ip
  1. Nur das Nötige öffnen. kamal-proxy terminiert TLS auf dem Server, die Ports 22, 80 und 443 genügen also:
ufw allow 22,80,443/tcp && ufw enable

Docker müssen Sie nicht selbst installieren. Kamal installiert es beim ersten kamal setup, falls es fehlt.

Kamal installieren und die Konfiguration schreiben

Auf Ihrem eigenen Rechner, im Verzeichnis Ihrer Anwendung:

gem install kamal
kamal init

kamal init legt config/deploy.yml an. Eine minimal funktionierende Konfiguration braucht einen Service-Namen, ein Image und mindestens einen 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

Secrets liegen in .kamal/secrets, das Kamal beim Deploy liest. Zuerst sucht es .kamal/secrets-common, danach .kamal/secrets:

KAMAL_REGISTRY_PASSWORD=$KAMAL_REGISTRY_PASSWORD

Halten Sie diese Datei aus der Versionsverwaltung heraus und ziehen Sie den Wert aus Ihrer Shell-Umgebung oder einem Passwortmanager.

Der erste Deploy

kamal setup

Dieser eine Befehl installiert Docker, startet Accessories, baut und pusht Ihr Image und fährt die App hoch. Jeder weitere Deploy lautet:

kamal deploy

Was auf dem Host läuft, zeigt:

kamal app containers

Wo das Image gebaut wird

Standardmäßig baut Kamal lokal, auf dem Rechner, von dem aus Sie es aufrufen, und pusht dann in die Registry. Der Server zieht nur. Ist Ihr Notebook arm64 und der VPS amd64, legen Sie entweder die Zielarchitektur fest oder verweisen Kamal auf einen Remote-Builder:

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

Cross-Builds über Emulation sind so langsam, dass es bei jedem Deploy auffällt. Ist der VPS Ihre einzige amd64-Maschine, kann er zugleich als Builder dienen — dann dimensionieren Sie ihn aber für einen Docker-Build und nicht bloß für den Betrieb der App, was meist einen Tarif höher bedeutet.

Den Speicherplatz dimensionieren

Kamal behält alte Container und Images auf dem Server, damit kamal rollback eine frühere Version starten kann, ohne erneut aus der Registry zu ziehen. Standardmäßig räumt es sie nach drei Tagen auf. Rechnen Sie mit den Daten Ihrer Anwendung plus etwa drei Tagen Image-Versionen samt gemeinsamer Basis-Layer.

Ein 1 GB großes Image, mehrmals täglich deployt, liegt bequem auf Hetzners 40 GB NVMe. Ein 3 GB großes Image füllt eine 25-GB-Platte binnen einer Woche, und eine volle Platte bricht den nächsten Deploy ab, nicht den laufenden — weshalb das Problem leicht übersehen wird, bis es dringend ist.

Umschalten ohne Downtime

kamal-proxy leitet den Traffic erst auf den neuen Container um, sobald dieser GET /up mit einer 200 beantwortet. Daraus folgt zweierlei:

Besteht der Health-Check nie, läuft der Deploy in einen Timeout und Kamal lässt den alten Container weiter ausliefern.

Das Deployment absichern

Abschließende Hinweise

Mehr zur Wahl des darunterliegenden Servers finden Sie in unserem großen VPS-Vergleich.

Frequently asked questions

Läuft Kamal auf dem VPS oder auf meinem eigenen Rechner?

Kamal läuft auf Ihrem Rechner oder Ihrem CI-Runner. Es ist ein Ruby-Gem, das sich per SSH mit dem Server verbindet, Docker installiert, falls es fehlt, und Ihre Container startet. Auf dem VPS bleiben nur kamal-proxy sowie Ihre App- und Accessory-Container zurück, niemals Kamal selbst.

Wie viel Speicherplatz braucht ein VPS als Kamal-Ziel?

Planen Sie die Daten Ihrer Anwendung plus rund drei Tage Image-Versionen ein, denn Kamal behält alte Container und Images für Rollbacks und räumt sie standardmäßig nach drei Tagen auf. Ein 1 GB großes Image passt bei mehreren Deploys pro Tag bequem auf 40 GB, ein 3 GB großes auf 25 GB nicht.

Warum läuft mein Kamal-Deploy in einen Timeout und wird zurückgerollt?

kamal-proxy leitet den Traffic erst um, wenn der neue Container GET /up mit einer 200 beantwortet. Fehlt dieser Endpunkt in Ihrer Anwendung, oder liefert er noch einen Fehler, während die App startet, besteht der Health-Check nie und Kamal kehrt zum vorherigen Container zurück.