Omgevingen & Docker Compose¶
De Wasstraat draait als een set Docker-containers die via docker-compose worden georkestreerd. Er zijn meerdere compose-bestanden die samen de verschillende omgevingen definiëren.
Services Overzicht¶
Het platform bestaat uit de volgende services:
| Service | Container | Poort | Beschrijving |
|---|---|---|---|
| PostgreSQL | wasstraat_postgres |
5432 | Definitieve relationele opslag (GGM-compatibel) |
| MongoDB | wasstraat_mongo |
27017 | Ruwe opslag, staging, bestands-metadata |
| Airflow | wasstraat_airflow |
8080 | ETL-orchestratie en dataverwerkingspipeline |
| Flask | wasstraat_flask |
5051 | Web-applicatie voor data-inzicht en -beheer |
| Elasticsearch | wasstraat_elasticsearch |
9200 | Fulltext-zoekindex |
| Redis | wasstraat_redis |
6379 | Caching-laag voor de web-applicatie |
| Apache | wasstraat_apache |
5052 | Statische bestandsserver (foto's, rapporten) |
| Jupyter | wasstraat_jupyter |
8888 | Notebooks voor data-analyse en exploratie |
Docker Compose Bestanden¶
docker-compose.yml — Basisbestand¶
Het hoofdbestand definieert alle services met hun basisinstellingen:
services:
postgres: # PostgreSQL met custom Dockerfile
airflow: # Airflow met volume-mounts naar dags, scripts, config
redis: # Bitnami Redis image
flask: # Flask web-applicatie
mongo: # MongoDB 4.2.21
jupyter: # Jupyter Lab met notebook-volumes
apache: # Apache voor statische bestanden
elasticsearch: # Elasticsearch 8.6.1
Elk service leest haar configuratie uit .env-bestanden in de config/ directory.
docker-compose.develop.yml — Ontwikkelomgeving¶
Overschrijft instellingen voor lokale ontwikkeling:
- Airflow: Eén parser-proces (
DAG_FILE_PROCESSOR_PROCESSES=1), geen parallelle taken (PARALLELISM=1,DAG_CONCURRENCY=1), debugpy-poort open op:5678 - Flask: Container blijft draaien via infinite loop (voor handmatig starten via IDE), broncode wordt als volume gemount,
FLASK_DEBUG=1
docker-compose.acc.yml — Acceptatieomgeving¶
Tussenomgeving met debug-mogelijkheden maar productie-achtige configuratie:
- Flask met
FLASK_DEBUG=1maar productie-entrypoint - Broncode als volume (voor snelle iteratie)
- Geschikt voor testen door eindgebruikers
docker-compose.prod.yml — Productieomgeving¶
Gebruikt gepubliceerde Docker-images van Docker Hub:
brienen/wasstraat_flask:1.0.0— Vaste versie van Flask-appbrienen/wasstraat_apache:0.8.0— Vaste versie van ApacheFLASK_DEBUG=0— Geen debug-modus- Geen broncode-volumes (alles zit in de image)
docker-compose.example.yml — Voorbeeldconfiguratie¶
Template voor een minimale configuratie, bruikbaar als startpunt voor nieuwe omgevingen.
Starten en Stoppen¶
De Makefile bevat targets voor elke omgeving. Bij het starten wordt automatisch init-config.sh aangeroepen om eventueel ontbrekende .env-bestanden te genereren.
# Ontwikkelomgeving (met debugpy en hot-reload)
make dev
# Lokale modus (alle services)
make app
# Voorbeeldconfiguratie
make example
# Acceptatieomgeving
make acc
# Productieomgeving (met gepubliceerde images)
make prod
# Stoppen van alle containers
make stop
# Starten van gestopte containers
make start
# Stop en verwijder alle containers
make down
# Toon live logs
make logs
# Toon status van alle services
make ps
Achterliggend commando
Elk target voert het bijbehorende docker compose commando uit. Bijvoorbeeld make dev draait:
docker compose -f docker-compose.yml -f docker-compose.develop.yml up -d
Typ make help voor een overzicht van alle beschikbare commando's.
Configuratie via Environment-bestanden¶
Alle services lezen configuratie uit bestanden in config/:
| Bestand | Inhoud |
|---|---|
postgres.env |
PostgreSQL-credentials en database-naam |
mongo.env |
MongoDB-gebruiker, wachtwoord en database-namen |
airflow.env |
Airflow scheduler-instellingen, executor-type |
airflow_db.env |
Airflow metadata-database credentials |
redis.env |
Redis wachtwoord |
flask.env |
Flask geheime sleutel, debug-modus, poort |
elasticsearch.env |
Elasticsearch-host |
version.env |
Huidige versie van de applicatie |
Gevoelige gegevens
De .env-bestanden bevatten wachtwoorden en credentials. Neem deze nooit op in versiebeheer. Gebruik het config/-directory als template en vul per omgeving de juiste waarden in.
Volume-Mounts¶
Data-volumes¶
De Airflow-container koppelt de invoerdata via volumes:
./data/input/basefiles/projectdatabase/digidepot → /input/projecten
./data/input/basefiles/projectdatabase/Delf-IT → /input/delfit
./data/input/basefiles/projectdatabase/magazijnlijst → /input/magazijnlijst
./data/input/basefiles/projectdatabase/digifotos → /input/digifotos
./data/input/basefiles/projectdatabase/monsterdatabase → /input/monsterdatabase
./data/input/basefiles/projectdatabase/rapporten → /input/rapporten
./data/input/basefiles/projectdatabase/referentietabellen → /input/referentietabellen
Persistente volumes¶
Docker beheert drie named volumes:
wasstraat_postgres_volume— PostgreSQL-datawasstraat_mongo_volume— MongoDB-dataelasticsearch-data— Elasticsearch-indices
Gedeelde code¶
De shared/ directory wordt in zowel Airflow als Flask gemount en bevat de gezamenlijke configuratie (config.py), database-utilities en constanten.
Backup en Restore¶
De Makefile bevat targets voor backup en restore:
# Backup van PostgreSQL en MongoDB (met timestamp)
make backup
# Restore vanuit een eerder backup-timestamp
make restore TS=2024-03-15_14-30-00
Bij een backup worden de Flask- en Airflow-containers tijdelijk gestopt. De backup bevat:
- PostgreSQL:
pg_dumpals tar-archief - MongoDB:
mongodumpvan staging-, bestands- en analyse-databases
De backups worden opgeslagen in de backup/ directory.
CSV-export¶
Alle definitieve tabellen kunnen als CSV worden geëxporteerd:
make export
Dit exporteert alle Def_* tabellen (Project, Put, Spoor, Vondst, Artefact, Monster, etc.) naar CSV-bestanden in backup/postgres_<timestamp>/.
Release en Publicatie¶
Voor het publiceren van een nieuwe versie:
make release VERSION=<versie> MSG="<beschrijving>"
# Voorbeeld: make release VERSION=1.1.0 MSG="Nieuwe zoekfunctionaliteit"
Dit voert de volgende stappen uit:
- Schrijft versienummer naar
config/version.env - Maakt een git-tag aan
- Commit en pusht alle wijzigingen
- Bouwt multi-platform Docker-images (linux/amd64 + linux/arm64) via
docker buildx - Pusht images naar Docker Hub onder
brienen/wasstraat_flask:<versie>