Loading...

Directus selbst hosten mit Docker auf einem Ubuntu Server

Jonas Scholz - Co-Founder von sliplane.ioJonas Scholz
7 min

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?

AnbietervCPURAMSpeicherKosten pro Monat
Render.com12 GB40 GB~$35
Fly.io22 GB40 GB~$17–20
Railway22 GB40 GB~$15–30
Sliplane.io22 GB40 GB~€9,50 pauschal
Hetzner (selbst)22 GB40 GB~€5–10 / Monat

Insgesamt sparst du beim Selbst-Hosten erheblich und hast mehr Kontrolle — allerdings auch mehr Verantwortung bei Backups und Verwaltung.\


Willkommen in der Container-Cloud

Sliplane macht es einfach, Container in der Cloud zu deployen und bei Bedarf zu skalieren. Probier es jetzt aus!