Key Service Server

Dieses Repository ist auf einen schlanken, Docker-first Betrieb ausgerichtet.

Voraussetzungen

  • Docker Engine + Docker Compose Plugin
  • Nginx
  • OpenSSL
  • Optional: UFW (Ports 80/443 werden bei aktivem UFW automatisch freigegeben)

Script Matrix

Core-Skripte (aktiv)

Setup-Skripte (optional, aktiv)

Legacy-Skripte (entfernt)

  • start-stack-on-boot.sh (durch direkten systemd-ExecStart auf gitea.sh ersetzt)
  • provision_instance.sh im Repo-Root (Duplikat, Website-Version ist Single Source)
  • Website/run.sh (alt, nicht Teil des aktuellen Flows)
  • Website/test.sh (alt, nicht Teil des aktuellen Flows)

Core Betrieb

Docker Services

Datei: gitea.sh

Befehle:

  • sudo ./gitea.sh start
  • sudo ./gitea.sh stop
  • sudo ./gitea.sh restart
  • sudo ./gitea.sh status

Wichtige Ports:

  • Gitea intern: 127.0.0.1:3001
  • Gitea SSH: 2222
  • Website Upstream: 4999

Nginx

Datei: nginx.sh

Befehle:

  • sudo ./nginx.sh apply
  • sudo ./nginx.sh disable
  • sudo ./nginx.sh deactivate

Nginx-Templates:

Inventarsystem Instanzen

Admin-Oberfläche:

  • Route: /admin/instances
  • Menu: Schul-Instanzen

Provisioning-Flow:

  1. Admin wählt Nutzer, Schule, Version und optional Subdomain.
  2. Backend ruft Website/provision_instance.sh auf.
  3. Provisioning installiert release-basiert aus GitHub-Releases.
  4. Wenn verfügbar, wird docker-compose-multitenant.yml bevorzugt genutzt.
  5. Instanzstatus wird in school_instances gespeichert.

Wichtige Website-Variablen:

Berechtigungen für Provisioning:

  • Docker-Zugriff
  • Schreibrechte auf /etc/nginx/sites-available und /etc/nginx/sites-enabled
  • nginx -t und nginx reload/signal-Rechte

Admin Homepage: Live-Logs

Die Admin-Seite unter /admin/system zeigt jetzt Live-Logs direkt im Frontend.

Enthaltene Quellen:

  • Core Docker Logs (website + mongodb)
  • invario-hosts-sync.service
  • invario-stack-autostart.service
  • nginx.service

Verhalten:

  • Auto-Refresh alle 20 Sekunden
  • Manuelles Aktualisieren per Button
  • Auswahl der Log-Quelle per Dropdown

Hinweis:

  • Wenn die Website ohne Zugriff auf systemd/journalctl läuft (z. B. in eingeschränkten Containern), bleiben Core-Docker-Logs verfügbar, während Service-Logs als nicht verfügbar angezeigt werden können.

Betriebsmodi Website

Beispiel Production:

cd Website
export INSTANCE_PARENT_DOMAIN=example.de
export INSTANCE_WILDCARD_CERT_FILE=/etc/nginx/certs/wildcard.example.de.crt
export INSTANCE_WILDCARD_KEY_FILE=/etc/nginx/certs/wildcard.example.de.key
./launch_prod.sh

Empfohlener Ablauf

  1. sudo ./gitea.sh start
  2. sudo ./nginx.sh apply
  3. sudo ./gitea.sh status

Erstinstallation (automatisiert)

Für eine neue Maschine kann die Erstinstallation in einem Schritt ausgeführt werden:

sudo ./setup-first-install.sh

Standardmäßig macht das Skript:

  1. Startet den Stack über gitea.sh.
  2. Wendet nginx.sh apply an.
  3. Installiert den Hosts-Sync-systemd-Service.
  4. Installiert den Stack-Autostart-systemd-Service.

Optionen:

  • --skip-start
  • --skip-nginx
  • --skip-hosts-sync
  • --skip-autostart

Quick Verify

sudo ./gitea.sh status
sudo systemctl status invario-hosts-sync --no-pager
sudo systemctl status invario-stack-autostart --no-pager
S
Description
No description provided
Readme 20 MiB
Languages
HTML 58.2%
Python 33.6%
JavaScript 6.1%
Shell 1.8%
Dockerfile 0.3%