From cff7f80463c7bbb94c5694a04d7041c041b7d2de Mon Sep 17 00:00:00 2001 From: rxf Date: Sun, 25 Jan 2026 19:48:00 +0100 Subject: [PATCH] Docker draus gemacht --- .env.example | 9 +++++++ DOCKER_README.md | 61 ++++++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 20 +++++++++++++++ docker-compose.yml | 19 +++++++++++++++ requirements.txt | 1 + wetterstation.py | 19 +++++++++------ 6 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 .env.example create mode 100644 DOCKER_README.md create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..afad6fc --- /dev/null +++ b/.env.example @@ -0,0 +1,9 @@ +# MQTT Broker Konfiguration +MQTT_HOST=rexfue.de +MQTT_PORT=1883 +MQTT_TOPIC=vantage/live +MQTT_USER=your_mqtt_username +MQTT_PASSWORD=your_mqtt_password + +# Datenbank +DB_FILE=wetterdaten.db diff --git a/DOCKER_README.md b/DOCKER_README.md new file mode 100644 index 0000000..1cd956f --- /dev/null +++ b/DOCKER_README.md @@ -0,0 +1,61 @@ +# Wetterstation Docker Setup + +## Voraussetzungen +- Docker und Docker Compose installiert +- MQTT Broker Zugang (Host, Port, Benutzername, Passwort) + +## Installation + +### 1. `.env` Datei erstellen +Kopiere `.env.example` zu `.env` und fülle deine Daten ein: + +```bash +cp .env.example .env +``` + +Bearbeite `.env` mit deinen MQTT-Credentials: +``` +MQTT_HOST=dein_broker.com +MQTT_PORT=1883 +MQTT_TOPIC=vantage/live +MQTT_USER=dein_benutzer +MQTT_PASSWORD=dein_passwort +DB_FILE=wetterdaten.db +``` + +### 2. Container starten +```bash +docker-compose up -d +``` + +Die Anwendung läuft dann unter `http://localhost:5003` + +### 3. Container verwalten +```bash +# Logs anschauen +docker-compose logs -f + +# Container stoppen +docker-compose down + +# Container neustarten +docker-compose restart +``` + +## Datenverwaltung +Die SQLite-Datenbank (`wetterdaten.db`) wird als Volume persistiert und bleibt erhalten, auch wenn der Container gelöscht wird. + +## Troubleshooting + +### Datenbank-Fehler +Falls die Datenbank beschädigt ist, kannst du sie löschen und neu erstellen: +```bash +rm wetterdaten.db +docker-compose restart +``` + +### MQTT-Verbindungsfehler +Überprüfe deine `.env` Datei auf korrekte Credentials: +```bash +docker-compose logs wetterstation | grep -i mqtt +``` diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a63e1f0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +# Multi-stage build: Leichtgewichtiger Container +FROM python:3.13-slim + +# Setze Arbeitsverzeichnis +WORKDIR /app + +# Installiere Dependencies +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Kopiere die Anwendung +COPY wetterstation.py . +COPY static/ static/ +COPY templates/ templates/ + +# Exponiere Port +EXPOSE 5003 + +# Starten Sie die Anwendung +CMD ["python", "wetterstation.py"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..027e52f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,19 @@ +services: + wetterstation: + build: . + container_name: wetterstation + ports: + - "5003:5003" + volumes: + - ./wetterdaten.db:/app/wetterdaten.db + env_file: + - .env + environment: + - FLASK_ENV=production + restart: unless-stopped + networks: + - wetterstation_network + +networks: + wetterstation_network: + driver: bridge diff --git a/requirements.txt b/requirements.txt index b700fa8..1fe88fa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ flask==3.0.0 paho-mqtt==1.6.1 +python-dotenv==1.0.0 \ No newline at end of file diff --git a/wetterstation.py b/wetterstation.py index 7804deb..a76c614 100644 --- a/wetterstation.py +++ b/wetterstation.py @@ -6,18 +6,23 @@ Wetterstation - MQTT Datenempfang und Web-Visualisierung import sqlite3 import json import threading +import os from datetime import datetime, timedelta from flask import Flask, render_template, jsonify import paho.mqtt.client as mqtt +from dotenv import load_dotenv -# Konfiguration -MQTT_HOST = "rexfue.de" -MQTT_PORT = 1883 -MQTT_TOPIC = "vantage/live" # Bitte anpassen! -MQTT_USER = "stzuhr" # Bitte anpassen! -MQTT_PASSWORD = "74chQCYb" # Bitte anpassen! +# Lade Umgebungsvariablen aus .env Datei +load_dotenv() -DB_FILE = "wetterdaten.db" +# Konfiguration aus Umgebungsvariablen +MQTT_HOST = os.getenv("MQTT_HOST", "rexfue.de") +MQTT_PORT = int(os.getenv("MQTT_PORT", 1883)) +MQTT_TOPIC = os.getenv("MQTT_TOPIC", "vantage/live") +MQTT_USER = os.getenv("MQTT_USER", "") +MQTT_PASSWORD = os.getenv("MQTT_PASSWORD", "") + +DB_FILE = os.getenv("DB_FILE", "wetterdaten.db") app = Flask(__name__)