fertig bis auf Tankstellen und Graph

This commit is contained in:
2026-01-23 15:03:18 +01:00
parent 5f4f2c4379
commit d5b8df9506
27 changed files with 2198 additions and 17 deletions

363
DOCKER_DEPLOYMENT.md Normal file
View File

@@ -0,0 +1,363 @@
# 🐳 Docker Deployment Anleitung
## Voraussetzungen
- Docker installiert (`docker --version`)
- Docker Compose installiert (`docker-compose --version`)
- Min. 2 GB freier RAM
- Min. 5 GB freier Speicherplatz
## 🚀 Schnellstart
### Option 1: Mit Deploy-Script (Empfohlen)
```bash
./deploy.sh
```
Folgen Sie den Anweisungen im interaktiven Menü.
### Option 2: Manuelle Commands
**Alles bauen und starten:**
```bash
docker-compose up -d --build
```
**Nur starten (bereits gebaut):**
```bash
docker-compose up -d
```
**Stoppen:**
```bash
docker-compose down
```
**Logs anzeigen:**
```bash
docker-compose logs -f
```
## 📦 Was wird deployed?
### 1. Flutter Web App Container
- **Image:** `flutter-tank-web:latest`
- **Port:** 8080 (Host) → 80 (Container)
- **URL:** `http://localhost:8080`
- **Technologie:** Flutter Web + Nginx
### 2. Proxy Server Container (Optional)
- **Image:** `ptv-proxy:latest`
- **Port:** 3000 (Host) → 3000 (Container)
- **URL:** `http://localhost:3000`
- **Technologie:** Node.js
## 🏗️ Build-Prozess
Der Build läuft in 2 Phasen:
**Phase 1: Flutter Build (Multi-Stage)**
1. Ubuntu base image
2. Flutter SDK installieren
3. Dependencies installieren (`flutter pub get`)
4. Web App bauen (`flutter build web`)
**Phase 2: Production (Nginx)**
1. Alpine Nginx image
2. Gebaute App kopieren
3. Nginx konfigurieren
4. Port 80 exponieren
**Geschätzte Build-Zeit:** 5-10 Minuten (beim ersten Mal)
## 🌐 Auf Server deployen
### 1. Server vorbereiten
**SSH zum Server:**
```bash
ssh user@your-server.com
```
**Docker installieren (falls nicht vorhanden):**
```bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
```
**Docker Compose installieren:**
```bash
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```
### 2. Code auf Server übertragen
**Option A: Git Clone**
```bash
git clone https://github.com/your-repo/flutter_tank_web_app.git
cd flutter_tank_web_app
```
**Option B: SCP/Rsync**
```bash
# Von lokalem Rechner aus
rsync -avz --exclude 'build' --exclude '.dart_tool' \
/home/digitalman/Development/flutter_tank_web_app/ \
user@your-server.com:/opt/flutter-tank-app/
```
### 3. Environment anpassen
Bearbeiten Sie `lib/config/environment.dart`:
```dart
static const bool useLocalProxy = false; // Für Produktion
```
### 4. Deployen
```bash
cd /opt/flutter-tank-app
./deploy.sh
# Wählen Sie Option 3: "Alles bauen und starten"
```
### 5. Mit Domain verbinden (Optional)
**Nginx Reverse Proxy konfigurieren:**
```nginx
# /etc/nginx/sites-available/tank.yourdomain.com
server {
listen 80;
server_name tank.yourdomain.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
**Aktivieren:**
```bash
sudo ln -s /etc/nginx/sites-available/tank.yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```
**SSL mit Let's Encrypt:**
```bash
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d tank.yourdomain.com
```
## 🔧 Konfiguration
### Ports ändern
In `docker-compose.yml`:
```yaml
ports:
- "8080:80" # Ändern Sie 8080 auf gewünschten Port
```
### Umgebungsvariablen
Erstellen Sie `.env` Datei:
```env
# App Settings
APP_PORT=8080
PROXY_PORT=3000
# Domain (für Traefik)
DOMAIN=tank.yourdomain.com
```
### Mit Traefik (Reverse Proxy)
Die `docker-compose.yml` enthält bereits Traefik Labels.
**Traefik setup:**
```yaml
# docker-compose.traefik.yml
version: '3.8'
services:
traefik:
image: traefik:v2.10
command:
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.email=your@email.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./letsencrypt:/letsencrypt"
```
## 📊 Monitoring
### Container Status prüfen
```bash
docker-compose ps
```
### Logs anschauen
```bash
# Alle Services
docker-compose logs -f
# Nur Web App
docker-compose logs -f flutter-tank-web
# Nur Proxy
docker-compose logs -f ptv-proxy
```
### Resource Usage
```bash
docker stats
```
### Health Check
```bash
# Web App
curl http://localhost:8080/health
# Proxy
curl http://localhost:3000/health
```
## 🔄 Updates deployen
```bash
# Code aktualisieren
git pull
# Neu bauen und starten
docker-compose up -d --build
# Alte Images aufräumen
docker image prune -f
```
## 🛠️ Troubleshooting
### Container startet nicht
```bash
# Logs prüfen
docker-compose logs flutter-tank-web
# Container Status
docker-compose ps
# Neu starten
docker-compose restart flutter-tank-web
```
### Port bereits belegt
```bash
# Prozess auf Port finden
sudo lsof -i :8080
# Port in docker-compose.yml ändern
```
### Out of Memory
```bash
# Docker Memory Limit erhöhen
# In docker-compose.yml unter service:
deploy:
resources:
limits:
memory: 2G
```
### Build schlägt fehl
```bash
# Docker Cache leeren
docker builder prune -a
# Komplett neu bauen
docker-compose build --no-cache
```
## 📦 Backup & Restore
### Volumes sichern
```bash
# Data Volume backup
docker run --rm -v flutter-tank-data:/data -v $(pwd):/backup alpine tar czf /backup/data-backup.tar.gz -C /data .
```
### Image speichern
```bash
# Image exportieren
docker save flutter-tank-web:latest | gzip > flutter-tank-web.tar.gz
# Image importieren
docker load < flutter-tank-web.tar.gz
```
## 🔒 Sicherheit
### Best Practices
1. **Nicht als Root laufen** (bereits in Proxy-Dockerfile implementiert)
2. **Security Headers** (bereits in nginx.conf)
3. **Firewall konfigurieren:**
```bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
```
4. **Regular Updates:**
```bash
# Base images updaten
docker-compose pull
docker-compose up -d
```
## 🎯 Performance Optimierung
### Nginx Caching
Bereits in `nginx.conf` konfiguriert:
- Static assets: 1 Jahr Cache
- Gzip Kompression aktiv
### Docker Image Size
```bash
# Image Größe prüfen
docker images flutter-tank-web
# Multi-stage build reduziert Größe bereits deutlich
```
## 📝 Checkliste Produktion
- [ ] `useLocalProxy = false` in environment.dart
- [ ] Domain konfiguriert
- [ ] SSL Zertifikat installiert
- [ ] Firewall konfiguriert
- [ ] Backup-Strategie definiert
- [ ] Monitoring eingerichtet
- [ ] Logs rotieren konfiguriert
- [ ] Update-Prozess dokumentiert
## 🆘 Support
Bei Problemen:
1. Logs prüfen: `docker-compose logs`
2. Container Status: `docker-compose ps`
3. Health Checks: `curl http://localhost:8080/health`
4. Docker System: `docker system df`