docker-Sachen dazu

This commit is contained in:
rxf
2025-08-04 11:27:31 +00:00
parent be4eb50796
commit f3fc1f5868
8 changed files with 89 additions and 10 deletions

6
.dockerignore Normal file
View File

@@ -0,0 +1,6 @@
.venv/
__pycache__/
*.pyc
logs
.env
.DS_Store

2
.gitignore vendored
View File

@@ -2,3 +2,5 @@
.env
archive
wetter_heute.png
last_date.txt
logs

31
Dockerfile Normal file
View File

@@ -0,0 +1,31 @@
FROM python:3.10-slim
# Install system dependencies
RUN apt-get update && apt-get install -y \
tesseract-ocr \
tesseract-ocr-deu \
cron \
&& rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /app
# Copy project files
COPY . /app
# Install Python packages
RUN pip install --no-cache-dir -r requirements.txt
# Set environment variables
ENV PYTHONUNBUFFERED=1
ENV TESSDATA_PREFIX=/usr/share/tesseract-ocr/5/tessdata
# Set up cron job
RUN echo "10 7 * * * bash /app/run_wetter.sh >> /app/logs/cron.log 2>&1" > wetter-cron \
&& crontab wetter-cron
# Make shell script executable
RUN chmod +x /app/run_wetter.sh
# Start cron in foreground
CMD ["cron", "-f"]

9
docker-compose.yml Normal file
View File

@@ -0,0 +1,9 @@
services:
wettercheck:
build: .
container_name: wetterserver
env_file:
- .env
volumes:
- ./logs:/app/logs
restart: unless-stopped

View File

@@ -1 +1 @@
2025-08-03
2025-08-04

20
main.py
View File

@@ -7,10 +7,17 @@ Falls es das gleiche Datum ist, wird eine E-Mail an rexfue@gmail.com gesendet.
*** Versiongeschichte
V 1.0.1 2025-08-04 rxf
- kleine Textverbesserunegen
- keine Archivierung
V 1.0.0 2025-08-03 rxf
- erste laufende Version
'''
VERSION = "1.0.1"
VDATE = "2025-08-04"
import requests
from PIL import Image
@@ -19,7 +26,6 @@ from datetime import datetime
import re, os, smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from dotenv import load_dotenv
# -----------------------
@@ -37,7 +43,7 @@ SMTP_PORT = 465
SMTP_USER = os.getenv("GMX_EMAIL")
SMTP_PASS = os.getenv("GMX_PASSWORD")
load_dotenv()
print(f"Wetterserver-Check\r\nVersion {VERSION} vom {VDATE}")
# -----------------------
# Grafik herunterladen
@@ -81,21 +87,17 @@ sendit = False
if heutiges_datum == letztes_datum:
print("⚠️ Keine neue Grafik Datum gleich wie gestern.")
body = f"Die Wettergrafik auf {url} wurde anscheinend nicht aktualisiert.\nErkanntes Datum: {heutiges_datum}"
subject = "⚠️ Wetterserver steht!"
subject = "⚠️ Wetterserver hängt!"
sendit = True
else:
sendit = True
print("✅ Neue Grafik erkannt.")
body = f"Die Wettergrafik auf {url} ist aktuell"
subject = "Wetterserver OK!"
body = f"Die Wettergrafik auf {url} ist aktuell: {heutiges_datum}"
subject = "Wetterserver OK!"
with open("last_date.txt", "w") as f:
f.write(heutiges_datum)
# Grafik archivieren
archivname = f"wetter_{datetime.today().strftime('%Y-%m-%d')}.png"
os.rename("wetter_heute.png", os.path.join("archive", archivname))
# -----------------------
# E-Mail senden
# -----------------------

10
requirements.txt Normal file
View File

@@ -0,0 +1,10 @@
certifi==2025.8.3
charset-normalizer==3.4.2
dotenv==0.9.9
idna==3.10
packaging==25.0
pillow==11.3.0
pytesseract==0.3.13
python-dotenv==1.1.1
requests==2.32.4
urllib3==2.5.0

19
run_wetter.sh Executable file
View File

@@ -0,0 +1,19 @@
#!/bin/bash
# Aktiviere virtuelle Umgebung
# source /home/rxf/Projekte/wetterserver/.venv/bin/activate
cd /app
# Protokollfunktion mit Zeitstempel
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') $1" >> logs/log
}
log ">>> Starte Wetterprüfung"
# Python-Skript ausführen und Ergebnis loggen
python main.py >> logs/log 2>&1
log ">>> Wetterprüfung abgeschlossen"
log "------------------------------------"