diff options
Diffstat (limited to 'deploy')
| -rw-r--r-- | deploy/aendggner-web.service | 41 | ||||
| -rw-r--r-- | deploy/nginx-aendggner.conf | 42 |
2 files changed, 25 insertions, 58 deletions
diff --git a/deploy/aendggner-web.service b/deploy/aendggner-web.service deleted file mode 100644 index f87bbb8..0000000 --- a/deploy/aendggner-web.service +++ /dev/null @@ -1,41 +0,0 @@ -# systemd-Unit für den ÄndGgner-Webserver. -# -# Installation (Beispiel): -# sudo cp deploy/aendggner-web.service /etc/systemd/system/ -# sudo useradd --system --home /opt/aendggner --shell /usr/sbin/nologin aendggner -# sudo cp -r . /opt/aendggner && sudo chown -R aendggner:aendggner /opt/aendggner -# sudo systemctl daemon-reload -# sudo systemctl enable --now aendggner-web -# -# Erwartet, dass zuvor "mvn package" gelaufen ist, sodass target/aendggner-*.jar -# und target/libs/* existieren. - -[Unit] -Description=AendGgner Web-App -After=network.target - -[Service] -Type=simple -User=aendggner -Group=aendggner -WorkingDirectory=/opt/aendggner -ExecStart=/bin/sh -c 'exec java -cp "target/aendggner-*.jar:target/libs/*" eu.mulk.aendggner.web.WebMain' -Environment=AENDGGNER_WEB_PORT=8080 -Environment=AENDGGNER_WEB_BIND=127.0.0.1 -Restart=on-failure -RestartSec=5 - -# Ressourcen-Obergrenzen: hält den Dienst auf einem kleinen Server in Schach, -# selbst wenn die Anwendungs- und Proxy-seitigen Limits einmal nicht greifen. -MemoryMax=512M -CPUQuota=150% -TasksMax=128 - -# Härtung -NoNewPrivileges=true -PrivateTmp=true -ProtectSystem=strict -ProtectHome=true - -[Install] -WantedBy=multi-user.target diff --git a/deploy/nginx-aendggner.conf b/deploy/nginx-aendggner.conf index f4667fb..46eacb5 100644 --- a/deploy/nginx-aendggner.conf +++ b/deploy/nginx-aendggner.conf @@ -1,9 +1,8 @@ -# Reverse-Proxy-Vorlage für den ÄndGgner-Webserver. Übernimmt TLS-Terminierung und -# Rate-Limiting; der Java-Prozess selbst bindet nur an 127.0.0.1 (siehe aendggner-web.service). +# Vorlage für die Auslieferung der ÄndGgner-Browserfassung. Es gibt keinen +# Anwendungsprozess mehr: Der Server liefert nur statische Dateien aus +# (Inhalt von target/web/), gerechnet wird im Browser. # -# Vor dem Einsatz anpassen: server_name, ssl_certificate(_key) (z. B. via certbot). - -limit_req_zone $binary_remote_addr zone=aendggner:10m rate=10r/m; +# Vor dem Einsatz anpassen: server_name, ssl_certificate(_key) (z. B. via certbot), root. server { listen 80; @@ -20,20 +19,29 @@ server { ssl_certificate /etc/letsencrypt/live/aendggner.example.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/aendggner.example.org/privkey.pem; - # Muss zum Upload-Limit von UploadHandler (MAX_BODY_BYTES, aktuell 40 MB) passen. - client_max_body_size 40m; + # Inhalt von target/web/ — ohne aendggner.js.wat, das nur ein Zwischenschritt + # des Übersetzers ist. + root /var/www/aendggner; + index index.html; - location / { - limit_req zone=aendggner burst=5 nodelay; + # Ohne diesen Typ lehnt der Browser die Streaming-Instanziierung des Moduls ab. + types { + application/wasm wasm; + } - proxy_pass http://127.0.0.1:8080; - 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; + gzip on; + gzip_types application/wasm application/javascript text/css text/html; + gzip_min_length 1024; - # Etwas großzügiger als der 30s-Timeout der Anwendung, damit deren eigene - # 504-Antwort den Nutzer erreicht statt eines nginx-eigenen Timeouts. - proxy_read_timeout 35s; + # Das Wasm-Modul ist einige Megabyte groß und ändert sich nur mit einer neuen + # Fassung; vorkomprimierte .gz/.br daneben zu legen lohnt sich (ngx_brotli bzw. + # gzip_static). + location ~ \.(wasm|js|css)$ { + expires 7d; + add_header Cache-Control "public"; + } + + location / { + try_files $uri $uri/ =404; } } |
