247 lines
6.8 KiB
Markdown
247 lines
6.8 KiB
Markdown
# Externe MySQL-Datenbank Integration - Rezepte
|
|
|
|
## 🗄️ 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` 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│││
|
|
│ │ └──────────┘ └────────────┘││
|
|
│ └─────────────────────────────┘│
|
|
└─────────────────────────────────┘
|
|
↑
|
|
┌─────────┼─────────┐
|
|
│ │ │
|
|
┌───▼───┐ ┌───▼────┐ ┌──▼─────┐
|
|
│ 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
|
|
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 bekommt eigenen User ('rezepte_user')
|
|
-- Keine gegenseitigen Zugriffe
|
|
|
|
GRANT ALL PRIVILEGES ON rezepte.* 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
|
|
|
|
# Backup erstellen
|
|
docker exec gitea-mysql-1 mysqldump -uroot -p rezepte > 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! 🚀 |