Installation
Die Community-Edition von GoodWorkshop läuft als ein Container-Image plus Postgres, gestartet mit Docker Compose. Für Planung und Durchführung deiner Workshops fällt keine Lizenzgebühr an, auch nicht bei kommerzieller Nutzung. Wenn du keinen Server betreiben willst: Die GoodWorkshop Cloud ist dasselbe Produkt, gehostet.
Diese Seite fasst die Installation zusammen. Maßgeblich ist der Abschnitt Installation (on-premise) in der README.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“| Was | Anforderung |
|---|---|
| Docker | Docker mit Compose v2 (docker compose version), amd64 oder arm64 |
| Hostname | Ein Name, der öffentlich auf diesen Server auflöst |
| Ports | 80 und 443 frei — Let’s Encrypt braucht beide für das Zertifikat |
| Datenbank | Nichts zu tun: Postgres läuft im Stack und ist von außen nicht erreichbar |
| Passwörter | Nichts zu tun: Der Stack erzeugt die Datenbank-Passwörter beim ersten Start selbst |
1. Dateien holen
Abschnitt betitelt „1. Dateien holen“Du brauchst compose.yaml, Caddyfile und eine .env:
git clone https://github.com/roleALPHA/good-workshop.gitcd good-workshopcp .env.example .env2. Image wählen
Abschnitt betitelt „2. Image wählen“Die Releases liegen in der GitHub Container Registry. compose.yaml zieht das Image, das
GW_VERSION nennt. latest zeigt immer auf das neueste stabile Release. Jedes Release gibt es
außerdem unter seiner eigenen Nummer — damit bleibst du auf einer Version, bis du selbst
aktualisierst. Bauen musst du nichts.
3. Die .env ausfüllen
Abschnitt betitelt „3. Die .env ausfüllen“Drei Werte sind Pflicht. Fehlt einer, startet der Stack nicht und nennt den fehlenden Wert:
GW_APP_URL=https://workshop.example.com # the address the app is reachable atGW_HOSTNAME=workshop.example.com # the name in the certificate (profile `tls`)GW_VERSION=latest # the newest stable release, or e.g. 0.8.22 to pin oneMail kann warten. Für den ersten Start brauchst du keinen Mailversand: Die Einrichtungsseite zeigt deinen Anmeldelink selbst an. Danach richtest du den Versand in der Oberfläche unter Mailversand ein, siehe Mailversand. Alle weiteren Variablen stehen unter Konfiguration.
4. Starten
Abschnitt betitelt „4. Starten“docker compose --profile tls up -dDer Reihe nach passiert Folgendes:
secretserzeugt die Datenbank-Passwörter, je Rolle eines.dbstartet.migratelegt die Rollen an, prüft die vorhandenen Daten, spielt die Migrationen ein und richtet die Bausteintypen ein.appstartet erst, wennmigratesauber durchgelaufen ist.caddyübernimmt die Ports 80 und 443 und holt das Zertifikat.
Läuft alles, antwortet der Healthcheck:
curl -fsS https://workshop.example.com/api/health# {"status":"ok","checks":[{"name":"database","ok":true},{"name":"migrations","ok":true}]}Ein 503 ist kein Absturz, sondern die ehrliche Antwort „dieser Container kann nicht
ausliefern“. checks sagt, ob es an der Datenbank oder am Migrationsstand liegt.
5. Die Installation im Browser übernehmen
Abschnitt betitelt „5. Die Installation im Browser übernehmen“Eine frische Installation meldet sich bei jedem Start im Log, bis jemand sie übernimmt:
docker compose logs app This installation has no administrator yet.
https://workshop.example.com/setup Setup key: 7Qb3…
The key is valid until this process restarts.- Öffne die angezeigte Adresse
/setup. - Trag Vorname, Nachname und Deine E-Mail-Adresse ein.
- Füge den Einrichtungsschlüssel aus dem Log ein.
- Klick auf Installation einrichten.
Ist noch kein Mailversand eingerichtet, steht der Anmeldelink direkt auf der Seite. Er gilt einmal und läuft ab. Alles Weitere — Mailversand, weitere Personen, Branding — erledigst du danach in der Oberfläche.
Zwei andere Wege zum ersten Admin
Abschnitt betitelt „Zwei andere Wege zum ersten Admin“Über die Kommandozeile, mit einer Shell auf dem Server:
docker compose exec app node scripts/cli.mjs admin create \ --email you@example.com --first-name Anna --last-name BergerBeim allerersten Start: Setz GW_BOOTSTRAP_ADMIN_EMAIL=you@example.com in die .env, bevor
der Stack zum ersten Mal hochfährt. Der Link steht dann in docker compose logs migrate, gilt eine
Stunde und wird genau einmal gedruckt. Das ist für Installationen gedacht, die ein Skript statt
einer Person aufsetzt.
Findest du den Schlüssel oder den Link nicht, hilft Anmeldung und Anmeldelink weiter.
Weiterlesen
Abschnitt betitelt „Weiterlesen“- Konfiguration: alle wichtigen Variablen
- HTTPS und Reverse Proxy: ohne Caddy oder hinter einem eigenen Proxy
- Aktualisieren und sichern: Updates und Backups
- Datenschutz: was du als Betreiber wissen musst