# 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:** ```bash # Alle MySQL-Container anzeigen docker ps | grep mysql # Typische Namen: # - gitea-mysql-1 # - gitea_mysql_1 # - mysql # - gitea-db ``` ### 2. **Docker-Netzwerk finden:** ```bash # Gitea-Netzwerke anzeigen docker network ls | grep gitea # Typische Namen: # - gitea_default # - gitea-network # - gitea_gitea ``` ### 3. **MySQL-Zugangsdaten ermitteln:** ```bash # Gitea docker-compose.yml oder .env prΓΌfen cat /path/to/gitea/docker-compose.yml | grep -A5 -B5 MYSQL ``` ## βš™οΈ Konfiguration ### 1. **Environment-Datei erstellen:** ```bash # Template kopieren cp .env.external-db.example .env.external-db # Anpassen: nano .env.external-db ``` ### 2. **Wichtige Einstellungen:** ```bash # 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:** ```bash ./deploy-external-db.sh ``` ### **Was passiert automatisch:** 1. βœ… **Container-Erkennung**: Findet Gitea MySQL-Container 2. βœ… **Netzwerk-Validierung**: PrΓΌft Docker-Netzwerk 3. βœ… **Verbindungstest**: Testet MySQL-Zugriff 4. βœ… **Datenbank-Setup**: Erstellt `rezepte_klaus` DB 5. βœ… **User-Erstellung**: Legt `rezepte_user` an 6. βœ… **Daten-Import**: Importiert SQL-Dateien 7. βœ… **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:** ```yaml networks: # Traefik-eigenes Netzwerk traefik-network: driver: bridge # Gitea-Netzwerk (extern) gitea_default: external: true ``` ### **Service-Konfiguration:** ```yaml 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:** ```sql -- 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:** ```yaml # 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:** ```bash # Alle Container auflisten docker ps -a | grep mysql # Gitea docker-compose prΓΌfen cd /path/to/gitea && docker-compose ps ``` ### **Netzwerk-Verbindung fehlschlΓ€gt:** ```bash # Netzwerk-Details anzeigen docker network inspect gitea_default # Container-Netzwerke prΓΌfen docker inspect gitea-mysql-1 | grep NetworkMode ``` ### **Berechtigungen prΓΌfen:** ```bash # 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:** ```bash # 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:** ```bash # 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! πŸš€