Files
VacatureRadar/docs/operations/LOCAL_DEVELOPMENT.md
T
Jens b8091e59bd
deploy / deploy (push) Canceled after 0s
Initial deploy setup
2026-07-21 14:00:00 +02:00

102 lines
3.2 KiB
Markdown

# Lokale ontwikkeling
## Ondersteunde omgeving
- Linux, macOS of WSL2;
- Python 3.12 of 3.13;
- `uv` voor dependency- en lockfilebeheer;
- optioneel Docker Compose voor PostgreSQL, Redis en de volledige stack.
Tests gebruiken standaard SQLite, eager Celery en een in-memory e-mailbackend. Ze hebben geen internet, Redis, mailbox of Ollama nodig.
## Eerste start
```bash
./scripts/codex_bootstrap.sh
uv run python manage.py runserver 0.0.0.0:8080
```
Het script maakt alleen voor lokale ontwikkeling een `.env`, installeert de gelockte dependencies, migreert, laadt veilige demodata en draait alle kwaliteitsgates. De lokaal aangemaakte login is `admin / codex-local-only`. Verwijder of wijzig deze credentials vóór ieder gedeeld of bereikbaar gebruik.
## Handmatige start
```bash
uv sync --all-groups
mkdir -p local media logs backups
cp .env.example .env
# Laat DATABASE_URL leeg voor SQLite en vul een unieke DJANGO_SECRET_KEY in.
uv run python manage.py migrate
uv run python manage.py bootstrap_instance --with-demo
uv run python manage.py runserver 0.0.0.0:8080
```
## Veelgebruikte commando's
```bash
make help
make test
make lint
make format
make verify
uv run python manage.py shell
uv run python manage.py seed_sources
uv run python manage.py import_job_fixture fixtures/pages/sample_jsonld_job.html
```
De volgende achtergrondprocessen zijn alleen nodig wanneer `CELERY_TASK_ALWAYS_EAGER=0`:
```bash
uv run celery -A config worker -l INFO -Q high,default,low
uv run celery -A config beat -l INFO
```
## Demo opnieuw opbouwen
```bash
./scripts/reset_demo.sh
```
Dit verwijdert uitsluitend `local/db.sqlite3`. Gebruik het niet tegen een productievolume.
## Testen per laag
```bash
uv run pytest tests/unit
uv run pytest tests/integration
uv run pytest tests/security
uv run pytest tests/integration/test_pipeline.py -q
uv run pytest --cov=apps --cov=config --cov-report=term-missing
```
Voeg bij iedere parserwijziging een bronfixture toe. Tests mogen alleen een echte netwerkcall doen in een expliciet afgescheiden, handmatig gestarte smoke-test die niet in CI draait.
## Databasewijzigingen
```bash
uv run python manage.py makemigrations
uv run python manage.py migrate
uv run python manage.py makemigrations --check --dry-run
```
Controleer de gegenereerde migratie. Voor destructieve wijzigingen is een ADR, datamigratie, herstelpad en back-uptest verplicht.
## Static files
In development serveert Django static files. Productie gebruikt `collectstatic` in de container en WhiteNoise:
```bash
uv run python manage.py collectstatic --noinput
```
## Troubleshooting
**`uv` ontbreekt:** installeer `uv` volgens de officiële instructies van de gekozen werkmachine en heropen de shell.
**Database lock op SQLite:** stop tweede web/workerprocessen of gebruik lokaal PostgreSQL voor parallel werk.
**Redis connection refused:** zet voor eenvoudige lokale runs `CELERY_TASK_ALWAYS_EAGER=1`, of start Redis/Compose.
**Geen digest zichtbaar:** met console-backend staat de mail in de terminal; controleer daarnaast `DigestOutbox` in Django admin.
**Bron wordt overgeslagen:** controleer `policy=allow`, een toegestane status, `next_run_at`, de domeinpolicy en de platformdenylist. Forceer nooit een fetch om een veiligheidsblokkade te omzeilen.