Dokploy installieren: Deployment-Plattform auf Docker Swarm selbst hosten
Dokploy 0.30 nach offizieller Anleitung installieren: Installationsskript prüfen, Docker Swarm und Traefik verstehen, Port 3000 absichern, Panel unter HTTPS betreiben, Backups und Updates planen.
Werbung Mit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Dokploy ist eine quelloffene, selbst gehostete Plattform für das Deployment von Anwendungen und Datenbanken: Sie verbinden ein Git-Repository oder ein Docker-Image, Dokploy baut und startet den Dienst, legt über Traefik die Domain an und holt ein Let’s-Encrypt-Zertifikat. Wichtig für die Planung: Dokploy setzt auf Docker Swarm. Das Panel selbst, seine PostgreSQL-Datenbank und alle Anwendungen laufen als Swarm-Dienste, Traefik als eigener Container. Ein reines Docker-Compose-Setup ohne Swarm reicht nicht, weil Dokploy Anwendungen über die Swarm-Schnittstelle (createService) anlegt. Diese Anleitung folgt der offiziellen Installation für Version 0.30.8, erklärt, was das Skript am Host verändert, und sichert das Panel danach ab.
Voraussetzungen
Dokploy baut Anwendungen auf demselben Server, auf dem es läuft. Der Bedarf an RAM und Speicher wächst deshalb mit jeder App und jedem Build.
- RAM und Speicher: laut Hersteller mindestens 2 GB RAM und 30 GB Speicher, damit Builds den Server nicht zum Stillstand bringen. Für mehrere Anwendungen mit Datenbanken planen Sie entsprechend mehr ein.
- CPU und Architektur: x86_64 oder ARM64; das Image
dokploy/dokploy:v0.30.8gibt es für beide. - Betriebssystem: vom Hersteller getestet unter anderem Ubuntu 24.04, 22.04 und 20.04 LTS sowie Debian 12 und 11. Die automatische Sicherheitsprüfung von Dokploy zielt auf Ubuntu und Debian.
- Ports: 80 und 443 (Traefik) sowie 3000 (Panel) müssen frei sein, sonst bricht das Skript ab.
- Kein bestehender Swarm: Das Skript führt
docker swarm leave --forceaus. Auf einem Host, der schon Teil eines Swarms ist, zerstört das die laufenden Dienste. - Kein Container: Das Skript verweigert die Arbeit in Docker-Containern und auf macOS. Proxmox-LXC erkennt es und schaltet auf
--endpoint-mode dnsrr. - Domain: für das Panel und die Anwendungen, mit A-Record auf die öffentliche IP.
Nutzen Sie für Dokploy einen eigenen Server. Laufen dort bereits ein Reverse Proxy auf Port 80 und 443 oder andere Compose-Stacks, kollidieren sie mit Traefik. Wie Sie den Server vorher grundlegend absichern, beschreibt VPS absichern und härten.
Schritt 1: Firewall vorbereiten
Das Panel wird im Swarm-Modus host auf Port 3000 veröffentlicht. Docker schreibt dafür eigene iptables-Regeln und umgeht damit UFW; die Dokploy-Doku weist ausdrücklich darauf hin. Direkt nach der Installation zeigt Port 3000 die Einrichtungsseite, auf der das erste Konto zum Administrator wird. Wer sie zuerst aufruft, übernimmt das Panel.
Sperren Sie Port 3000 deshalb vor der Installation in der Firewall Ihres Hosting-Anbieters, die vor dem Server greift. Offen bleiben nur SSH, 80 und 443. Die Hardening-Anleitung des Herstellers nennt genau diese drei Ports und empfiehlt zusätzlich ufw-docker, wenn Sie UFW einsetzen. Wie Sie UFW und Fail2ban einrichten, steht in Linux-Server absichern: UFW-Firewall und Fail2ban.
Von einem anderen Rechner aus liefert nc -zv SERVER-IP 3000 nach der Installation einen Timeout oder „Connection refused“, nc -zv SERVER-IP 443 dagegen eine Verbindung.
Schritt 2: Installationsskript prüfen
Die Doku bietet curl -sSL https://dokploy.com/install.sh | sh an. Dieses Skript ermittelt beim Aufruf die jeweils neueste Version. Für eine nachvollziehbare Installation laden Sie stattdessen das Skript des konkreten Releases, das der Hersteller als Release-Asset bereitstellt, und lesen es vor der Ausführung:
$ curl -fsSLO https://github.com/Dokploy/dokploy/releases/download/v0.30.8/install.sh
$ less install.shDas Skript für v0.30.8 erledigt der Reihe nach:
| Aktion | Details |
|---|---|
| Prüfungen | root, Linux, kein Container, Ports 80, 443, 3000 frei |
| Docker | nur falls fehlend: Docker 28.5.0 über get.docker.com, danach apt-mark hold auf die Pakete |
| Swarm | docker swarm leave --force, dann docker swarm init --advertise-addr … |
| Netz | Overlay-Netz dokploy-network (attachable) |
| Verzeichnis | /etc/dokploy mit Rechten 777 |
| Secrets | dokploy_postgres_password, dokploy_auth_secret |
| Dienste | dokploy-postgres (postgres:16), dokploy (dokploy/dokploy:v0.30.8, Port 3000, Docker-Socket) |
| Traefik | Container dokploy-traefik (traefik:v3.6.25), Ports 80, 443/tcp und 443/udp |
Der Dienst dokploy bekommt den Docker-Socket des Hosts eingebunden, denn er verwaltet alle weiteren Container und Dienste. Das ist gewollt, macht das Panel aber zum wertvollsten Ziel auf dem Server. Als Advertise-Adresse für Swarm wählt das Skript zuerst eine private IP (RFC 1918) einer echten Netzwerkschnittstelle, sonst die öffentliche IP.
grep -n 'DOKPLOY_VERSION=' install.sh zeigt v0.30.8, grep -c 'swarm init' install.sh liefert einen Treffer größer als null. Sie wissen jetzt, welche Änderungen am Host folgen.
Schritt 3: Dokploy installieren
Führen Sie das geprüfte Skript als root aus. Umgebungsvariablen geben Sie direkt im Aufruf mit, denn sudo setzt die Umgebung zurück und ein vorheriges export käme laut Doku nicht an:
$ sudo sh install.sh# mit fester Advertise-Adresse, etwa für ein VPN- oder privates Netz:$ sudo ADVERTISE_ADDR=10.0.0.5 sh install.sh# eigener Adressbereich für Swarm, wenn 10.0.0.0/8 mit dem Anbieternetz kollidiert:$ sudo DOCKER_SWARM_INIT_ARGS="--default-addr-pool 172.20.0.0/16 --default-addr-pool-mask-length 24" sh install.shKernel ohne IPVS-Unterstützung, etwa minimalistische Appliance-Systeme, brauchen laut Doku ENDPOINT_MODE=dnsrr. Am Ende meldet das Skript „Congratulations, Dokploy is installed!“ und bittet, etwa 15 Sekunden zu warten.
docker info --format '{{.Swarm.LocalNodeState}}' liefert active. docker service ls zeigt dokploy und dokploy-postgres mit 1/1 Replikaten, docker ps --filter name=dokploy-traefik einen laufenden Traefik-Container. curl -sI http://127.0.0.1:3000 antwortet auf dem Server mit einem HTTP-Status.
Schritt 4: Admin-Konto über SSH-Tunnel anlegen
Weil Port 3000 von außen gesperrt ist, öffnen Sie das Panel über einen SSH-Tunnel von Ihrem Arbeitsplatz aus:
$ ssh -L 3000:127.0.0.1:3000 benutzer@SERVER-IPRufen Sie im Browser http://localhost:3000 auf. Die Einrichtungsseite fragt die Daten des Administratorkontos ab. Aktivieren Sie danach im Profil die Zwei-Faktor-Anmeldung oder einen Passkey; die Hardening-Anleitung des Herstellers empfiehlt beides für jedes Konto mit Zugang zum Panel. Eine organisationsweite Pflicht zur Zwei-Faktor-Anmeldung gibt es ohne SSO laut Doku derzeit nicht, Sie müssen sie also als Regel vorgeben und kontrollieren.
Die Anmeldung mit dem neuen Konto öffnet das Dashboard. Ein zweiter Aufruf der Einrichtungsseite bietet keine erneute Kontoerstellung an.
Schritt 5: Panel unter einer HTTPS-Domain betreiben
Unter Settings > Web Server hinterlegen Sie die Domain für das Panel selbst, etwa dokploy.firma.de, und wählen Let’s Encrypt als Zertifikatsquelle. Der A-Record muss vorher auf den Server zeigen, und Port 80 und 443 müssen erreichbar sein. Sobald das Panel unter HTTPS erreichbar ist, entfernen Sie die direkte Freigabe von Port 3000:
$ docker service update --publish-rm "published=3000,target=3000,mode=host" dokployDie Doku warnt: Führen Sie diesen Befehl erst aus, wenn die Domain mit HTTPS funktioniert, sonst sperren Sie sich aus. Den Zugang retten Sie dann nur mit einem erneuten docker service update --publish-add auf dem Server.
curl -sI https://dokploy.firma.de liefert eine Antwort mit gültigem Zertifikat. docker service inspect dokploy --format '{{json .Endpoint.Ports}}' enthält keinen Eintrag für Port 3000 mehr.
Schritt 6: Erste Anwendung deployen
Legen Sie ein Projekt an und darin eine Anwendung. Als Quelle dienen ein Git-Anbieter, ein beliebiges Git-Repository oder ein Docker-Image. Unter Domains weisen Sie eine eigene Domain zu; für Anwendungen erzeugt Dokploy dazu eine Traefik-Konfiguration mit HTTP-zu-HTTPS-Umleitung und certResolver: letsencrypt. Kostenlose traefik.me-Domains funktionieren laut Doku nur per HTTP. Für Docker-Compose-Projekte gilt eine Besonderheit: Hier setzt Dokploy Traefik-Labels, und die HTTPS-Umleitung müssen Sie laut Hardening-Anleitung selbst ergänzen.
Datenbanken legen Sie als eigene Dienste an. Nutzen Sie für Anwendungen im selben Netz die internen Zugangsdaten und aktivieren Sie externe Zugangsdaten mit veröffentlichtem Port nur, wenn es wirklich nötig ist.
docker service ls listet die neue Anwendung als Swarm-Dienst mit 1/1. Die zugewiesene Domain liefert die Anwendung über HTTPS aus, und curl -sI http://app.firma.de antwortet mit einer Umleitung auf HTTPS.
Schritt 7: Backup, Updates und Notfallzugang
Dokploy sichert sich selbst über Web Server > Backups auf ein zuvor eingerichtetes S3-Ziel: die Datenbank dokploy-postgres und das Verzeichnis /etc/dokploy, gemeinsam als ZIP-Datei. Die Rücksicherung löscht /etc/dokploy und die Datenbank und spielt die Sicherung ein. Die Archive verschlüsselt Dokploy nicht selbst; aktivieren Sie die Verschlüsselung am Bucket und beschränken Sie die S3-Zugangsdaten auf diesen Bucket. Datenbanken Ihrer Anwendungen sichern Sie zusätzlich über deren eigene Backup-Funktion.
Updates spielen Sie mit dem Skript des Zielreleases ein. Den Container dokploy-traefik aktualisiert Dokploy dabei laut Doku bewusst nicht, um unerwartete Ausfälle zu vermeiden. Ein Traefik-Update ist ein eigener, manueller Schritt mit Blick auf die Release Notes.
$ curl -fsSLO https://github.com/Dokploy/dokploy/releases/download/v0.30.8/install.sh
$ sudo sh install.sh update# Passwort vergessen: Container-ID ermitteln, dann$ docker ps --filter name=dokploy
$ docker exec -it CONTAINER-ID bash -c "pnpm run reset-password"Nach einem Backup-Lauf liegt im S3-Bucket eine neue ZIP-Datei. Nach einem Update zeigt docker service inspect dokploy --format '{{.Spec.TaskTemplate.ContainerSpec.Image}}' das neue Tag.
Typische Fehler
- „Error: something is already running on port 80“ (oder 443, 3000)
Ein anderer Dienst belegt den Port. Stoppen Sie ihn oder nutzen Sie einen eigenen Server.
- „Error: Failed to initialize Docker Swarm“
Häufig findet das Skript keine passende Adresse. Mit
ADVERTISE_ADDRdie IP vorgeben.- Dienste erreichen sich nicht gegenseitig
Kernel ohne IPVS-Module; Neuinstallation mit
ENDPOINT_MODE=dnsrr.- Port 3000 trotz UFW-Regel von außen erreichbar
Docker umgeht UFW. Firewall des Anbieters nutzen oder
ufw-dockereinrichten.- Anwendung antwortet mit 404 nach Traefik-Update
Die Doku warnt vor inkompatiblen Traefik-Versionen. Auf die zuvor genutzte Version
traefik:v3.6.25zurückgehen und Release Notes prüfen.- Panel nach
--publish-rmnicht mehr erreichbar Domain war noch nicht funktionsfähig. Port per
docker service update --publish-add "published=3000,target=3000,mode=host" dokploywieder freigeben, Domain korrigieren.
Häufige Fragen
Kann ich Dokploy mit Docker Compose statt Swarm betreiben?
Nein, nicht sinnvoll. Die offizielle Installation, auch die manuelle Variante für einen bestehenden Swarm, setzt Swarm-Dienste, Docker Secrets und ein Overlay-Netz voraus, und Dokploy legt Anwendungen und Datenbanken als Swarm-Dienste an. Ohne aktiven Swarm fehlt diese Grundlage.
Ich betreibe bereits einen Swarm. Was nun?
Verwenden Sie das Skript dann nicht, denn es verlässt den bestehenden Swarm per docker swarm leave --force. Die Doku beschreibt für diesen Fall unter „Existing Docker Swarm“ die einzelnen Befehle ohne Swarm-Initialisierung, auszuführen auf einem Manager-Knoten.
Brauche ich mehrere Server?
Für den Anfang nicht. Der Hersteller empfiehlt, mit einem Dokploy-Server zu starten. Später können Sie Anwendungen per SSH auf Remote-Server auslagern oder weitere Swarm-Knoten anbinden; Letzteres setzt eine Registry und gleiche Architektur voraus.
Wie unterscheidet sich Dokploy von Coolify?
Beide verfolgen dasselbe Ziel. Dokploy baut auf Docker Swarm und Traefik auf, Coolify auf eigenen Docker-Containern mit eigenem Proxy. Die Installation von Coolify beschreibt Coolify mit Docker installieren.
Fazit
Dokploy liefert eine vollständige Deployment-Plattform mit wenigen Befehlen, verlangt dafür aber einen Server, der ihm allein gehört: Swarm, Traefik auf 80 und 443 und ein Panel mit Zugriff auf den Docker-Socket. Wer das Installationsskript vorher liest, Port 3000 von Beginn an sperrt, das Admin-Konto per SSH-Tunnel anlegt und das Panel hinter HTTPS stellt, vermeidet die typischen Risiken. Sicherungen auf S3 mit verschlüsseltem Bucket und kontrollierte Updates über das Skript des jeweiligen Releases runden den Betrieb ab.


