V 3.0.0
Jetzt läufts erst mal auf citysensor.de (strato) mit der MongoDB auf IONOS
This commit is contained in:
235
DOCKER.md
Normal file
235
DOCKER.md
Normal 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`
|
||||
Reference in New Issue
Block a user