Zum Hauptinhalt springen

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​

  1. Eine neue App auf dem Server erstellen

    Mit Authentifizierung

    Alternativ: direkt über

  2. 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.

    .buildpacks
    https://github.com/heroku/heroku-buildpack-nodejs.git#v309
    https://github.com/dokku/buildpack-nginx.git#v28

    Mit 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 .static im Root-Verzeichnis des Repositories angelegt werden.

  3. SSL-Zertifikat erstellen Nach der ersten Veröffentlichung, muss einmalig ein SSL-Zertifikat erstellt werden. Dies geschieht mit dem Befehl

  4. 👉 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 Error

    Falls 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@dokku
    chmod +x /home/dokku
  5. (Optional) eine 👉 Github-Action erstellen, welche die Seite automatisch veröffentlicht, sobald ein Commit auf main gepusht wird.

    .github/workflows/deploy.yml
    ---
    name: 'dokku-deploy'

    on:
    push:
    branches:
    - main

    jobs:
    deploy:
    runs-on: ubuntu-24.04
    steps:
    # third-party action that cancels previous runs
    - name: Cancel Previous Runs
    uses: styfle/cancel-workflow-action@0.12.1
    with:
    access_token: ${{ github.token }}

    - name: Cloning repo
    uses: actions/checkout@v4
    with:
    fetch-depth: 0

    - name: Push to dokku
    uses: dokku/github-action@master
    with:
    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_URL
    DOKKU_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.