Dokku Deploy
👉 Docusaurus ist ein statischer Website-Generator, der auf React basiert. Standardmässig wird die generierte Seite über kostenlose CDNs gehosted (Github Pages, Netlify, Cloudflare...). Der Nachteil ist, dass die Inhalte öffentlich zugänglich sind und somit nur lizensierte oder freie Inhalte publiziert werden dürfen. Dies erfordert einen Zusatzaufwand und ist im Schulkontext nicht immer möglich.
Durch das Hosten auf einem eigenen Server kann mit bspw. http-auth der Zugriff auf die Seite eingeschränkt werden.
Installation​
-
Eine neue App auf dem Server erstellen
Mit AuthentifizierungAlternativ: direkt über
-
Auf dem Laptop
Die statische Webseite wird nun automatisch erzeugt und veröffentlicht.
Hintergründe
Die Webseite verwendet zwei Buildpacks - die URLs und Versionen sind in der
.buildpacks-Datei definiert..buildpackshttps://github.com/heroku/heroku-buildpack-nodejs.git#v309https://github.com/dokku/buildpack-nginx.git#v28Mit dem ersten Buildpack wird die statische Seite generiert, mit dem zweiten Buildpack wird die generierte Seite statisch serviert. Damit dies funktioniert, muss eine leere Datei mit dem Namen
.staticim Root-Verzeichnis des Repositories angelegt werden. -
SSL-Zertifikat erstellen Nach der ersten Veröffentlichung, muss einmalig ein SSL-Zertifikat erstellt werden. Dies geschieht mit dem Befehl
-
👉 http-auth aktivieren Um die Seite zu schützen, kann HTTP-Auth aktiviert werden. Dies geschieht mit dem Befehl
Es lassen sich auch weitere Zugänge anlegen:
Und wieder entfernen:
Troubleshooting:
500 Internal Server ErrorFalls die Seite nach der Aktivierung einen 500er Fehler zurückgibt, könnte dies an der fehlenden Berechtigung von nginx für die
.htpasswd-Datei liegen. In diesem Fall muss die Berechtigung mit folgendem Befehl angepasst werden:root@dokkuchmod +x /home/dokku -
(Optional) eine 👉 Github-Action erstellen, welche die Seite automatisch veröffentlicht, sobald ein Commit auf
maingepusht wird..github/workflows/deploy.yml---name: 'dokku-deploy'on:push:branches:- mainjobs:deploy:runs-on: ubuntu-24.04steps:# third-party action that cancels previous runs- name: Cancel Previous Runsuses: styfle/cancel-workflow-action@0.12.1with:access_token: ${{ github.token }}- name: Cloning repouses: actions/checkout@v4with:fetch-depth: 0- name: Push to dokkuuses: dokku/github-action@masterwith:branch: 'main'git_push_flags: '--force'ssh_host_key: ${{ secrets.DOKKU_SSH_HOST_KEY }}git_remote_url: ${{ secrets.DOKKU_GIT_REMOTE_URL }}ssh_private_key: ${{ secrets.DOKKU_SSH_PRIVATE_KEY }}DOKKU_SSH_HOST_KEY- Der Fingerprint des Dokku-Servers (optional, wenn nicht vorhanden, wird der Host-Key durch ein Keyscan validiert.)
DOKKU_GIT_REMOTE_URLDOKKU_SSH_PRIVATE_KEY- Der private SSH-Key, welcher für den Zugriff auf den Dokku-Server verwendet wird
- Erstelle ein neues SSH-Key-Paar mit
ssh-keygen(nicht auschecken!). Der private Key wird auf Github als Secret hinterlegt, der öffentliche Key muss auf dem Dokku-Server hinterlegt werden. - Erstelle ein neues SSH-Key-Paar mit