Splits Umami website-ID per omgeving in productie-build (was per ongeluk gedeeld)

build-production hergebruikte vars.VITE_UMAMI_WEBSITE_ID van de testbuild,
maar Umami-website-ID's horen bij één specifieke domeinentry in het
dashboard. Zonder deze fix zou productieverkeer in de teststatistieken
terechtkomen. Introduceert VITE_UMAMI_WEBSITE_ID_PRODUCTION als losse Gitea
variable, en documenteert dat er twee aparte Umami-website-entries nodig
zijn (test.slpsoftware.nl / slpsoftware.nl). VITE_UMAMI_SCRIPT_URL en
VITE_SENTRY_DSN blijven bewust gedeeld tussen omgevingen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-27 12:12:13 +02:00
co-authored by Claude Sonnet 5
parent a208aebae0
commit 4bddcbbc50
3 changed files with 37 additions and 19 deletions
+10 -4
View File
@@ -170,11 +170,17 @@ jobs:
- name: Build - name: Build
env: env:
# Zelfde Umami/Sentry-variabelen als de testbuild hierboven, want er # Umami-website-ID's zijn NIET gedeeld tussen omgevingen: elke Umami
# is (nog) geen apart productie-Umami-website-ID of -Sentry-project # "website"-entry (test.slpsoftware.nl vs slpsoftware.nl) heeft een
# gekozen. Splits deze pas op zodra dat nodig blijkt. # eigen ID, anders komt productieverkeer in de teststatistieken
# terecht (of andersom). Vereist dus een eigen Umami-website +
# Gitea-variable VITE_UMAMI_WEBSITE_ID_PRODUCTION — zie umami-setup.md.
VITE_UMAMI_SCRIPT_URL: ${{ vars.VITE_UMAMI_SCRIPT_URL }} VITE_UMAMI_SCRIPT_URL: ${{ vars.VITE_UMAMI_SCRIPT_URL }}
VITE_UMAMI_WEBSITE_ID: ${{ vars.VITE_UMAMI_WEBSITE_ID }} VITE_UMAMI_WEBSITE_ID: ${{ vars.VITE_UMAMI_WEBSITE_ID_PRODUCTION }}
# VITE_SENTRY_DSN wordt wél gedeeld met de testbuild: één Sentry-
# project voor beide omgevingen, VITE_APP_ENV hieronder tagt de
# events al als 'test' vs 'production'. Splits dit pas op als je
# ooit aparte Sentry-projecten per omgeving wilt.
VITE_SENTRY_DSN: ${{ vars.VITE_SENTRY_DSN }} VITE_SENTRY_DSN: ${{ vars.VITE_SENTRY_DSN }}
VITE_APP_ENV: ${{ env.DEPLOY_ENVIRONMENT_PRODUCTION }} VITE_APP_ENV: ${{ env.DEPLOY_ENVIRONMENT_PRODUCTION }}
run: pnpm run build run: pnpm run build
@@ -74,7 +74,10 @@ Productie deployt **nooit** automatisch bij een push naar `master` — alleen vi
4. Vink **`deploy_production`** aan voordat je de run start. 4. Vink **`deploy_production`** aan voordat je de run start.
5. Dit triggert naast de gebruikelijke `build`/`test`/`deploy-test` ook `build-production` en `deploy-production`. 5. Dit triggert naast de gebruikelijke `build`/`test`/`deploy-test` ook `build-production` en `deploy-production`.
Vereist eenmalig vooraf: de Gitea-variable `DEPLOY_PATH_PRODUCTION` (zie boven) en de productie-nginx/SSL-configuratie + webroot-map op de Pi's (zie "Eenmalige Setup — Domeinnaam & DNS"). Vereist eenmalig vooraf:
- De Gitea-variable `DEPLOY_PATH_PRODUCTION` (zie boven).
- De Gitea-variable `VITE_UMAMI_WEBSITE_ID_PRODUCTION` (zie `umami-setup.md` stap 4/5) — zónder deze wordt productieverkeer per ongeluk meegeteld bij de teststatistieken.
- De productie-nginx/SSL-configuratie + webroot-map op de Pi's (zie "Eenmalige Setup — Domeinnaam & DNS").
## Verifying a Deployment ## Verifying a Deployment
1. Bevestig dat de Gitea Actions run succesvol is (alle relevante jobs groen — `deploy-test` altijd, `build-production`/`deploy-production` alleen als je `deploy_production` had aangevinkt). 1. Bevestig dat de Gitea Actions run succesvol is (alle relevante jobs groen — `deploy-test` altijd, `build-production`/`deploy-production` alleen als je `deploy_production` had aangevinkt).
@@ -185,28 +185,36 @@ uit stap 0.3 is hiervoor al gezet, dus deze service blijft ook draaien zonder da
wijzigen na eerste login**). wijzigen na eerste login**).
## 4. Website registreren in Umami en het website-ID ophalen ## 4. Website registreren in Umami en het website-ID ophalen
Maak een **aparte Umami-website-entry per omgeving** aan — test en productie zijn
verschillende domeinen en horen dus niet in dezelfde statistieken te belanden:
1. Log in op `https://analytics.slpsoftware.nl` en wijzig direct het standaardwachtwoord. 1. Log in op `https://analytics.slpsoftware.nl` en wijzig direct het standaardwachtwoord.
2. Ga naar **Settings → Websites → Add website** en vul in: 2. Ga naar **Settings → Websites → Add website** en maak een entry voor de testomgeving:
- Name: `SLP Software` (of naar keuze) - Name: `SLP Software (test)` (of naar keuze)
- Domain: het domein van de daadwerkelijke website (bv. `slpsoftware.nl` of - Domain: `test.slpsoftware.nl`
`test.slpsoftware.nl`, afhankelijk van welke omgeving je eerst wilt meten) 3. Na het opslaan toont Umami een **Website ID** (een UUID) voor deze entry — nodig voor
3. Na het opslaan toont Umami een **Website ID** (een UUID) — dit heb je nodig voor de `VITE_UMAMI_WEBSITE_ID` in de volgende stap.
volgende stap. 4. Herhaal stap 2-3 voor productie zodra die omgeving wordt opgezet: een tweede website-
entry met Domain `slpsoftware.nl`, met een eigen Website ID voor
`VITE_UMAMI_WEBSITE_ID_PRODUCTION`.
## 5. Tracking script koppelen aan de website (build-configuratie) ## 5. Tracking script koppelen aan de website (build-configuratie)
De React-app (`src/components/UmamiAnalytics.tsx`) injecteert het Umami tracking-script De React-app (`src/components/UmamiAnalytics.tsx`) injecteert het Umami tracking-script
automatisch, mits de volgende twee build-time variabelen zijn ingesteld — beide zijn automatisch, mits de volgende build-time variabelen zijn ingesteld — geen van deze zijn
**geen secrets** (client-side zichtbaar), dus als Gitea Actions **repository variables** **secrets** (client-side zichtbaar), dus als Gitea Actions **repository variables**
(niet secrets), net als `VITE_SENTRY_DSN`: (niet secrets), net als `VITE_SENTRY_DSN`:
| Variabele | Waarde | | Variabele | Waarde |
|---|---| |---|---|
| `VITE_UMAMI_SCRIPT_URL` | `https://analytics.slpsoftware.nl/script.js` | | `VITE_UMAMI_SCRIPT_URL` | `https://analytics.slpsoftware.nl/script.js` (gedeeld tussen test en productie — zelfde Umami-instance/endpoint voor beide) |
| `VITE_UMAMI_WEBSITE_ID` | het Website ID uit stap 4 | | `VITE_UMAMI_WEBSITE_ID` | het Website ID van de **test**-website-entry uit stap 4 |
| `VITE_UMAMI_WEBSITE_ID_PRODUCTION` | het Website ID van de **productie**-website-entry uit stap 4 (pas nodig vóór de eerste `deploy_production`-run) |
Stel deze in via **Gitea → Repository Settings → Actions → Variables**. Zodra beide Stel deze in via **Gitea → Repository Settings → Actions → Variables**. Zodra ze bestaan,
bestaan, pakt de eerstvolgende build ze automatisch op; zonder deze variabelen slaat de pakt de eerstvolgende build ze automatisch op; zonder deze variabelen slaat de app het
app het inladen van het script gewoon over (geen crash, geen tracking). inladen van het script gewoon over (geen crash, geen tracking). Let op:
`continuous_integration.yaml`'s `build`-job (test) leest `VITE_UMAMI_WEBSITE_ID`, de
`build-production`-job leest `VITE_UMAMI_WEBSITE_ID_PRODUCTION` — verwissel deze niet,
anders komt productieverkeer in de teststatistieken terecht (of andersom).
**Lokaal (`pnpm dev`)**: het tracking-script wordt hier bewust nooit geladen (zie **Lokaal (`pnpm dev`)**: het tracking-script wordt hier bewust nooit geladen (zie
`UmamiAnalytics.tsx`), zodat lokaal testen de bezoekersstatistieken niet vervuilt. Wil je `UmamiAnalytics.tsx`), zodat lokaal testen de bezoekersstatistieken niet vervuilt. Wil je
@@ -220,8 +228,9 @@ dit toch lokaal testen, zet dan tijdelijk beide waarden in `.env.local` (zie
- [ ] Systemd user-service instellen (onder de `umami`-user) voor auto-start na reboot. - [ ] Systemd user-service instellen (onder de `umami`-user) voor auto-start na reboot.
- [ ] DNS-record + certbot voor `analytics.slpsoftware.nl` op de reverse-proxy-Pi. - [ ] DNS-record + certbot voor `analytics.slpsoftware.nl` op de reverse-proxy-Pi.
- [ ] Standaard Umami-wachtwoord direct wijzigen na eerste login. - [ ] Standaard Umami-wachtwoord direct wijzigen na eerste login.
- [ ] Website aanmaken in Umami en het Website ID overnemen. - [ ] Website aanmaken in Umami voor de testomgeving en het Website ID overnemen.
- [ ] `VITE_UMAMI_SCRIPT_URL` en `VITE_UMAMI_WEBSITE_ID` als Gitea repository variables instellen. - [ ] `VITE_UMAMI_SCRIPT_URL` en `VITE_UMAMI_WEBSITE_ID` als Gitea repository variables instellen.
- [ ] Zodra productie wordt opgezet: aparte website aanmaken in Umami voor `slpsoftware.nl` en het Website ID als `VITE_UMAMI_WEBSITE_ID_PRODUCTION` instellen (zie stap 4/5 hierboven — vereist vóór de eerste `deploy_production`-run).
## Vervolgstappen voor toekomstige self-hosted diensten ## Vervolgstappen voor toekomstige self-hosted diensten
Dit dedicated-user-patroon (stap 0 hierboven) is bewust generiek gehouden zodat het Dit dedicated-user-patroon (stap 0 hierboven) is bewust generiek gehouden zodat het