Zum Hauptinhalt springen

Installation

Das Docker-Compose-Paket betreibt ein vollständiges GOAT auf einem Linux-Server: die Web-App und ihre APIs, den Anmeldeserver (Keycloak), den Objektspeicher (Garage), die Datenbank (PostgreSQL mit PostGIS), die Job-Engine (Windmill) und einen Proxy (Caddy), der sich um HTTPS kümmert. Eine Installation besteht aus drei Befehlen:

./setup.sh && docker compose up -d && ./smoke.sh

Diese Seite führt Sie Schritt für Schritt durch diese Befehle, von den Voraussetzungen bis zur ersten Anmeldung.

Voraussetzungen​

Minimum (Test)Empfohlen
CPU / RAM4 vCPU / 8 GB8 vCPU / 16 GB
Festplatte50 GB200 GB oder mehr (wächst mit Ihren Daten)
BetriebssystemJedes Linux mit Docker Engine 24+ und Docker Compose 2.23+Ubuntu 24.04 LTS

Außerdem benötigen Sie:

  • Offene Ports 80 und 443 oder den einen Port, den Sie für unverschlüsseltes HTTP wählen. Sonst muss nichts von außen erreichbar sein.
  • Einen DNS-Namen, der auf den Server zeigt, wenn Sie automatisches HTTPS mit Let's Encrypt möchten.
  • Ausgehenden Internetzugang, um die Images von ghcr.io zu laden, sowie für die Routing-Basisdaten, die Grundkarten und die optionalen Integrationen.
  • openssl für setup.sh sowie curl und jq für smoke.sh.
info

Die GOAT-Images sind öffentlich. Sie müssen sich bei keiner Registry anmelden.

1. Paket herunterladen​

Jedes GOAT-Release veröffentlicht das Paket als goat-compose-<version>.tar.gz auf seiner GitHub-Release-Seite. Das Paket ist an sein Release gebunden: Es installiert genau diese GOAT-Version.

curl -LO https://github.com/plan4better/goat/releases/download/<version>/goat-compose-<version>.tar.gz
tar xzf goat-compose-<version>.tar.gz
cd goat-compose

Ersetzen Sie <version> durch das Release-Tag, das Sie installieren möchten. Der Ordner enthält:

DateiZweck
compose.yamlAlle Dienste
.env.exampleAlle Einstellungen mit Kommentaren. setup.sh erstellt daraus .env.
setup.shSchreibt und aktualisiert .env
smoke.shPrüft die laufende Installation von Anfang bis Ende
base-data.shLädt die Routing- und ÖV-Basisdaten herunter
restore.shStellt ein Backup wieder her
certs/Ihr eigenes Zertifikat und Ihre CA-Dateien, falls Sie welche verwenden
init/Konfiguration der mitgelieferten Dienste (Proxy, Datenbank, Anmeldung, Speicher, Jobs)

Führen Sie alle Befehle auf dieser Seite in diesem Ordner aus.

2. Konfiguration erstellen​

setup.sh erstellt die Datei .env, die die gesamte Konfiguration enthält. Ohne Optionen aufgerufen, stellt das Skript vier Fragen:

./setup.sh
FrageVorgabe
Public URL: die Adresse, die Benutzer in den Browser eingeben, etwa https://goat.example.org oder http://10.0.0.5http://localhost
TLS mode: auto, custom, internal oder off (siehe HTTPS und Adressen)off bei einer http://-URL, sonst auto
Email for Let's Encrypt notices (nur im Modus auto, optional)leer
Email of the first GOAT administratoradmin@<Ihr Host>

Anschließend erzeugt setup.sh zufällige Passwörter und Schlüssel für alle Komponenten, speichert sie in .env (nur für Ihren Benutzer lesbar) und gibt die Zugangsdaten des ersten Administrators aus:

Wrote .env for https://goat.example.org (TLS: auto).
First login: admin@example.org / <generated password> (also stored in .env as GOAT_ADMIN_PASSWORD)
Next: docker compose up -d && ./smoke.sh

Ohne Rückfragen​

Für automatisierte Installationen übergeben Sie die Antworten als Optionen und ergänzen --non-interactive:

./setup.sh --public-url https://goat.example.org --tls auto \
--acme-email ops@<ihre-domain> --admin-email admin@<ihre-domain> \
--non-interactive
OptionBedeutung
--public-url URLDie öffentliche URL, mit http:// oder https://, ohne Pfad
--tls auto|custom|internal|offDer TLS-Modus
--acme-email EMAILKontakt für Ablaufhinweise von Let's Encrypt (nur auto)
--admin-email EMAILE-Mail-Adresse des ersten Administrators
--http-port PORTPort für unverschlüsseltes HTTP, wenn TLS an Ihrem eigenen Load Balancer endet (siehe Hinter Ihrem eigenen Load Balancer)
--non-interactiveNichts fragen; die Optionen und die Werte aus .env verwenden
-h, --helpHilfe anzeigen

setup.sh bricht mit einer klaren Meldung ab, wenn etwas nicht passt, zum Beispiel wenn:

  • die URL weder mit http:// noch mit https:// beginnt oder einen Pfad enthält (sie muss ein reiner Origin wie https://goat.example.org sein);
  • eine http://-URL mit einem anderen TLS-Modus als off kombiniert wird;
  • der Modus auto mit einem Port in der URL kombiniert wird (Let's Encrypt benötigt die Standard-Ports);
  • die E-Mail-Adresse für Let's Encrypt eine Domain verwendet, die Let's Encrypt ablehnt (siehe Automatisches Zertifikat);
  • Docker Compose älter als 2.23 ist.

setup.sh erneut ausführen​

Sie können setup.sh beliebig oft ausführen. Das Skript sichert die aktuelle Datei als .env.bak.<Zeitstempel>, behält alle Werte in .env bei, ergänzt Einstellungen, die in .env.example neu sind, und erzeugt Geheimnisse nur dort, wo sie leer sind. Neu geschrieben werden nur die Werte, die es aus der öffentlichen URL und dem TLS-Modus ableitet.

Bewahren Sie .env sicher auf

.env enthält alle Passwörter und Schlüssel Ihrer Installation. Legen Sie eine Kopie zu Ihren Backups: Eine wiederhergestellte Datenbank und ein wiederhergestellter Speicher erwarten genau diese Werte.

3. GOAT starten​

docker compose up -d

Der erste Start dauert einige Minuten: Docker lädt die Images, PostgreSQL legt die Datenbanken an, Keycloak erstellt den Anmelde-Realm mit dem ersten Administrator, und die Analyse-Werkzeuge werden in Windmill registriert.

Einige Dienste bereiten die Installation nur vor und beenden sich dann: data-init, core-migrate, ducklake-init, garage-init, windmill-bootstrap und windmill-sync. Sie laufen bei jedem docker compose up -d, lassen sich gefahrlos wiederholen und spielen nach einem Update die Datenbankmigrationen ein. docker compose ps -a zeigt sie nach erfolgreichem Lauf als Exited (0) an.

4. Installation prüfen​

./smoke.sh

smoke.sh prüft die gesamte Installation Schritt für Schritt und gibt für jeden Schritt PASS oder FAIL aus:

  1. Alle einmaligen Dienste wurden erfolgreich beendet, und alle dauerhaft laufenden Dienste sind gesund.
  2. Web-App, Core API, GeoAPI, Processes und Catalog antworten unter der öffentlichen URL, und die GeoAPI bildet ihre Links mit der öffentlichen URL.
  3. Keycloak nennt die öffentliche URL als Aussteller (Issuer), und der erste Administrator kann sich anmelden.
  4. Der Administrator gehört zu einer Organisation und hat ein Profil.
  5. Eine kleine GeoJSON-Datei wird hochgeladen, als Layer importiert, als Vektorkachel ausgeliefert und in einer Puffer-Analyse verwendet.

./smoke.sh --quick führt nur die Schritte 1 bis 4 aus. Schlägt ein Schritt fehl, hält smoke.sh an, nennt den Schritt und gibt die letzten Log-Zeilen des betroffenen Dienstes aus.

Was smoke.sh verändert

smoke.sh arbeitet mit dem Konto des ersten Administrators. Die Test-Datensätze, die es importiert, löscht es am Ende wieder, sodass in Meine Inhalte nichts zurückbleibt. Hat der Administrator noch keine Organisation, legt das Skript eine mit dem Namen GOAT an; um den Namen selbst zu wählen, melden Sie sich zuerst an (Schritt 5) und starten smoke.sh danach, oder benennen Sie sie später unter Einstellungen → Organisation → Profil um. ./smoke.sh --quick prüft nur die Dienste und die Anmeldung und verändert nichts.

5. Anmelden​

Öffnen Sie die öffentliche URL im Browser und melden Sie sich mit der E-Mail-Adresse und dem Passwort an, die setup.sh ausgegeben hat. Das Passwort steht außerdem in .env als GOAT_ADMIN_PASSWORD.

Hat der Administrator noch keine Organisation (weil Sie sich vor dem Lauf von smoke.sh angemeldet haben), fordert GOAT Sie zuerst auf der Seite Eine neue Organisation einrichten auf, eine anzulegen. Die Seite hat drei Schritte, Name & Region, Profil und Kontakt; klicken Sie zum Abschluss auf Fangen wir an.

Wie Sie weitere Benutzer hinzufügen, lesen Sie unter Benutzer und die Keycloak-Admin-Konsole.

Wo die Dienste liegen​

Alle Dienste teilen sich die eine öffentliche URL und werden über den Pfad unterschieden:

PfadDienst
/Web-App
/apiCore API (/api/v2/…, Health-Check unter /api/healthz)
/geoapiGeoAPI
/processesProcesses
/catalogCatalog (STAC API unter /catalog/stac)
/keycloakAnmeldung (Keycloak); Admin-Konsole unter /keycloak/admin

Mit dem mitgelieferten Objektspeicher führen /goat-uploads und /goat-assets zu Garage, für Uploads und öffentliche Bilder.

Nur Caddy ist von außen erreichbar. PostgreSQL, Redis, die Admin-Schnittstelle von Garage und die Oberfläche von Windmill sind nicht freigegeben; wie Sie Windmill erreichen, steht unter Betrieb.

Nächste Schritte​

  • Laden Sie die Routing-Basisdaten für Ihre Region herunter, damit Einzugsgebiete, Heatmaps und die ÖV-Werkzeuge funktionieren.
  • Richten Sie E-Mail ein, damit GOAT Einladungen und Keycloak E-Mails zum Zurücksetzen des Passworts versenden kann.
  • Schalten Sie Backups ein.