Jetzt läufts erst mal auf citysensor.de (strato) mit der MongoDB auf IONOS
This commit is contained in:
rxf
2026-03-28 15:20:51 +01:00
parent b7736413d4
commit cb5062c0de
19 changed files with 1213 additions and 112 deletions

235
DOCKER.md Normal file
View File

@@ -0,0 +1,235 @@
# Docker Deployment Anleitung
## Übersicht
Es gibt zwei Docker Compose Konfigurationen:
- `docker-compose.local.yml` - Für lokale Entwicklung (mit externem MongoDB)
- `docker-compose.prod.yml` - Für Server/Produktion (mit externem MongoDB)
Beide Konfigurationen verwenden einen **externen MongoDB Server** und starten keinen eigenen MongoDB Container.
## Lokale Entwicklung
### Voraussetzungen
- Docker und Docker Compose installiert
- Zugriff auf MongoDB Server (lokal oder remote)
### Konfiguration
Die lokale Entwicklung verwendet einen **externen MongoDB Server**. Konfiguriere die Verbindung:
**Option 1: .env.local Datei verwenden (empfohlen)**
```bash
cp .env.local .env.local.custom
nano .env.local.custom # Anpassen
docker compose -f docker-compose.local.yml --env-file .env.local.custom up
```
**Option 2: Direkt in docker-compose.local.yml anpassen**
Ändere die Environment-Variablen im File entsprechend deinem Setup.
**MongoDB auf Host-Maschine:**
```yaml
- MONGOHOST=host.docker.internal # für Mac/Windows
- MONGOHOST=172.17.0.1 # für Linux
```
**MongoDB auf anderem Server:**
```yaml
- MONGOHOST=mongodb-dev.example.com
- MONGOPORT=27017
- MONGOAUTH=true
- MONGOUSRP=user:password
```
### Verwendung
```bash
# Starten (baut beim ersten Mal automatisch das Image)
docker compose -f docker-compose.local.yml up
# Mit .env.local
docker compose -f docker-compose.local.yml --env-file .env.local up
# Im Hintergrund starten
docker compose -f docker-compose.local.yml up -d
# Logs anzeigen
docker compose -f docker-compose.local.yml logs -f
# Stoppen
docker compose -f docker-compose.local.yml down
```
### Zugriff
- Anwendung: http://localhost:3005/fs/
### Hinweis: network_mode host
Wenn MongoDB auf `localhost` der Host-Maschine läuft, kannst du in `docker-compose.local.yml` auskommentieren:
```yaml
network_mode: host
```
Dann ist die App direkt auf dem Host-Netzwerk und kann `localhost:27017` erreichen.
## Server/Produktion
### Voraussetzungen
- Docker und Docker Compose installiert
- Zugriff auf externen MongoDB Server
- Image auf docker.citysensor.de Registry
### Erste Einrichtung
1. **Environment-Datei erstellen:**
```bash
cp .env.example .env
nano .env # oder ein anderer Editor
```
2. **Werte in .env anpassen:**
```env
MONGOHOST=ihre-mongodb-server.example.com
MONGOPORT=27017
MONGOBASE=allsensors
MONGOAUTH=true
MONGOUSRP=admin:securepassword
```
3. **Zur Registry einloggen:**
```bash
docker login docker.citysensor.de
```
4. **Image pullen:**
```bash
docker compose -f docker-compose.prod.yml pull
```
### Deployment
```bash
# Starten
docker compose -f docker-compose.prod.yml up -d
# Status prüfen
docker compose -f docker-compose.prod.yml ps
# Logs anzeigen
docker compose -f docker-compose.prod.yml logs -f geiger-web
# Neustarten
docker compose -f docker-compose.prod.yml restart
# Stoppen
docker compose -f docker-compose.prod.yml down
```
### Update auf neue Version
```bash
# Neues Image pullen
docker compose -f docker-compose.prod.yml pull
# Container neu starten mit neuem Image
docker compose -f docker-compose.prod.yml up -d
# Alte Images aufräumen
docker image prune -f
```
### Monitoring
```bash
# Live Logs
docker compose -f docker-compose.prod.yml logs -f
# Ressourcen-Nutzung
docker stats geiger_web_prod
# Health Check Status
docker inspect --format='{{.State.Health.Status}}' geiger_web_prod
```
## Build & Push (für Entwickler)
Das deploy.sh Script übernimmt Build und Push automatisch:
```bash
# Mit automatischem Datums-Tag
./deploy.sh
# Mit spezifischem Tag
TAG=v2.9.6 ./deploy.sh
```
Oder manuell:
```bash
# Image bauen
docker build -t docker.citysensor.de/geiger_web_26:latest .
# Image zu Registry pushen
docker push docker.citysensor.de/geiger_web_26:latest
```
## Troubleshooting
### Container startet nicht
```bash
# Detaillierte Logs
docker compose -f docker-compose.prod.yml logs geiger-web
# Container Shell betreten
docker exec -it geiger_web_prod sh
```
### MongoDB Verbindungsprobleme
- Prüfe MONGOHOST und MONGOPORT in .env oder .env.local
- Prüfe Netzwerk-Konnektivität: `docker exec -it geiger_web_prod ping mongodb`
- Prüfe MongoDB Credentials
- **Lokal:** Wenn MongoDB auf localhost läuft, verwende `MONGOHOST=host.docker.internal` (Mac/Windows) oder `MONGOHOST=172.17.0.1` (Linux)
- **Lokal:** Alternativ aktiviere `network_mode: host` in docker-compose.local.yml
### Port bereits belegt
Ändere EXTERNAL_PORT in .env auf einen anderen Port:
```env
EXTERNAL_PORT=3006
```
### Logs zu groß
Die Produktionskonfiguration limitiert Logs auf 3 × 10MB. Bei Bedarf anpassen in docker-compose.prod.yml:
```yaml
logging:
options:
max-size: "10m"
max-file: "3"
```
## Sicherheitshinweise
1. **.env Datei NIEMALS ins Git committen!**
- Ist bereits in .gitignore
- Enthält sensible Zugangsdaten
2. **Starke Passwörter verwenden**
- Besonders für Produktions-MongoDB
3. **Firewall konfigurieren**
- Nur notwendige Ports öffnen
- MongoDB Port (27017) nicht öffentlich zugänglich machen
4. **Regelmäßige Updates**
- Base Image (node:alpine) aktuell halten
- Dependencies in package.json aktualisieren
## Systemanforderungen
### Lokal
- Minimum: 2 GB RAM, 2 CPU Cores
- Docker >= 20.10
- Docker Compose >= 2.0 (oder Docker mit integriertem compose plugin)
### Server
- Empfohlen: 2 GB RAM, 2 CPU Cores
- Anpassbar in docker-compose.prod.yml unter `deploy.resources`