Deployment: - custom-app.compose.yaml: self-contained Compose fuer TrueNAS "Custom App" (absolute Host-Bind-Pfade, postgres:18, pull_policy always, Port 8090) - scripts/truenas-deploy.sh: Host-Skript create/redeploy via midclt (App bleibt unter Apps sichtbar) inkl. Image-Pull + Health-Check - ci.yml Deploy-Job: laeuft auf ubuntu-latest-Runner, kopiert Deploy-Dateien per SSH auf den NAS-Host und triggert truenas-deploy.sh (statt runs-on goldeye) - compose.yaml/.env.example: postgres:18 (Locale-Match zur Quell-DB), Port 8090 - .gitignore: .agents/, tools/rag/, deploy/truenas/.env (Secrets/Scratch) Aufgelaufene Feature-Arbeit (verified/Freeze, Migrationen, Import-Triage): - GerbilOverride/VerifiedGerbil-Endpoints + GerbilSnapshotService + Tests - EF-Migrationen (ShowInChronicle, Stillborn, BirthOrder, ManualFlag, DSGVO) - Frontend VerifizierteTierePage + verified-API + e2e-Spec - diverse Import-/Triage-Skripte und -Tests Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
64 lines
2.8 KiB
Plaintext
64 lines
2.8 KiB
Plaintext
# GerbilManager — Vhost fuer die oeffentliche Webseite (WEB-2)
|
|
# ===========================================================
|
|
# Einzufuegen in den bestehenden nginx-Reverse-Proxy (TrueNAS-App "ix-webserver"):
|
|
# Datei ablegen unter: /mnt/JailStorage/DockerVolumes/nginx/config/gerbil-public.conf
|
|
# (das ist der conf.d-Mount des Proxys; dort liegen auch git/cloud/rismer.de)
|
|
# Danach: docker exec ix-webserver-webserver-1 nginx -s reload
|
|
#
|
|
# WICHTIG (containerisierter Proxy): das Backend MUSS ueber die Host-LAN-IP
|
|
# angesprochen werden (192.168.2.115), NICHT 127.0.0.1 — 127.0.0.1 waere im
|
|
# Proxy-Container er selbst. Der publicsite-Container veroeffentlicht Port 8081
|
|
# auf dem Host (PUBLICSITE_PORT in deploy/truenas/.env).
|
|
#
|
|
# SICHERHEIT: Dieser Vhost zeigt NUR auf den publicsite-Container (statische
|
|
# oeffentliche Seite). Der Manager (API + Frontend) bleibt LAN-only und ist von
|
|
# aussen NICHT erreichbar (keine Authentifizierung).
|
|
#
|
|
# <DOMAIN> ersetzen (z. B. rennmaus.rismer.de). DNS-Eintrag auf die oeffentliche
|
|
# IP + Router-Weiterleitung 80/443 -> 11080/11443 muss wie bei den anderen
|
|
# rismer.de-Subdomains vorhanden sein.
|
|
|
|
# HTTP: ACME-Challenge zulassen + auf HTTPS umleiten (Muster der anderen Vhosts)
|
|
server {
|
|
listen 80;
|
|
listen [::]:80;
|
|
server_name <DOMAIN>;
|
|
|
|
location /.well-known/acme-challenge/ {
|
|
root /usr/share/nginx/letsencrypt;
|
|
}
|
|
location / {
|
|
return 301 https://$host$request_uri;
|
|
}
|
|
}
|
|
|
|
# HTTPS: Reverse-Proxy auf den publicsite-Container (Host-Port 8081)
|
|
server {
|
|
listen 443 ssl;
|
|
listen [::]:443 ssl;
|
|
server_name <DOMAIN>;
|
|
|
|
# Let's Encrypt (gleicher Cert-Store wie die uebrigen rismer.de-Vhosts).
|
|
# Zertifikat anfordern, z. B.:
|
|
# docker exec ix-webserver-webserver-1 certbot --nginx -d <DOMAIN>
|
|
# oder webroot: certbot certonly --webroot -w /usr/share/nginx/letsencrypt -d <DOMAIN>
|
|
ssl_certificate /etc/letsencrypt/live/<DOMAIN>/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/<DOMAIN>/privkey.pem;
|
|
|
|
# HSTS gehoert auf die TLS-terminierende Ebene (hier), nicht in den HTTP-only
|
|
# publicsite-Container. Erst aktivieren, wenn HTTPS sicher steht (max-age dann ggf. erhoehen).
|
|
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
|
# Die uebrigen Security-Header (CSP, X-Content-Type-Options, X-Frame-Options,
|
|
# Referrer-Policy, Permissions-Policy) liefert der publicsite-nginx bereits mit und
|
|
# werden vom Proxy durchgereicht (siehe nginx/publicsite.conf).
|
|
|
|
location / {
|
|
proxy_pass http://192.168.2.115:8081;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_buffering off; # kleine statische HTML-Seiten
|
|
}
|
|
}
|