Merge branch 'master' into feature/analytics_uptime_dashboard
# Conflicts: # .env.example # aidlc-docs/features/react-frontend/aidlc-state.md # aidlc-docs/features/react-frontend/audit.md # aidlc-docs/features/react-frontend/operations/monitoring/monitoring-plan.md # aidlc-docs/features/react-frontend/operations/monitoring/monitoring-setup.md # aidlc-docs/features/react-frontend/operations/production-readiness-checklist.md # src/components/RootLayout.tsx # src/vite-env.d.ts
This commit is contained in:
-55
@@ -1,55 +0,0 @@
|
||||
# Voorbeeldconfiguratie voor de nginx reverse proxy op de Raspberry Pi voor de
|
||||
# PRODUCTIEOMGEVING, bereikbaar via het domein slpsoftware.nl.
|
||||
#
|
||||
# LET OP: dit bestand is nog niet in gebruik — de productie-deploy is nog niet
|
||||
# geautomatiseerd (zie deployment-plan.md's "Open Item — Productie-deploy Nog
|
||||
# Niet Geautomatiseerd"). Dit voorbeeld ligt hier alvast klaar zodat het
|
||||
# domein en SSL-certificaat (net als bij de testomgeving via certbot) bekend
|
||||
# zijn wanneer de productie-deploy wordt opgezet. Vervang <PROD_WEBSERVER_IP>
|
||||
# en <PROD_WEBSERVER_POORT> door de daadwerkelijke waarden zodra die bekend
|
||||
# zijn (mogelijk dezelfde webserver-Pi op een ander poortnummer/pad, of een
|
||||
# aparte Pi/host).
|
||||
#
|
||||
# Kopieer dit bestand handmatig naar bijvoorbeeld
|
||||
# /etc/nginx/sites-available/slpsoftware-production.conf op de reverse-proxy-Pi,
|
||||
# maak een symlink in sites-enabled, en herlaad nginx.
|
||||
#
|
||||
# SSL-certificaat aanvragen met certbot (Let's Encrypt), nadat het DNS-record
|
||||
# voor slpsoftware.nl naar het publieke IP van deze Pi wijst:
|
||||
# sudo certbot --nginx -d slpsoftware.nl -d www.slpsoftware.nl
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
|
||||
server_name slpsoftware.nl www.slpsoftware.nl;
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/certbot;
|
||||
}
|
||||
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
|
||||
server_name slpsoftware.nl www.slpsoftware.nl;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/slpsoftware.nl/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/slpsoftware.nl/privkey.pem;
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
||||
|
||||
location / {
|
||||
proxy_pass http://<PROD_WEBSERVER_IP>:<PROD_WEBSERVER_POORT>;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
+53
-25
@@ -11,46 +11,74 @@
|
||||
# certbot (Let's Encrypt) rechtstreeks op deze reverse-proxy-Pi, bijvoorbeeld:
|
||||
# sudo certbot --nginx -d test.slpsoftware.nl
|
||||
# Zorg dat het DNS-record voor test.slpsoftware.nl al naar het publieke IP van
|
||||
# deze Pi wijst voordat je certbot draait. Certbot vult automatisch het
|
||||
# onderstaande `listen 443 ssl` server-block aan (of maakt het aan) en
|
||||
# schrijft de HTTP-server hieronder om naar een 301-redirect. Het onderstaande
|
||||
# is dus vooral illustratief voor de eindsituatie.
|
||||
|
||||
# HTTP: alleen gebruikt voor de Let's Encrypt ACME-challenge en om door te
|
||||
# verwijzen naar HTTPS. Na het draaien van certbot ziet dit block er zo uit.
|
||||
# deze Pi wijst voordat je certbot draait.
|
||||
#
|
||||
# Dit is de daadwerkelijk in gebruik zijnde configuratie op de reverse-proxy-Pi,
|
||||
# zoals door certbot gegenereerd/beheerd. Het HTTP-server-block onderaan (dat
|
||||
# doorverwijst naar HTTPS, behalve voor de ACME-challenge) en de #-commentaren
|
||||
# "managed by Certbot" zijn automatisch door certbot toegevoegd/aangepast.
|
||||
#
|
||||
# LET OP - gevonden foutje: de header hieronder heet `X-Real-IP` (met
|
||||
# koppelteken), niet `X-Real_IP` (met underscore). Een header met een
|
||||
# underscore is geen geldige/herkenbare naam voor de standaard `$http_x_real_ip`-
|
||||
# achtige verwerking; nginx stuurt de header wel door zoals opgegeven, maar
|
||||
# de ontvangende applicatie/module verwacht het koppelteken-formaat. Corrigeer
|
||||
# dit op de Pi zelf naar `X-Real-IP` zodra je de config daar aanpast.
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
|
||||
server_name test.slpsoftware.nl;
|
||||
|
||||
error_log /var/log/nginx/slpsoftware-test_error.log;
|
||||
access_log /var/log/nginx/slpsoftware-test_access.log;
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/certbot;
|
||||
}
|
||||
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
# Sentry "tunnel" endpoint (see src/main.tsx's Sentry.init tunnel option).
|
||||
# Browser ad-blockers/privacy extensions commonly block requests that go
|
||||
# straight to *.ingest.<region>.sentry.io (ERR_BLOCKED_BY_CLIENT), since
|
||||
# that looks like third-party tracking. By forwarding this path server-side
|
||||
# to Sentry instead, the browser only ever talks to our own domain
|
||||
# (test.slpsoftware.nl), so it is no longer recognized/blocked as
|
||||
# third-party tracking.
|
||||
#
|
||||
# LET OP: de org-/project-id in de proxy_pass hieronder MOET overeenkomen
|
||||
# met de VITE_SENTRY_DSN die voor DEZE omgeving is ingesteld (de
|
||||
# `VITE_SENTRY_DSN` Gitea repository variable voor de testomgeving). Pas
|
||||
# dit aan als je ooit van Sentry-project/DSN wisselt.
|
||||
location /sentry-tunnel {
|
||||
proxy_pass https://o4511795618185216.ingest.de.sentry.io/api/4511795622838352/envelope/;
|
||||
proxy_set_header Host o4511795618185216.ingest.de.sentry.io;
|
||||
proxy_ssl_server_name on;
|
||||
}
|
||||
}
|
||||
|
||||
# HTTPS: het daadwerkelijke reverse-proxy-verkeer naar de webserver-Pi.
|
||||
server {
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
|
||||
server_name test.slpsoftware.nl;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/test.slpsoftware.nl/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/test.slpsoftware.nl/privkey.pem;
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
||||
|
||||
location / {
|
||||
proxy_pass http://192.168.1.103:80;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
listen 443 ssl; # managed by Certbot
|
||||
listen [::]:443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/test.slpsoftware.nl/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/test.slpsoftware.nl/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
}
|
||||
|
||||
server {
|
||||
if ($host = test.slpsoftware.nl) {
|
||||
return 301 https://$host$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
|
||||
server_name test.slpsoftware.nl;
|
||||
return 404; # managed by Certbot
|
||||
}
|
||||
+14
-9
@@ -3,21 +3,20 @@
|
||||
#
|
||||
# Deze Pi is NIET rechtstreeks vanaf het internet bereikbaar; de andere
|
||||
# Raspberry Pi (met de nginx reverse proxy, zie reverse-proxy-nginx.conf.example)
|
||||
# stuurt inkomend verkeer door naar deze server op het interne netwerk.
|
||||
# stuurt inkomend verkeer door naar deze server op het interne netwerk (poort 80).
|
||||
#
|
||||
# Dit is de daadwerkelijk in gebruik zijnde configuratie op de webserver-Pi.
|
||||
# Kopieer dit bestand handmatig naar bijvoorbeeld
|
||||
# /etc/nginx/sites-available/slpsoftware-test.conf op de webserver-Pi,
|
||||
# maak een symlink in sites-enabled, en herlaad nginx (`sudo nginx -t && sudo systemctl reload nginx`).
|
||||
|
||||
server {
|
||||
# Alleen luisteren op het interne (LAN) IP-adres van deze Pi, niet op 0.0.0.0,
|
||||
# zodat deze poort niet per ongeluk vanaf buiten het netwerk bereikbaar is.
|
||||
listen 192.168.1.103:80;
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
|
||||
server_name _;
|
||||
server_name test.slpsoftware.nl;
|
||||
|
||||
root /html/test/slpsoftware;
|
||||
root /mnt/storage1/www/html/test/slpsoftware;
|
||||
index index.html;
|
||||
|
||||
# De React-app gebruikt client-side routing (React Router), dus onbekende
|
||||
@@ -34,6 +33,12 @@ server {
|
||||
}
|
||||
|
||||
# Doorgeven van het echte client-IP en protocol, afkomstig van de reverse proxy.
|
||||
set_real_ip_from 192.168.1.0/24;
|
||||
real_ip_header X-Forwarded-For;
|
||||
}
|
||||
# Uitgecommentarieerd: de reverse-proxy Pi geeft het echte client-IP al door
|
||||
# via de X-Forwarded-For header hierboven; deze twee directieven zouden nginx
|
||||
# dat IP ook laten gebruiken als "remote address" in de eigen access-log van
|
||||
# deze Pi. Zonder deze regels tonen de logs van deze webserver-Pi het interne
|
||||
# IP van de reverse-proxy Pi als bezoeker-IP (functioneel geen probleem, wel
|
||||
# minder nauwkeurig voor logging/analyse op deze Pi zelf).
|
||||
#set_real_ip_from 192.168.1.0/24;
|
||||
#real_ip_header X-Forwarded-For;
|
||||
}
|
||||
Reference in New Issue
Block a user