Nicht eigenloggt

Sie sind nicht eingeloggt. Wenn Sie ohne Login fortfahren, wird Ihr Fortschritt nicht gespeichert.

Jetzt einloggen
Zum Hauptinhalt springen

API Aufsetzen

Installation auf Dokku Server

  1. Eine neue App inf-teaching-api auf dem Server erstellen

    root@dokku
    dokku apps:create inf-teaching-api
    dokku domains:add inf-teaching-api teaching-api.gbsl.website

    dokku postgres:create inf-teaching-api
    dokku postgres:link inf-teaching-api inf-teaching-api

    dokku config:set --no-restart inf-teaching-api MSAL_CLIENT_ID="<MSAL_CLIENT_ID>"
    # wird für den Cookie-Name auf dem Client gebraucht
    dokku config:set --no-restart inf-teaching-api APP_NAME="infTeachingApi"
    dokku config:set --no-restart inf-teaching-api ALLOWED_ORIGINS="gbsl.website"

    dokku config:set --no-restart inf-teaching-api MSAL_TENANT_ID="<MSAL_TENANT_ID>"
    dokku config:set --no-restart inf-teaching-api SESSION_SECRET="$(openssl rand -base64 32)"

    # allow file-uploads up to 5mb
    mkdir /home/dokku/inf-teaching-api/nginx.conf.d/
    echo 'client_max_body_size 5m;' > /home/dokku/inf-teaching-api/nginx.conf.d/upload.conf
    chown dokku:dokku /home/dokku/inf-teaching-api/nginx.conf.d/upload.conf
    service nginx reload

    dokku nginx:set inf-teaching-api x-forwarded-proto-value '$http_x_forwarded_proto'
    dokku nginx:set inf-teaching-api x-forwarded-for-value '$http_x_forwarded_for'
    dokku nginx:set inf-teaching-api x-forwarded-port-value '$http_x_forwarded_port'

    Alternativ: direkt über /home/dokku/inf-teaching-api/ENV

    /home/dokku/inf-teaching-api/ENV
    APP_NAME="infTeachingApi"
    ALLOWED_ORIGINS="gbsl.website"
    SESSION_SECRET="$(openssl rand -base64 32)"
    MSAL_CLIENT_ID="<MSAL_CLIENT_ID>"
    MSAL_TENANT_ID="<MSAL_TENANT_ID>"
  2. Optionale Umgebungsvariablen setzen:

    CORS: Zugriff von Subdomains

    Erlaube jegliche Subdomains von gbsl.website:

    /home/dokku/inf-teaching-api/ENV
    dokku config:set inf-teaching-api ALLOW_SUBDOMAINS="true"
    Deploy Preview mit Netlify

    Ermöglicht den Zugriff von Deploy-Previews von Netlify mit der Domain
    https://deploy-preview-\d+--inf-teaching-api.netlify.app auf die API.

    /home/dokku/inf-teaching-api/ENV
    dokku config:set inf-teaching-api ALLOW_SUBDOMAINS="true"
    Github-Integration fürs CMS
    /home/dokku/inf-teaching-api/ENV
    dokku config:set --no-restart inf-teaching-api GITHUB_CLIENT_ID="<GITHUB_CLIENT_ID>"
    dokku config:set --no-restart inf-teaching-api GITHUB_CLIENT_SECRET="<GITHUB_CLIENT_SECRET>"
    dokku config:set inf-teaching-api GITHUB_REDIRECT_URI="<GITHUB_REDIRECT_URI>"
    Sentry Anbindung für Fehler-Reporting
    /home/dokku/inf-teaching-api/ENV
    dokku config:set --no-restart inf-teaching-api SENTRY_AUTH_TOKEN="<SENTRY_AUTH_TOKEN>"
    dokku config:set --no-restart inf-teaching-api SENTRY_DSN="<SENTRY_DSN>"
    dokku config:set --no-restart inf-teaching-api SENTRY_ORG="<SENTRY_ORG>"
    dokku config:set inf-teaching-api SENTRY_PROJECT="<SENTRY_PROJECT>"
    LMS: Standard-Gruppe für Inhalts-Moderation

    Diese Gruppe wird beim Erstellen einer neuen Document-Root standardmässig mit RW-Berechtigungen hinzugefügt.

    /home/dokku/inf-teaching-api/ENV
    dokku config:set inf-teaching-api ADMIN_USER_GROUP_ID="<ADMIN_USER_GROUP_ID>"
  3. Auf dem Laptop

    @laptop
    git remote add dokku dokku@<dokku-ip>:inf-teaching-api
    git push dokku
  4. SSL-Zertifikat erstellen Sobald die Seite erstmalig veröffentlicht wurde, muss einmalig ein SSL-Zertifikat erstellt werden. Dies geschieht mit dem Befehl

    root@dokku
    dokku letsencrypt:enable inf-teaching-api
  5. Backups einrichten Dokku ermöglicht das unkomplizierte Backupen von Datenbanken auf S3 Speicher.

    # dokku postgres:backup-auth inf-teaching-api <s3-access-key-id> <s3-secret-access-key> <s3-default-region> <s3-signature-version> <s3-endpoint-url> 
    dokku postgres:backup-auth inf-teaching-api <s3-access-key-id> <s3-secret-access-key> auto s3v4 <s3-endpoint-url>
    dokku postgres:backup inf-teaching-api <s3-bucket-name>
    dokku postgres:backup-set-encryption inf-teaching-api $(openssl rand -base64 32)
    dokku postgres:backup-schedule inf-teaching-api "0 3 * * *" <s3-bucket-name> # daily backup at 3am
    Speichern des Encryption Key's

    Werden die Backups verschlüsselt, muss der Schlüssel zwingend sicher verwahrt werden, damit die Backups dann auch wieder entschlüsselt werden können!

    $(openssl rand -base64 32)

    Backup wiederherstellen

    1. Das Backup herunterladen, z.B. postgres-inf-teaching-api-2025-05-19-02-00-02.tgz.gpg
    2. Das Backup entschlüsseln:
      gpg --decrypt postgres-inf-teaching-api-2025-05-19-02-00-02.tgz.gpg > backup.tgz
    3. Entpacken:
      tar -xf backup.tgz
    4. Backup wiederherstellen:
      dokku postgres:import inf-teaching-api < backup/export