Aiirondev 86fafb7c56 Fail to include the If function for the Check box
These changes are temporary to realy get behind what the Problem is but the process has to be reviewed to get the Website functional back again.
2026-10-21 17:09:07 +00:00
2026-10-03 00:33:57 +02:00

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: 127.0.0.1:4999
  • MongoDB Host-Port: 127.0.0.1:27018 (oder MONGO_PUBLISHED_PORT)

Hinweis: Die Website nutzt in Docker Compose intern den Service-Namen mongodb als MongoDB-Host. Wenn du die Website lokal mit python oder außerhalb des Containers startest, muss MONGO_URI auf einen hostzugänglichen MongoDB-Endpunkt zeigen. Standardmäßig ist MongoDB am Host auf 27018 veröffentlicht (konfigurierbar via MONGO_PUBLISHED_PORT).

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.

Startskript Website

Neues: Start-Health-Check im launch.sh

Website/launch.sh führt jetzt vor dem Build eine kurze Prüfung durch und wartet nach dem Start auf eine erreichbare HTTP-Antwort:

  • Vor dem Build wird geprüft, ob gunicorn.conf.py im Website/-Verzeichnis vorhanden ist; falls nicht, bricht das Skript mit einer erklärenden Fehlermeldung ab.
  • Nach docker compose up -d wartet das Skript bis zu 60 Sekunden (Intervall 2s) auf einen erfolgreichen HTTP-Request (/) auf 127.0.0.1:4999.
  • Schlägt der Health-Check fehl, sammelt das Skript automatisch folgende Diagnosedaten und gibt Hinweise aus:
    • docker compose ps
    • docker logs --tail 200 website-website-1

Dies hilft, wiederkehrende Probleme (fehlende Dateien, fehlerhafte Container-Starts, nginx-Fehlkonfiguration) schneller zu finden.

Empfohlene manuelle Prüfbefehle (bei Problemen):

# Status aller Container (zeigt Port-Mappings)
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'

# Prüfen, ob Host auf 4999 lauscht
ss -ltnp | grep 4999 || true

# Direktes Request vom Host (verbose)
curl -v http://127.0.0.1:4999/ --max-time 10

# Logs des Website-Containers (letzte 200 Zeilen)
docker logs --tail 200 website-website-1

# Testen von innerhalb des Containers (falls curl nicht installiert, nutze wget)
docker exec -it website-website-1 curl -v http://127.0.0.1:4999/ || \
  docker exec -it website-website-1 wget -qO- http://127.0.0.1:4999/

Wenn du möchtest, passe ich das Timeout oder den Health-Endpoint (/health) an.

Beispiel Start:

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

SEO & LLM-Optimierung

Die Website ist für Suchmaschinen und LLM-Scraper optimiert:

  • Meta-Tags & OpenGraph: Jede Seite enthält sinnvolle <meta name="description">, OpenGraph- und Twitter-Tags sowie einen Canonical-Link. Die Startseite und wichtige Unterseiten haben eine eigene meta_description.
  • JSON-LD: Die Startseite enthält strukturierte Daten (Schema.org WebSite/Organization) als JSON-LD.
  • Maschinenlesbare Endpunkte:
    • /health — gibt { "status": "ok", "time": ... } zurück (Status 200), geeignet für Health-Checks und Monitoring.
    • /sitemap.xml — maschinenlesbare Sitemap für Suchmaschinen, dynamisch generiert.
    • /robots.txt — erlaubt Crawling, verweist auf Sitemap, blockiert /admin/ und Uploads.
  • Server-Side Rendering: Alle wichtigen Inhalte sind serverseitig gerendert und ohne JavaScript zugänglich.

Beispiel für Health-Check:

curl -i http://127.0.0.1:4999/health

Beispiel für Sitemap:

curl -i http://127.0.0.1:4999/sitemap.xml

robots.txt Beispiel:

User-agent: *
Disallow: /admin/
Disallow: /static/uploads/
Allow: /
Sitemap: /sitemap.xml

Hinweis:

  • Die SEO-Meta-Tags können pro Seite in den Templates überschrieben werden (meta_description).
  • Die Sitemap kann bei Bedarf um weitere Seiten ergänzt werden.

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 77 MiB
Languages
HTML 57.2%
Python 34.4%
JavaScript 4.8%
Shell 3.3%
Dockerfile 0.3%