fguyer/fgu-ki-gever
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
# fgu-ki-gever Erster Full-Stack-Wurf für eine GEVER-orientierte Anwendung mit Django-Backend, React-Frontend und Docker-Compose-Deployment auf einer einzelnen Hetzner-VM. Das Setup ist auf einen einfachen, nachvollziehbaren Produktionsbetrieb ohne zusätzliche Orchestrierung ausgelegt. ## Dokumentation - `docs/working-rules.md` - `docs/architecture.md` ## Produktions-Setup auf Hetzner Die Produktionsarchitektur nutzt drei Container: - `frontend`: baut das React/Vite-Frontend und liefert es via Nginx aus - `backend`: betreibt Django via Gunicorn - `postgres`: persistente PostgreSQL-Datenbank Der Frontend-Container terminiert den eingehenden HTTP-Traffic und leitet `/api/*` intern an das Backend weiter. Dadurch laufen Frontend und API im Browser unter derselben Origin, sodass kein separates CORS-Setup nötig ist. ## Voraussetzungen auf dem Server - Linux-VM (z. B. Hetzner Cloud) - Docker Engine + Docker Compose Plugin (`docker compose`) - Dieses Repository auf dem Server ausgecheckt ## 1) Produktions-Environment vorbereiten ```bash cp infra/env/prod.env.example infra/env/prod.env nano infra/env/prod.env ``` Wichtige Variablen in `infra/env/prod.env`: - `DJANGO_SERVICE`: Compose-Service für Django/Gunicorn (`backend`) - `DJANGO_MIGRATE_CMD`: Migrationskommando - `DJANGO_COLLECTSTATIC_CMD`: Kommando für statische Assets - `DJANGO_SECRET_KEY`: produktiver Django-Secret-Key - `DJANGO_ALLOWED_HOSTS`: Server-IP und/oder Domain - `DJANGO_CSRF_TRUSTED_ORIGINS`: vertrauenswürdige Origins für Form-Posts - `POSTGRES_*`: Datenbankzugang für den App-Container - `DB_*`: Datenbankzugang für das Backup-Skript - `VITE_API_BASE_URL`: API-Basis-URL für den Frontend-Build (Standard: `/api`) ## 2) Deploy ausführen ```bash chmod +x infra/deploy/deploy.sh infra/deploy/backup.sh ./infra/deploy/deploy.sh ``` Das Deploy-Skript führt in dieser Reihenfolge aus: 1. `docker compose pull` 2. `docker compose build` 3. `docker compose up -d --remove-orphans` 4. Django-Migrationen via `docker compose exec -T backend ...` 5. `collectstatic` im Backend-Container ## 3) Datenbank-Backup erstellen ```bash ./infra/deploy/backup.sh ``` Das Skript erstellt ein komprimiertes PostgreSQL-Dump unter `BACKUP_DIR`, z. B.: - `backups/db-YYYYMMDD-HHMMSS.sql.gz` ## Beispiel-Ablauf auf einer frischen VM ```bash git clone <repo-url> cd fgu-ki-gever cp infra/env/prod.env.example infra/env/prod.env # Werte in prod.env setzen chmod +x infra/deploy/deploy.sh infra/deploy/backup.sh ./infra/deploy/deploy.sh ```