7 Punkte von GN⁺ 2024-08-27 | 1 Kommentare | Auf WhatsApp teilen

Was ist Dokku?

  • Dokku ist eine Open-Source-Platform as a Service (PaaS), die auf einem einzelnen Server läuft
  • Ähnlich wie Heroku, aber im Besitz des Nutzers
  • Ich brauchte eine kosteneffiziente und einfach zu nutzende Serverless-Plattform
  • Ich betreibe einen Dokku-Server auf einem VPS von OVHcloud für 7 US-Dollar pro Monat

Hauptfunktionen von Dokku

  • Einfach zu benutzen (ähnlich wie Heroku)
  • Automatische Verwaltung von SSL-Zertifikaten über Let’s Encrypt
  • Unterstützung für Basic Auth, um Sites mit einem Passwort zu schützen
  • Horizontales Hoch- und Runterskalieren mit einem einzigen Befehl
  • Flexibel genug für verschiedene Anwendungen wie Node, Python usw.
  • Einfache Deployments per git-Befehl

Minimales Dokku-Beispiel

Anwendung mit einem Docker-Container deployen

  • Lege die Dockerfile im Root des Git-Repositorys ab
  • Verwende das Skript entrypoint.sh, um die Anwendung lokal oder im Docker-Container zu starten
  • Erstelle die Anwendung auf dem Dokku-Host
  • Füge den Dokku-Host lokal als Remote hinzu und pushe dorthin
FROM python:3.10
COPY . /app
WORKDIR /app
RUN pip install .
WORKDIR /app/
ENTRYPOINT ["./entrypoint.sh"]
#!/bin/bash
exec uvicorn main:app --port "$PORT" --host 0.0.0.0
dokku apps:create myapp
git remote add dokku dokku@dokku:myapp
git push dokku main

Statische Site deployen

  • Mit Dokku lässt sich eine statische Site aus einem privaten GitHub-Repository einfach deployen und per Passwort schützen
  • Setze die Umgebungsvariable NGINX_ROOT, damit NGINX die statische Site ausliefert
  • Installiere und konfiguriere das Plugin für Basic Auth
dokku apps:create mysite
dokku config:set static-site NGINX_ROOT=_site
sudo dokku plugin:install https://github.com/dokku/dokku-http-auth.git
sudo chmod +x /home/dokku
touch .static
echo BUILDPACK_URL=https://github.com/dokku/buildpack-nginx > .env
git remote add dokku dokku@dokku:mysite
git push dokku main
dokku http-auth:enable mysite <username> <password>

SSL / HTTPS

  • Mit dem Let’s-Encrypt-Plugin lässt sich HTTPS einrichten
  • Wenn du Cloudflare nutzt, ist es einfacher, Cloudflare damit beauftragen zu lassen

Deployment mit GitHub Actions

  • Mit GitHub Actions lassen sich Dokku-Apps automatisch deployen
  • Beispiel für einen GitHub-Actions-Workflow
name: CI
on:
  workflow_dispatch:
  push:
    branches: [main]
jobs:
  deploy-dokku:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Install SSH key
        run: |
          echo "${{ secrets.DOKKU_SSH_PRIVATE_KEY }}" > private_key.pem
          chmod 600 private_key.pem
      - name: Add remote and push
        run: |
          git remote add dokku dokku@rechat.co:llm-eval
          GIT_SSH_COMMAND="ssh -i private_key.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git push dokku main -f

Weitere Tipps

  • Befehle lassen sich remote ausführen
  • Docker-Cache leeren
  • Neu bauen ohne Push
ssh dokku@rechat.co apps:list
ssh dokku@rechat.co repo:purge-cache llm-eval
ssh dokku@rehcat.co ps:rebuild llm-eval

Warum habe ich diesen Beitrag geschrieben?

  • Ich habe ihn geschrieben, weil ich bei jedem Deployment einer neuen Anwendung wieder Details nachschlagen musste
  • Ich hoffe, dass er auch für andere nützlich ist

Zusammenfassung von GN⁺

  • Dokku ist eine kosteneffiziente und einfach zu nutzende Open-Source-PaaS-Plattform
  • Es bietet Funktionen, mit denen sich verschiedene Anwendungen leicht deployen und verwalten lassen
  • Automatische Deployments sind mit Tools wie GitHub Actions möglich
  • In Kombination mit Diensten wie Cloudflare wird es noch bequemer
  • Andere Projekte mit ähnlichen Funktionen sind Heroku, Fly.io usw.

1 Kommentare

 
GN⁺ 2024-08-27
Hacker-News-Kommentare
  • Nutzt seit Kurzem Dokploy und ist sehr zufrieden damit

    • Ähnlich wie Dokku, bietet aber eine bessere Web-UI
    • Erleichtert das Deployment von Docker-/Compose-Lösungen und hat automatische LetsEncrypt-Funktionalität integriert
    • Hat einen GitHub-Actions-Workflow eingerichtet, um App-Deployments zu automatisieren
    • Bietet auch vorkonfigurierte Compose-Dateien für verschiedene Apps
  • Hat sich nach Prüfung mehrerer „self-hosted Heroku“-Lösungen für Dokku entschieden

    • Benötigt am wenigsten „Magie“ und lässt sich auch leicht wieder entfernen, falls man es nicht mehr nutzen will
    • Der Entwickler reagiert sehr schnell und hat beim Erstellen eines benutzerdefinierten Plugins geholfen
    • Hat das Thema im eigenen Blog dokumentiert
  • Bei neuer Software kann es Probleme geben, aber bei Dokku war das nicht der Fall

    • Abgesehen von einigen Problemen mit der Reihenfolge von CLI-Argumenten funktioniert es gut
    • Würde bei intensiverer Nutzung gern die gesamte Architektur mit deklarativen Konfigurationsdateien aufbauen
  • Mit dem Let's-Encrypt-Plugin macht Dokku die HTTPS-Einrichtung einfach

    • Nutzt TLS über Cloudflare
    • Man sollte darauf achten, dass persönliche Websites nicht im Klartext übertragen werden
  • Hat Dokku genutzt und ist dann zum Bauen von Docker-Images und Deployment mit Swarm gewechselt

    • Das war ein Anstoß, die selbst gehostete PaaS Lunni zu entwickeln
    • Mag die Idee, alles auf Servern zu betreiben, die einem selbst gehören, statt auf Heroku oder AWS
    • Vorhersehbare monatliche Rechnungen sorgen für innere Ruhe
  • Coolify wird immer beliebter und macht es für Organisationen jeder Größe einfach, kostenlos selbst gehostete Software zu betreiben

    • Coolify ist eine Open-Source- und selbst hostbare Heroku-/Netlify-/Vercel-Alternative
  • Dokku ist ein erstaunliches Produkt, und der Gründer ist sehr bescheiden und hilfsbereit

    • Wünschte, mehr Menschen würden es finanziell unterstützen
  • Fragt sich, was bei dieser Art von Infrastruktur für Datei-/Objektspeicher verwendet wird

    • Wenn man AWS nutzt, können die Egress-Kosten sämtliche Einsparungen wieder zunichtemachen
  • Die Erfahrung mit Dokku war nicht gut

    • Nach Absturz und Neustart des VPS wurden die Apps nicht erneut gestartet
    • Ist schließlich zu einem Single-Node-k8s-Setup gewechselt
  • Man kann traefik + standardmäßiges podman + systemd-Integration verwenden

    • Relevante Dokumentation und Links werden bereitgestellt