6.9 KiB
6.9 KiB
Externe MySQL-Datenbank Integration - Rezepte Klaus
🗄️ Bestehende MySQL-Datenbank nutzen (Gitea)
Statt einen separaten MySQL-Container zu starten, können Sie die bestehende MySQL-Instanz Ihrer Gitea-Installation nutzen. Das spart Ressourcen und zentralisiert die Datenbank-Verwaltung.
🔍 Vorbereitung: Gitea-Setup analysieren
1. MySQL-Container identifizieren:
# Alle MySQL-Container anzeigen
docker ps | grep mysql
# Typische Namen:
# - gitea-mysql-1
# - gitea_mysql_1
# - mysql
# - gitea-db
2. Docker-Netzwerk finden:
# Gitea-Netzwerke anzeigen
docker network ls | grep gitea
# Typische Namen:
# - gitea_default
# - gitea-network
# - gitea_gitea
3. MySQL-Zugangsdaten ermitteln:
# Gitea docker-compose.yml oder .env prüfen
cat /path/to/gitea/docker-compose.yml | grep -A5 -B5 MYSQL
⚙️ Konfiguration
1. Environment-Datei erstellen:
# Template kopieren
cp .env.external-db.example .env.external-db
# Anpassen:
nano .env.external-db
2. Wichtige Einstellungen:
# MySQL Container (von Gitea)
MYSQL_HOST=gitea-mysql-1 # Ihr MySQL-Container-Name
MYSQL_PORT=3306
MYSQL_ADMIN_USER=root
MYSQL_ADMIN_PASSWORD=your_gitea_root_password
# Neuer Rezepte-User
MYSQL_REZEPTE_PASSWORD=secure_password_for_rezepte
# Netzwerk (von Gitea)
EXTERNAL_MYSQL_NETWORK=gitea_default
🚀 Deployment
Automatisches Setup:
./deploy-external-db.sh
Was passiert automatisch:
- ✅ Container-Erkennung: Findet Gitea MySQL-Container
- ✅ Netzwerk-Validierung: Prüft Docker-Netzwerk
- ✅ Verbindungstest: Testet MySQL-Zugriff
- ✅ Datenbank-Setup: Erstellt
rezepte_klausDB - ✅ User-Erstellung: Legt
rezepte_useran - ✅ Daten-Import: Importiert SQL-Dateien
- ✅ Service-Start: Startet alle Services
🏗️ Architektur-Übersicht
Vor der Integration:
┌─────────────┐ ┌─────────────┐
│ Gitea │ │ Rezepte App │
│ │ │ │
│ ┌─────────┐ │ │ ┌─────────┐ │
│ │ MySQL │ │ │ │ MySQL │ │
│ └─────────┘ │ │ └─────────┘ │
└─────────────┘ └─────────────┘
2x Ressourcen Dopplung
Nach der Integration:
┌─────────────────────────────────┐
│ Shared MySQL │
│ ┌─────────────────────────────┐│
│ │ ┌──────────┐ ┌────────────┐││
│ │ │ gitea │ │rezepte_klaus│││
│ │ └──────────┘ └────────────┘││
│ └─────────────────────────────┘│
└─────────────────────────────────┘
↑
┌─────────┼─────────┐
│ │ │
┌───▼───┐ ┌───▼────┐ ┌──▼─────┐
│ Gitea │ │ Rezepte│ │phpMyAdm│
└───────┘ └────────┘ └────────┘
🔧 Technische Details
Docker-Netzwerk-Integration:
networks:
# Traefik-eigenes Netzwerk
traefik-network:
driver: bridge
# Gitea-Netzwerk (extern)
gitea_default:
external: true
Service-Konfiguration:
backend:
environment:
- DATABASE_URL=mysql://rezepte_user:${MYSQL_REZEPTE_PASSWORD}@${MYSQL_HOST}:3306/rezepte_klaus
networks:
- traefik-network
- gitea_default # Zugriff auf Gitea MySQL
phpMyAdmin-Zugriff:
- ✅ Gitea-Datenbank: Voller Zugriff mit Admin-Credentials
- ✅ Rezepte-Datenbank: Separater User mit eingeschränkten Rechten
- ✅ Multi-DB-Verwaltung: Beide Datenbanken in einer Oberfläche
🔒 Sicherheit
Getrennte Benutzer:
-- Gitea nutzt eigenen User (meist 'gitea')
-- Rezepte Klaus bekommt eigenen User ('rezepte_user')
-- Keine gegenseitigen Zugriffe
GRANT ALL PRIVILEGES ON rezepte_klaus.* TO 'rezepte_user'@'%';
-- Kein Zugriff auf 'gitea' Datenbank
Netzwerk-Isolation:
# Rezepte-Services sind nur im eigenen Netzwerk erreichbar
# MySQL ist shared, aber mit User-Trennung
networks:
- traefik-network # Web-Zugriff
- gitea_default # DB-Zugriff
📊 Vorteile
Ressourcen-Einsparung:
- ❌ Vorher: 2x MySQL-Container (je ~500MB RAM)
- ✅ Nachher: 1x MySQL-Container für beide Apps
- 💾 Einsparung: ~500MB RAM + Disk Space
Zentrale Verwaltung:
- ✅ Ein phpMyAdmin: Für alle Datenbanken
- ✅ Ein Backup-Punkt: Für alle MySQL-Daten
- ✅ Eine Überwachung: MySQL-Performance zentral
- ✅ Eine Wartung: Updates nur an einer Stelle
Professionelle Architektur:
- ✅ Microservices: Services bleiben getrennt
- ✅ Shared Database: Datenbank-Layer konsolidiert
- ✅ Skalierbarkeit: Weitere Apps können MySQL nutzen
🛠️ Troubleshooting
MySQL-Container nicht gefunden:
# Alle Container auflisten
docker ps -a | grep mysql
# Gitea docker-compose prüfen
cd /path/to/gitea && docker-compose ps
Netzwerk-Verbindung fehlschlägt:
# Netzwerk-Details anzeigen
docker network inspect gitea_default
# Container-Netzwerke prüfen
docker inspect gitea-mysql-1 | grep NetworkMode
Berechtigungen prüfen:
# Als rezepte_user anmelden
docker exec -it gitea-mysql-1 mysql -urezepte_user -p
# Datenbanken anzeigen
SHOW DATABASES;
# Berechtigungen prüfen
SHOW GRANTS FOR 'rezepte_user'@'%';
📋 Befehle-Referenz
Deployment:
# Vollständiges Setup
./deploy-external-db.sh
# Nur Services neu starten
docker-compose -f docker-compose.traefik-external-db.yml restart
# Logs anzeigen
docker-compose -f docker-compose.traefik-external-db.yml logs -f backend
Datenbank-Zugriff:
# Als Admin (Gitea + Rezepte)
docker exec -it gitea-mysql-1 mysql -uroot -p
# Als Rezepte-User (nur Rezepte)
docker exec -it gitea-mysql-1 mysql -urezepte_user -p rezepte_klaus
# Backup erstellen
docker exec gitea-mysql-1 mysqldump -uroot -p rezepte_klaus > backup.sql
🎯 Fazit
Die externe MySQL-Integration bietet:
- 50% weniger Ressourcenverbrauch 💾
- Zentrale Datenbank-Verwaltung 🗄️
- Professionelle Multi-Tenant-Architektur 🏗️
- Einfachere Backup-Strategien 💾
- Kosteneffizienz bei Cloud-Deployments ☁️
Perfect für Server mit mehreren Anwendungen! 🚀