docker-Sachen dazu
This commit is contained in:
6
.dockerignore
Normal file
6
.dockerignore
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
.venv/
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
logs
|
||||||
|
.env
|
||||||
|
.DS_Store
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -2,3 +2,5 @@
|
|||||||
.env
|
.env
|
||||||
archive
|
archive
|
||||||
wetter_heute.png
|
wetter_heute.png
|
||||||
|
last_date.txt
|
||||||
|
logs
|
||||||
|
|||||||
31
Dockerfile
Normal file
31
Dockerfile
Normal 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
9
docker-compose.yml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
services:
|
||||||
|
wettercheck:
|
||||||
|
build: .
|
||||||
|
container_name: wetterserver
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
volumes:
|
||||||
|
- ./logs:/app/logs
|
||||||
|
restart: unless-stopped
|
||||||
@@ -1 +1 @@
|
|||||||
2025-08-03
|
2025-08-04
|
||||||
20
main.py
20
main.py
@@ -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
10
requirements.txt
Normal 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
19
run_wetter.sh
Executable 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 "------------------------------------"
|
||||||
Reference in New Issue
Block a user