diff --git a/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/README.md b/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/README.md new file mode 100644 index 0000000..46f7250 --- /dev/null +++ b/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/README.md @@ -0,0 +1,26 @@ +# Live Configs + +Deze map bevat **gecorrigeerde kopieën** van de daadwerkelijk op de Raspberry Pi's +draaiende nginx-configuratiebestanden, zoals doorgenomen en gefixt op 2026-07-27. + +In tegenstelling tot de `*.example`-bestanden een map hoger (die generieke, minimale +sjablonen zijn om een nieuwe omgeving vanaf nul op te zetten), zijn dit snapshots van +bestanden die specifiek voor déze Pi's gelden — inclusief zaken die niet bij de +react-frontend-feature horen (bv. de mail/iRedAdmin-proxying in `slpsoftware.conf`). + +**Deze bestanden worden niet automatisch gesynchroniseerd met de Pi's.** Als je op de +Pi's iets aanpast, is dit bestand pas weer correct nadat je de wijziging hier ook +handmatig doorvoert (of andersom: kopieer bij twijfel altijd eerst de live versie van +de Pi hierheen voordat je hem hier aanpast). + +## Bestanden + +| Bestand | Waar het hoort | Wat er is gefixt (2026-07-27) | +|---|---|---| +| `slpsoftware-analytics.conf` | pi-entry (reverse-proxy), `/etc/nginx/sites-available/` | Acme-challenge-location verplaatst van het poort-80-blok naar het 443-blok (renewal zou anders stilzwijgend falen); listen-volgorde 443/[::]:443 rechtgezet. | +| `slpsoftware-test-webserver.conf` | pi-main (webserver), `/etc/nginx/sites-available/` | Ontbrekende `error_log`/`access_log`-regels toegevoegd; misleidende comment over "alleen intern IP" vervangen door een correcte toelichting (luistert bewust op alle interfaces, consistent met de rest). | +| `slpsoftware.conf` | pi-entry (reverse-proxy), `/etc/nginx/sites-available/` | Acme-challenge-location toegevoegd aan beide 443-blokken (ontbrak volledig); `/sentry-tunnel`-proxy toegevoegd aan het slpsoftware.nl/www-blok (ontbrak volledig, dus Sentry-events vanuit productie werden niet getunneld); iredadmin/mail-regex aangescherpt (`^\/(iredadmin\|mail)(\/\|$)`) om valse matches te voorkomen. | + +Zie ook: `../deployment-instructions.md` en `../deployment-plan.md` voor de bredere +context, en `../production-nginx.conf.example` / `../production-nginx.conf.post-certbot.example` +voor de generieke, react-frontend-only variant zonder de mail/iRedAdmin-onderdelen. diff --git a/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/slpsoftware-analytics.conf b/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/slpsoftware-analytics.conf new file mode 100644 index 0000000..5123603 --- /dev/null +++ b/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/slpsoftware-analytics.conf @@ -0,0 +1,43 @@ +server { + + server_name analytics.slpsoftware.nl; + + error_log /var/log/nginx/slpsoftware-analytics_error.log; + access_log /var/log/nginx/slpsoftware-analytics_access.log; + + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } + + location / { + proxy_pass http://192.168.1.103:3001; + + 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/analytics.slpsoftware.nl/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/analytics.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 = analytics.slpsoftware.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + listen 80; + listen [::]:80; + + server_name analytics.slpsoftware.nl; + + return 404; # managed by Certbot + + +} diff --git a/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/slpsoftware-test-webserver.conf b/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/slpsoftware-test-webserver.conf new file mode 100644 index 0000000..a87eb07 --- /dev/null +++ b/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/slpsoftware-test-webserver.conf @@ -0,0 +1,31 @@ +server { + # Luistert op alle interfaces (net als de andere sites op deze Pi); deze + # Pi is sowieso niet vanaf internet bereikbaar, dus dit is bewust en consistent. + listen 80; + listen [::]:80; + + server_name test.slpsoftware.nl; + + error_log /var/log/nginx/slpsoftware-test-webserver_error.log; + access_log /var/log/nginx/slpsoftware-test-webserver_access.log; + + root /mnt/storage1/www/html/test/slpsoftware; + index index.html; + + # De React-app gebruikt client-side routing (React Router), dus onbekende + # paden moeten terugvallen op index.html in plaats van een 404 te geven. + location / { + try_files $uri $uri/ /index.html; + } + + # Statische assets mogen langer gecachet worden. + location ~* \.(?:css|js|svg|png|jpg|jpeg|gif|ico|woff2?)$ { + try_files $uri =404; + expires 7d; + add_header Cache-Control "public"; + } + + # 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; +} diff --git a/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/slpsoftware.conf b/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/slpsoftware.conf new file mode 100644 index 0000000..9a7a48d --- /dev/null +++ b/aidlc-docs/features/react-frontend/operations/deployment/nginx/live-configs/slpsoftware.conf @@ -0,0 +1,95 @@ +server { + listen [::]:443 ssl; # managed by Certbot + listen 443 ssl; # managed by Certbot + server_name slpsoftware.nl www.slpsoftware.nl; + + access_log /var/log/nginx/slpsoftware_access.log; + error_log /var/log/nginx/slpsoftware_error.log; + + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } + + # Sentry "tunnel" endpoint (zie src/main.tsx's Sentry.init tunnel-optie en + # de toelichting in reverse-proxy-nginx.conf.example) — voorkomt dat + # ad-blockers Sentry-events blokkeren door ze via ons eigen domein te + # tunnelen. VITE_SENTRY_DSN is bewust gedeeld tussen test en productie + # (één Sentry-project, environment-tag onderscheidt ze), dus dezelfde + # org-/project-id als de testomgeving is hier correct. + 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; + } + + location ~ ^\/(iredadmin|mail)(\/|$) { + proxy_pass https://192.168.1.104:443; + 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; + } + + 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; + } + + ssl_certificate /etc/letsencrypt/live/slpsoftware.nl/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/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 { + listen [::]:443 ssl; # managed by Certbot + listen 443 ssl; # managed by Certbot + + server_name mail.slpsoftware.nl; + + access_log /var/log/nginx/mail.slpsoftware_access.log; + error_log /var/log/nginx/mail.slpsoftware_error.log; + + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } + + location / { + proxy_pass https://192.168.1.104:443; # Odroid C4 hosting iRedMail + 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; + } + + ssl_certificate /etc/letsencrypt/live/mail.slpsoftware.nl/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/mail.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 { + listen 80; + listen [::]:80; + + server_name slpsoftware.nl www.slpsoftware.nl mail.slpsoftware.nl; + + if ($host = mail.slpsoftware.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + if ($host = www.slpsoftware.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + if ($host = slpsoftware.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + return 404; # managed by Certbot +}