POST /api/publish: rendert SiteSnapshot->HTML in _staging_new/, atomic swap -> live/ (rename, ein Syscall). publicsite-nginx:alpine serviert live/ read-only auf Port 8081. Shared Volume api(rw)/publicsite(ro). Manager bleibt LAN-only. 5 neue Tests (atomic swap, UTF-8, mehrfach), 184/184 gruen. compose config OK. Vhost-Snippet + web-deploy.md (Deutsch) beigelegt; <DOMAIN> wartet auf Julian.
30 lines
938 B
Plaintext
30 lines
938 B
Plaintext
# GerbilManager — publicsite nginx (WEB-2)
|
|
# Serviert die statische oeffentliche Seite aus dem live/-Verzeichnis des Shared Volumes.
|
|
# SICHERHEIT: Kein Proxy auf die API, kein Zugriff auf den Manager.
|
|
server {
|
|
listen 80;
|
|
root /usr/share/nginx/html/live;
|
|
index index.html;
|
|
charset utf-8;
|
|
|
|
# Alle Seiten: no-cache (Aenderungen sofort sichtbar nach Veroeffentlichen)
|
|
location / {
|
|
try_files $uri $uri/index.html =404;
|
|
add_header Cache-Control "no-cache, must-revalidate";
|
|
add_header X-Content-Type-Options "nosniff";
|
|
add_header X-Frame-Options "SAMEORIGIN";
|
|
}
|
|
|
|
# CSS/Bilder: kurze TTL (1 Tag)
|
|
location ~* \.(css|png|jpg|jpeg|gif|ico|webp|svg)$ {
|
|
try_files $uri =404;
|
|
expires 1d;
|
|
add_header Cache-Control "public, max-age=86400";
|
|
}
|
|
|
|
# Kein Zugriff auf Staging-Verzeichnisse
|
|
location ~ ^/_(staging_new|old)/ {
|
|
return 403;
|
|
}
|
|
}
|