Docker mit traefik und portainer

This commit is contained in:
rxf
2025-09-22 16:35:59 +02:00
parent 6d04ab93c0
commit a255543da6
64 changed files with 5421 additions and 25 deletions

247
EXTERNAL_MYSQL_SETUP.md Normal file
View File

@@ -0,0 +1,247 @@
# 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! 🚀