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
Hacker-News-Kommentare
Nutzt seit Kurzem Dokploy und ist sehr zufrieden damit
Hat sich nach Prüfung mehrerer „self-hosted Heroku“-Lösungen für Dokku entschieden
Bei neuer Software kann es Probleme geben, aber bei Dokku war das nicht der Fall
Mit dem Let's-Encrypt-Plugin macht Dokku die HTTPS-Einrichtung einfach
Hat Dokku genutzt und ist dann zum Bauen von Docker-Images und Deployment mit Swarm gewechselt
Coolify wird immer beliebter und macht es für Organisationen jeder Größe einfach, kostenlos selbst gehostete Software zu betreiben
Dokku ist ein erstaunliches Produkt, und der Gründer ist sehr bescheiden und hilfsbereit
Fragt sich, was bei dieser Art von Infrastruktur für Datei-/Objektspeicher verwendet wird
Die Erfahrung mit Dokku war nicht gut
Man kann traefik + standardmäßiges podman + systemd-Integration verwenden