130 lines
2.8 KiB
Markdown
130 lines
2.8 KiB
Markdown
# Wetterstation Docker Setup
|
|
|
|
## Architektur
|
|
|
|
Die Wetterstation besteht aus zwei unabhängigen Services:
|
|
|
|
1. **Ingestion Service** (Port 5004): Empfängt POST-Daten und schreibt in die Datenbank
|
|
2. **Web Service** (Port 5003): Stellt das Web-Interface und Lese-APIs bereit
|
|
|
|
Beide Services teilen sich eine gemeinsame SQLite-Datenbank via Volume.
|
|
|
|
## Voraussetzungen
|
|
- Docker und Docker Compose installiert
|
|
|
|
## Installation
|
|
|
|
### 1. `.env` Datei erstellen (optional)
|
|
Erstelle eine `.env` Datei für benutzerdefinierte Konfiguration:
|
|
|
|
```bash
|
|
DB_FILE=wetterdaten.db
|
|
HTTP_PORT=5003
|
|
INGESTION_PORT=5004
|
|
```
|
|
|
|
### 2. Container starten
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
Die Services laufen dann unter:
|
|
- Web-Interface: `http://localhost:5003`
|
|
- Ingestion API: `http://localhost:5004/api/data/upload`
|
|
|
|
### 3. Container verwalten
|
|
```bash
|
|
# Logs anschauen (beide Services)
|
|
docker-compose logs -f
|
|
|
|
# Logs nur Ingestion Service
|
|
docker-compose logs -f wetterstation-ingestion
|
|
|
|
# Logs nur Web Service
|
|
docker-compose logs -f wetterstation-web
|
|
|
|
# Container stoppen
|
|
docker-compose down
|
|
|
|
# Container neustarten
|
|
docker-compose restart
|
|
|
|
# Nur Ingestion Service neustarten
|
|
docker-compose restart wetterstation-ingestion
|
|
```
|
|
|
|
## Datenverwaltung
|
|
Die SQLite-Datenbank (`wetterdaten.db`) wird als Volume persistiert und bleibt erhalten, auch wenn die Container gelöscht werden.
|
|
|
|
## Services im Detail
|
|
|
|
### Ingestion Service
|
|
- **Port**: 5004
|
|
- **Endpoints**:
|
|
- `POST /api/data/upload` - Empfängt Wetterdaten
|
|
- `GET /health` - Health-Check
|
|
- **Zweck**: Schreibt Daten in die Datenbank
|
|
|
|
### Web Service
|
|
- **Port**: 5003
|
|
- **Endpoints**:
|
|
- `GET /` - Web-Interface
|
|
- `GET /api/data/day` - Daten der letzten 24h
|
|
- `GET /api/data/week` - Daten der letzten Woche
|
|
- `GET /health` - Health-Check
|
|
- **Zweck**: Visualisierung und Datenabruf
|
|
|
|
## Externe Zugriffe
|
|
|
|
### Daten senden (von außen)
|
|
```bash
|
|
curl -X POST http://your-server-ip:5004/api/data/upload \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{
|
|
"dateTime": "2026-01-27 12:00:00",
|
|
"barometer": 1013.2,
|
|
"outTemp": 5.6,
|
|
"outHumidity": 72,
|
|
"windSpeed": 3.2,
|
|
"windDir": 180,
|
|
"windGust": 5.0,
|
|
"rainRate": 0.0,
|
|
"rain": 0.0
|
|
}'
|
|
```
|
|
|
|
### Web-Interface aufrufen
|
|
Öffne im Browser: `http://your-server-ip:5003`
|
|
|
|
## Troubleshooting
|
|
|
|
### Datenbank-Fehler
|
|
Falls die Datenbank beschädigt ist:
|
|
```bash
|
|
rm wetterdaten.db
|
|
docker-compose restart wetterstation-ingestion
|
|
```
|
|
|
|
### Container neu bauen
|
|
Nach Code-Änderungen:
|
|
```bash
|
|
docker-compose build --no-cache
|
|
docker-compose up -d
|
|
```
|
|
|
|
### Port-Konflikte
|
|
Falls Ports bereits belegt sind, passe die Ports in `docker-compose.yml` an:
|
|
```yaml
|
|
ports:
|
|
- "NEUER_PORT:5003" # für Web Service
|
|
- "NEUER_PORT:5004" # für Ingestion Service
|
|
```
|
|
|
|
### Health-Checks
|
|
Überprüfe, ob Services laufen:
|
|
```bash
|
|
curl http://localhost:5003/health
|
|
curl http://localhost:5004/health
|
|
```
|
|
|