diff --git a/aidlc-docs/features/react-frontend/audit.md b/aidlc-docs/features/react-frontend/audit.md index af7ea15..f155929 100644 --- a/aidlc-docs/features/react-frontend/audit.md +++ b/aidlc-docs/features/react-frontend/audit.md @@ -588,3 +588,15 @@ **Context**: Post-workflow follow-up (feature already marked Complete); continues the `feature/analytics_uptime_dashboard` branch, refining the Umami deployment approach before it has been executed on the Pi. Documentation-only change (no code/build impact). --- + +## Post-Completion Follow-up: Umami External Port Changed (3000 → 3001) to Avoid Conflict with Gitea + +**Timestamp**: 2026-07-25T22:39:00Z + +**User Input**: "de poort 3000 is la in gebruik. volgens mij door gitea: Error: unable to start container ...: rootlessport listen tcp 192.168.1.103:3000: bind: address already in use" + +**AI Response**: "Confirmed the reported cause: Gitea already occupies port 3000 system-wide on the same Pi, so even though Umami's `podman-compose.yml.example` binds specifically to `192.168.1.103:3000` (not `0.0.0.0`), it still conflicts because Gitea's own binding already covers that IP/port combination. Changed the external port mapping to `192.168.1.103:3001:3000` (container still listens internally on 3000), and updated all references accordingly: `nginx/analytics-nginx.conf.example` (`proxy_pass` target + comments), `monitoring-setup.md` (decision summary), and `umami-setup.md` (heartbeat-check `curl` command, with an explanatory note)." + +**Context**: Post-workflow follow-up (feature already marked Complete); continues the `feature/analytics_uptime_dashboard` branch, fixing a port conflict discovered before the Umami deployment has been executed on the Pi. Documentation/example-config-only change (no code/build impact). + +--- diff --git a/aidlc-docs/features/react-frontend/operations/deployment/nginx/analytics-nginx.conf.example b/aidlc-docs/features/react-frontend/operations/deployment/nginx/analytics-nginx.conf.example index 092e0d5..9c86891 100644 --- a/aidlc-docs/features/react-frontend/operations/deployment/nginx/analytics-nginx.conf.example +++ b/aidlc-docs/features/react-frontend/operations/deployment/nginx/analytics-nginx.conf.example @@ -3,9 +3,11 @@ # Umami-analyticsdashboard bereikbaar te maken via analytics.slpsoftware.nl. # # Umami zelf draait als podman-container op de webserver-Pi (Pi Main, -# 192.168.1.103:3000 — zie ../umami/podman-compose.yml.example) en heeft dus +# 192.168.1.103:3001 — zie ../umami/podman-compose.yml.example) en heeft dus # GEEN eigen nginx-configuratie op die Pi nodig; Umami serveert zijn eigen -# dashboard + tracking-script rechtstreeks via die poort. +# dashboard + tracking-script rechtstreeks via die poort. Let op: de externe +# poort is bewust 3001 (niet het gebruikelijke 3000), omdat Gitea op diezelfde +# Pi al poort 3000 systeembreed bezet. # # Kopieer dit bestand handmatig naar bijvoorbeeld # /etc/nginx/sites-available/slpsoftware-analytics.conf op de reverse-proxy-Pi, @@ -47,7 +49,7 @@ server { ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { - proxy_pass http://192.168.1.103:3000; + proxy_pass http://192.168.1.103:3001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; diff --git a/aidlc-docs/features/react-frontend/operations/deployment/umami/podman-compose.yml.example b/aidlc-docs/features/react-frontend/operations/deployment/umami/podman-compose.yml.example index 3bbadbf..f48537a 100644 --- a/aidlc-docs/features/react-frontend/operations/deployment/umami/podman-compose.yml.example +++ b/aidlc-docs/features/react-frontend/operations/deployment/umami/podman-compose.yml.example @@ -17,11 +17,14 @@ services: image: docker.umami.is/umami-software/umami:postgresql-latest # Alleen op het interne (LAN) IP van deze Pi binden, niet op 0.0.0.0 — zelfde # aanpak als webserver-nginx.conf.example, zodat deze poort niet per ongeluk - # vanaf buiten het netwerk bereikbaar is. De reverse-proxy-Pi stuurt - # analytics.slpsoftware.nl door naar 192.168.1.103:3000 (zie + # vanaf buiten het netwerk bereikbaar is. Externe poort is 3001 (i.p.v. het + # gebruikelijke 3000), omdat Gitea op dezelfde Pi al poort 3000 systeembreed + # bezet (ook op dit interne IP, ongeacht dat Umami een specifiek IP opgeeft). + # De container zelf luistert intern nog gewoon op 3000. De reverse-proxy-Pi + # stuurt analytics.slpsoftware.nl door naar 192.168.1.103:3001 (zie # ../nginx/analytics-nginx.conf.example). ports: - - "192.168.1.103:3000:3000" + - "192.168.1.103:3001:3000" environment: DATABASE_URL: postgresql://umami:${POSTGRES_PASSWORD}@db:5432/umami DATABASE_TYPE: postgresql diff --git a/aidlc-docs/features/react-frontend/operations/monitoring/monitoring-setup.md b/aidlc-docs/features/react-frontend/operations/monitoring/monitoring-setup.md index d7ff5a5..eaeb7f9 100644 --- a/aidlc-docs/features/react-frontend/operations/monitoring/monitoring-setup.md +++ b/aidlc-docs/features/react-frontend/operations/monitoring/monitoring-setup.md @@ -41,7 +41,8 @@ Both the console and Sentry are now active (original Question 3 resolved as a co ### Website analytics — decided: self-hosted Umami **Decided**: self-hosted Umami, running via Podman on the webserver Pi (Pi Main, -`192.168.1.103:3000`), reachable for the dashboard itself via `analytics.slpsoftware.nl` +`192.168.1.103:3001` — note: not the default 3000, since Gitea already occupies +that port on the same Pi), reachable for the dashboard itself via `analytics.slpsoftware.nl` (reverse-proxied + SSL via certbot, same pattern as `test.slpsoftware.nl`). Chosen over GA4 for privacy-friendliness (typically no cookie banner needed) and full self-hosted control, and over a hosted Umami/Plausible plan to avoid recurring cost. diff --git a/aidlc-docs/features/react-frontend/operations/monitoring/umami-setup.md b/aidlc-docs/features/react-frontend/operations/monitoring/umami-setup.md index 64c3ecb..48dc637 100644 --- a/aidlc-docs/features/react-frontend/operations/monitoring/umami-setup.md +++ b/aidlc-docs/features/react-frontend/operations/monitoring/umami-setup.md @@ -73,9 +73,12 @@ onder een eigen `umami`-user te draaien in plaats van je eigen hoofdaccount: cd ~/umami podman-compose up -d ``` -4. Controleer dat Umami draait en bereikbaar is op het interne netwerk: +4. Controleer dat Umami draait en bereikbaar is op het interne netwerk. Let op: de + **externe** poort is `3001`, niet het gebruikelijke `3000` — die poort is op deze Pi al + in gebruik door Gitea (`bind: address already in use` bij het opstarten van de + container als je toch `3000` gebruikt): ```bash - curl http://192.168.1.103:3000/api/heartbeat + curl http://192.168.1.103:3001/api/heartbeat ``` Dit zou een JSON-antwoord met `"ok"` moeten teruggeven.