Directus selbst hosten mit Docker auf einem Ubuntu Server

Directus ist ein open-source Content-Management-System (CMS), mit dem du ganz ohne Programmieren eigene Datenbanken und APIs bauen kannst. Wenn du Directus auf deinem eigenen Ubuntu-Linux-Server hostest, behältst du die volle Kontrolle über Kosten, Sicherheit und deine Daten.
Hier findest du eine Schritt-für-Schritt-Anleitung, wie du Directus einfach mit Docker, Docker Compose und dem Caddy Webserver zum automatischen Erstellen von HTTPS-Zertifikaten aufsetzen kannst.
Bevor du anfängst, brauchst du:
- Einen Ubuntu-Linux-Server mit SSH-Zugriff und öffentlich erreichbarer IP-Adresse. Anbieter wie Hetzner bieten günstige Optionen.
- Einen registrierten Domain-Namen, der auf die IP-Adresse deines Servers zeigt.
- Grundlegende Kenntnisse im Umgang mit SSH und der Kommandozeile.
Schritt 1: Server-Updates durchführen
Aktualisiere zuerst deinen Ubuntu-Server, um die neuesten Sicherheitsupdates herunterzuladen:
sudo apt-get update
sudo apt-get upgrade -y
Warte, bis das Update abgeschlossen ist, bevor du zum nächsten Schritt übergehst.
Schritt 2: Firewall (UFW) einrichten
Auf einem öffentlich erreichbaren Server solltest du nur unbedingt benötigte Ports öffnen:
- SSH: Port
22
- HTTP: Port
80
- HTTPS: Port
443
Verwende dafür folgende Befehle:
sudo apt install ufw -y
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Überprüfe, ob die Regeln aktiviert sind:
sudo ufw status verbose
Achtung: Docker könnte die Firewall umgehen. Schau dir zur Verbesserung diese Anleitung an: Docker & UFW.
Schritt 3: Docker installieren
Docker vereinfacht es dir, Directus auszurollen. Du installierst Docker und das Docker-Compose-Plugin mit folgenden Kommandos:
Abhängigkeiten installieren und Docker-Key hinzufügen:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Docker-Repositorium hinzufügen:
echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Docker Engine installieren:
sudo apt-get install docker-ce docker-ce-cli \
containerd.io docker-buildx-plugin docker-compose-plugin -y
Installation überprüfen:
sudo docker run hello-world
Wenn Docker einen "Hello World"-Container startet, kannst du weitermachen.
Schritt 4: Caddy für automatisches HTTPS nutzen
Caddy ist ein einfacher Webserver, der automatisch SSL-Zertifikate von Let's Encrypt erzeugt.
Installiere Caddy:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
| sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
| sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy -y
Bearbeite die Caddy-Konfigurationsdatei:
sudo nano /etc/caddy/Caddyfile
Ersetze hier deinedomain.com
durch deine tatsächliche Domain. Caddy leitet Anfragen an Directus auf Port 8055 weiter:
deinedomain.com {
reverse_proxy localhost:8055
}
Starte Caddy neu, um die Änderungen zu übernehmen:
sudo systemctl restart caddy
Schritt 5: Directus per Docker Compose bereitstellen
Erstelle zunächst einen Ordner für alle Directus-Dateien:
mkdir ~/directus
cd ~/directus
Jetzt legst du eine Datei namens docker-compose.yml
mit folgendem Inhalt an:
services:
database:
image: postgis/postgis:13-master
volumes:
- ./data/database:/var/lib/postgresql/data
environment:
POSTGRES_USER: "directus"
POSTGRES_PASSWORD: "directus"
POSTGRES_DB: "directus"
healthcheck:
test: ["CMD", "pg_isready", "--host=localhost", "--username=directus"]
interval: 10s
timeout: 5s
retries: 5
start_interval: 5s
start_period: 30s
cache:
image: redis:6
healthcheck:
test: ["CMD-SHELL", "[ $$(redis-cli ping) = 'PONG' ]"]
interval: 10s
timeout: 5s
retries: 5
start_interval: 5s
start_period: 30s
directus:
image: directus/directus:11.5.1
ports:
- 8055:8055
volumes:
- ./uploads:/directus/uploads
- ./extensions:/directus/extensions
depends_on:
database:
condition: service_healthy
cache:
condition: service_healthy
environment:
SECRET: "ersetze-durch-sicheren-zufallswert"
DB_CLIENT: "pg"
DB_HOST: "database"
DB_PORT: "5432"
DB_DATABASE: "directus"
DB_USER: "directus"
DB_PASSWORD: "directus"
CACHE_ENABLED: "true"
CACHE_AUTO_PURGE: "true"
CACHE_STORE: "redis"
REDIS: "redis://cache:6379"
ADMIN_EMAIL: "[email protected]"
ADMIN_PASSWORD: "d1r3ctu5"
PUBLIC_URL: "https://deinedomain.com"
Starte Directus mit diesem Docker-Compose-Befehl:
sudo docker compose up -d
Schritt 6: Zugriff auf dein eigenes Directus
Öffne nun deine Domain (https://deinedomain.com
) im Browser und logge dich mit der E-Mail (ADMIN_EMAIL
) und dem Passwort (ADMIN_PASSWORD
) ein, die du im vorherigen Schritt gesetzt hast.
Sicherheits-Tipps:
- Halte stets System und Docker-Images aktuell.
- Nutze starke Passwörter und begrenze Nutzerrechte.
- Überwache aufmerksam deine Logs.
- Erwäge Fail2ban zum Schutz gegen unerwünschten Zugriff.
Directus updaten
Um dein Directus zu aktualisieren, führe folgendes aus:
sudo docker compose pull
sudo docker compose up -d
Unterschiede zum gemanagten Hosting
Wenn du dein Directus-System selbst hostest, hast du volle Kontrolle und maximale Flexibilität. Andererseits übernimmt beim offiziellen Directus Managed Hosting der Anbieter alle Infrastruktur-Aufgaben für dich, was aber normalerweise auch teurer ist.
Falls dir das Selbst-Hosting zu kompliziert erscheint oder du dich lieber auf dein Projekt statt auf Server-Administration konzentrieren möchtest, kannst du dir in diesem Video ansehen, wie man Directus ganz einfach bei einer gemanagten Plattform wie sliplane.io betreibt.
Fazit – selbst hosten oder hosted Services?
Anbieter | vCPU | RAM | Speicher | Kosten pro Monat |
---|---|---|---|---|
Render.com | 1 | 2 GB | 40 GB | ~$35 |
Fly.io | 2 | 2 GB | 40 GB | ~$17–20 |
Railway | 2 | 2 GB | 40 GB | ~$15–30 |
Sliplane.io | 2 | 2 GB | 40 GB | ~€9,50 pauschal |
Hetzner (selbst) | 2 | 2 GB | 40 GB | ~€5–10 / Monat |
Insgesamt sparst du beim Selbst-Hosten erheblich und hast mehr Kontrolle — allerdings auch mehr Verantwortung bei Backups und Verwaltung.\