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 .env
archive archive
wetter_heute.png 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 *** Versiongeschichte
V 1.0.1 2025-08-04 rxf
- kleine Textverbesserunegen
- keine Archivierung
V 1.0.0 2025-08-03 rxf V 1.0.0 2025-08-03 rxf
- erste laufende Version - erste laufende Version
''' '''
VERSION = "1.0.1"
VDATE = "2025-08-04"
import requests import requests
from PIL import Image from PIL import Image
@@ -19,7 +26,6 @@ from datetime import datetime
import re, os, smtplib import re, os, smtplib
from email.mime.text import MIMEText from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart 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_USER = os.getenv("GMX_EMAIL")
SMTP_PASS = os.getenv("GMX_PASSWORD") SMTP_PASS = os.getenv("GMX_PASSWORD")
load_dotenv() print(f"Wetterserver-Check\r\nVersion {VERSION} vom {VDATE}")
# ----------------------- # -----------------------
# Grafik herunterladen # Grafik herunterladen
@@ -81,21 +87,17 @@ sendit = False
if heutiges_datum == letztes_datum: if heutiges_datum == letztes_datum:
print("⚠️ Keine neue Grafik Datum gleich wie gestern.") print("⚠️ Keine neue Grafik Datum gleich wie gestern.")
body = f"Die Wettergrafik auf {url} wurde anscheinend nicht aktualisiert.\nErkanntes Datum: {heutiges_datum}" body = f"Die Wettergrafik auf {url} wurde anscheinend nicht aktualisiert.\nErkanntes Datum: {heutiges_datum}"
subject = "⚠️ Wetterserver steht!" subject = "⚠️ Wetterserver hängt!"
sendit = True sendit = True
else: else:
sendit = True sendit = True
print("✅ Neue Grafik erkannt.") print("✅ Neue Grafik erkannt.")
body = f"Die Wettergrafik auf {url} ist aktuell" body = f"Die Wettergrafik auf {url} ist aktuell: {heutiges_datum}"
subject = "Wetterserver OK!" subject = "Wetterserver OK!"
with open("last_date.txt", "w") as f: with open("last_date.txt", "w") as f:
f.write(heutiges_datum) 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 # 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 "------------------------------------"