- Remove middleware reference from Gitea Traefik labels (caused routing issues) - Optimize Gitea connection pool settings (MAX_IDLE_CONNS=30, authentication_timeout=180s) - Add explicit service reference in Traefik labels - Fix intermittent 504 timeouts by improving PostgreSQL connection handling Fixes Gitea unreachability via git.michaelschiemer.de
4.4 KiB
Production Database Connection Guide
Übersicht
Die Production-Application verbindet sich mit der separaten PostgreSQL-Production-Datenbank über das postgres-production-internal Network.
Network-Konfiguration
Production Application Stack
Die Production-Application-Services (php, queue-worker, scheduler) müssen mit dem postgres-production-internal Network verbunden sein.
Konfiguration:
- Datei:
docker-compose.postgres-override.yml - Network:
postgres-production-internal - Verbindung: Services werden diesem Network hinzugefügt
Docker Compose Usage
# Production Stack mit Datenbank-Verbindung starten
docker compose -f docker-compose.base.yml \
-f docker-compose.production.yml \
-f docker-compose.postgres-override.yml \
up -d
Services
Die folgenden Services werden mit dem postgres-production-internal Network verbunden:
- php - PHP-FPM Application Container
- queue-worker - Background Job Processor
- scheduler - Cron Job Executor
Environment Variables
Die Application verwendet folgende Environment-Variablen für die Datenbank-Verbindung:
DB_HOST=postgres-production
DB_PORT=5432
DB_DATABASE=michaelschiemer
DB_USERNAME=postgres
DB_PASSWORD_FILE=/run/secrets/db_user_password
Wichtig: DB_PASSWORD wird über Docker Secrets geladen (DB_PASSWORD_FILE).
Verifizierung
1. Network-Verbindung prüfen
# Prüfe, ob php-Container im Network ist
docker network inspect postgres-production-internal | grep php
# Erwartet: Container-Name sollte erscheinen
2. Datenbank-Verbindung testen
# Von php-Container aus
docker exec php php -r "
\$dsn = 'pgsql:host=postgres-production;port=5432;dbname=michaelschiemer';
\$pdo = new PDO(\$dsn, 'postgres', getenv('DB_PASSWORD'));
echo 'Connection successful: ' . \$pdo->query('SELECT version()')->fetchColumn();
"
3. Network-Isolation verifizieren
# Prüfe, ob Production-App NICHT auf Staging-DB zugreifen kann
docker exec php nc -zv postgres-staging 5432
# Erwartet: Connection refused oder timeout (keine Verbindung möglich)
Troubleshooting
Problem: Container kann Datenbank nicht erreichen
Lösung:
-
Prüfe, ob
postgres-production-internalNetwork existiert:docker network ls | grep postgres-production-internal -
Prüfe, ob Container im Network ist:
docker network inspect postgres-production-internal -
Prüfe, ob PostgreSQL-Production-Stack läuft:
docker ps | grep postgres-production
Problem: DB_HOST nicht korrekt
Lösung:
-
Prüfe Environment-Variablen:
docker exec php printenv | grep DB_ -
Prüfe
.env-Datei im Application-Stack:cat ~/deployment/stacks/production/.env | grep DB_ -
Prüfe Ansible-Template:
deployment/ansible/templates/application.env.j2- Sollte
DB_HOST=postgres-productionfür Production setzen
Migration von alter Konfiguration
Falls die Production-Application noch die alte postgres (geteilte Datenbank) verwendet:
-
Backup erstellen:
cd ~/deployment/stacks/postgresql docker exec postgres-backup /scripts/backup.sh -
PostgreSQL-Production-Stack starten:
cd ~/deployment/stacks/postgresql-production docker compose up -d -
Datenbank migrieren (siehe
migrate-to-separate-databases.md) -
Application-Stack aktualisieren:
.env-Datei:DB_HOST=postgres-production- Network:
postgres-production-internalhinzufügen
-
Stack neu starten:
cd ~/deployment/stacks/production docker compose -f docker-compose.base.yml \ -f docker-compose.production.yml \ -f docker-compose.postgres-override.yml \ up -d
Ansible-Integration
Das Ansible-Setup konfiguriert die Datenbank-Verbindung automatisch:
- Template:
deployment/ansible/templates/application.env.j2 - Variable:
db_host_default: "postgres-production"(ingroup_vars/production/vars.yml) - Network: Wird über
docker-compose.postgres-override.ymlkonfiguriert
Weitere Ressourcen
- PostgreSQL-Production-Stack:
deployment/stacks/postgresql-production/README.md - Migrations-Guide:
deployment/docs/guides/migrate-to-separate-databases.md - Staging-Datenbank:
deployment/docs/guides/staging-test-plan.md