Add automated test-environment deploy via SCP with nginx reverse proxy, domain names and SSL (certbot) setup

Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
2026-07-24 15:52:16 +02:00
co-authored by Junie
parent a437bad95b
commit 1ffe884eba
9 changed files with 273 additions and 61 deletions
@@ -0,0 +1,55 @@
# 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;
}
}
@@ -0,0 +1,56 @@
# Voorbeeldconfiguratie voor de nginx reverse proxy op de andere Raspberry Pi
# (degene die wél vanaf het internet bereikbaar is en het binnenkomende verkeer
# doorstuurt naar de webserver-Pi op 192.168.1.103:8080) — voor de TESTOMGEVING,
# bereikbaar via het domein test.slpsoftware.nl.
#
# Kopieer dit bestand handmatig naar bijvoorbeeld
# /etc/nginx/sites-available/slpsoftware-test.conf op de reverse-proxy-Pi,
# maak een symlink in sites-enabled, en herlaad nginx.
#
# SSL-certificaat: net als voor de productiesite wordt dit aangevraagd met
# 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.
server {
listen 80;
listen [::]:80;
server_name test.slpsoftware.nl;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
# 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: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;
}
}
@@ -0,0 +1,39 @@
# Voorbeeldconfiguratie voor de nginx server op de Raspberry Pi die de
# gebouwde react-frontend (dist/) daadwerkelijk serveert.
#
# 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.
#
# 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:8080;
listen [::]:8080;
server_name _;
root /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;
}