Deployment¶
Der Shop wird als Docker-Container gebaut und über Helm-Charts auf Kubernetes deployed. Die CI/CD-Pipeline läuft auf GitLab CI.
Docker¶
Image-Build¶
docker build -t registry.gitlab.com/FrankHennige/shop .
Das Image basiert auf python:3.13-slim und enthält:
- Django-App unter /app/shop
- Gunicorn als WSGI-Server
- Granian (optional, für Async)
- Alle Python-Dependencies aus uv.lock
Docker-Compose (Entwicklung)¶
docker-compose.yml definiert die Service-Landschaft:
| Service | Beschreibung |
|---|---|
| site | Django (Gunicorn) auf Port 8000 |
| celery-worker | Asynchrone Tasks |
| celery-beat | Periodische Tasks (Scheduler) |
| redis | Cache + Message-Broker |
| postgres | PostgreSQL 16 |
# Entwicklungsumgebung starten
docker-compose up -d
# Migrationen anwenden
docker exec shop_site_1 python manage.py migrate
# Logs verfolgen
docker-compose logs -f site
Docker-Compose Override¶
docker-compose.override.yml.example enthält:
- Bind-Mounts für Live-Entwicklung
- Port-Weiterleitungen
- Umgebungsvariablen
CI/CD (GitLab)¶
Pipeline-Struktur¶
# .gitlab-ci.yml + .gitlab-ci/
stages:
- test # pytest, mypy, ruff
- build # Docker-Image
- deploy # Helm-Deployment
Quality Gates¶
| Stage | Tool | Regel |
|---|---|---|
| Lint | ruff check | Zero errors |
| Format | ruff format | Line-length=100 |
| Typing | mypy + diff-cover | 100% Qualität vs. origin/main |
| Tests | pytest + coverage | Alle Tests, --reuse-db |
| Build | docker build | Multi-stage, kein Cache-Bruch |
Local ausführen¶
cd /home/fh/PycharmProjects/shop
uv run tox -p # Alle Gates parallel
uv run tox -e test # Nur Tests
uv run tox -e mypy # Nur Typ-Check
Release-Automatisierung¶
Semantic Release über .releaserc.yml:
- Commit-Nachrichten folgen Conventional Commits
- feat: → Minor-Bump
- fix: → Patch-Bump
- BREAKING CHANGE: → Major-Bump
- Tag + Changelog + GitLab Release werden automatisch erstellt
Helm-Charts¶
Helm-Charts liegen im helm/-Verzeichnis und definieren:
| Ressource | Beschreibung |
|---|---|
| Deployment | App-Container mit Resource-Limits |
| Service | Cluster-interne Erreichbarkeit |
| Ingress | Traefik-Routing mit TLS |
| ConfigMap | Nicht-sensitive Konfiguration |
| Secret | Sensitive Werte (DB-Passwort, API-Keys) |
| HPA | Autoscaling (CPU/Memory) |
| CronJob | Wartungs-Jobs (z.B. Session-Cleanup) |
Umgebungen¶
| Umgebung | Zweck | Erreichbarkeit |
|---|---|---|
| dev.lan | Entwicklung | Internes Netzwerk (192.168.100.180) |
| Staging | Vorproduktionstests | staging.kelemidis.de |
| Produktion | Live-Shop | kelemidis.de |
Code-Promotion¶
feature-branch → main → Staging → Produktion
│ │ │
CI-Tests CI+Deploy Manueller Trigger
Monitoring¶
Siehe Monitoring für Details zu: - OpenTelemetry Tracing - Loki + Grafana Log-Analyse - Metriken und Alerting - Health-Check-Endpoints
Wichtige Dateien¶
| Datei | Zweck |
|---|---|
Dockerfile |
Multi-stage Image-Build |
docker-compose.yml |
Entwicklungsumgebung |
docker-compose.override.yml.example |
Dev-Override-Vorlage |
docker-entrypoint.sh |
Container-Entrypoint |
.gitlab-ci.yml |
Pipeline-Definition |
.gitlab-ci/ |
Pipeline-Templates |
helm/ |
Kubernetes-Deployment |
.releaserc.yml |
Semantic Release |
pyproject.toml |
Projekt-Metadaten + Tool-Konfiguration |
tox.ini |
Lokale Quality-Gate-Ausführung |