# Verificatierapport — VacatureRadar 0.3.12 - Datum: 27 juli 2026 - Onderwerp: productiehardening, Nginx Proxy Manager, gastmodus en overdrachts-ZIP - Branch: `fix/public-production-hardening` ## Gecontroleerd ### Applicatie en regressies ```text 296 tests geslaagd 2 optionele Playwrighttests overgeslagen omdat de browserbinary niet lokaal aanwezig was 83,43% branch-aware codedekking; vereiste drempel 70% ``` De afzonderlijke HTML- en accessibilityprobe bleef actief. De Playwrightfallback is hersteld zodat een geïnstalleerde Pythonmodule zonder browserbinary geen synchrone databasecall meer binnen de Playwright-eventloop uitvoert. ### Django en data - `python manage.py check`: 0 issues; - `python manage.py makemigrations --check --dry-run`: geen wijzigingen; - productie-settings met `PUBLIC_BASE_URL=https://vacatureradar.itworx.tech`: laden correct; - `manage.py check --deploy`: geen errors; HSTS-preload blijft bewust uit en geeft daarom alleen de verwachte Django-waarschuwing; - publieke host en HTTPS-origin worden aantoonbaar aan `ALLOWED_HOSTS` en `CSRF_TRUSTED_ORIGINS` toegevoegd. ### Repository en deployment - repositoryvalidator: geslaagd; - taakledger: geldig, 64 taken, 0 uitvoerbare ready-taken; - Docker Compose, Unraid Compose en backlog-YAML: parseerbaar; - shellsyntax van deploy- en entrypoints: geldig; - Pythoncompilecheck: geslaagd; - `git diff --check`: geslaagd; - packagevalidatie en manifestcontrole: geslaagd na definitieve packaging. ## Belangrijkste herstelde productieproblemen - `DisallowedHost` voor de publieke Nginx-host; - publieke Django-debugmodus; - verkeerde externe CSRF-origin met interne poort `1226`; - healthchecks die door HTTPS-redirect konden falen; - proceslokale rate limiting bij meerdere Gunicornworkers; - onvoorwaardelijk vertrouwen in `X-Forwarded-For`; - schrijfbare gedeelde demo; - afwijkende Unraid `.env`-paden; - database-URL-interpolatie buiten het Unraid-`env_file`; - URL-import die zonder staticfilesmanifest kon falen tijdens deployment checks; - stale project-/assetversie en verouderd verificatierapport. ## Omgevingsbeperking De normale `uv sync --frozen` kon in deze uitvoeringsomgeving geen packages downloaden door DNS-uitval. Voor de regressies zijn de pure Python-packages uit de door de gebruiker aangeleverde gelockte Windows-omgeving gecombineerd met reeds aanwezige Linux-wheels. Daardoor konden Django, pytest en de volledige offline suite betrouwbaar draaien. De Ruff-Linuxbinary en Playwright-browser konden zonder netwerk niet worden geïnstalleerd. Pythoncompile, alle tests, Djangochecks, lijnlengtecontrole op gewijzigde Pythonbestanden en `git diff --check` zijn wel uitgevoerd. Een Dockerdaemon en de live Unraid/Nginx-omgeving waren niet beschikbaar. ## Nog op de doelserver uitvoeren 1. bestaande `.env` back-uppen; 2. `scripts/configure_public_url.py` uitvoeren; 3. container met `--force-recreate` herbouwen; 4. interne liveness/readiness controleren; 5. publieke TLS-, login-, logout- en CSRF-smoke uitvoeren; 6. demo-read-only controleren; 7. exacte Nginx Proxy Manager-CIDR instellen wanneer individuele client-IP-rate-limiting gewenst is; 8. databaseback-up en herstel-smoke uitvoeren. Zie `docs/operations/NGINX_PROXY_MANAGER.md` en `docs/quality/PRODUCTION_AUDIT_2026-07-27.md`.