Dieser Artikel gehört zur Serie Linux-Router mit vielen Funktionen selber einrichten.
Es gibt viele Lösungen, sich an Geburtstage seiner Freunde und Bekannte erinnern zu lassen. Um alle meine Anforderungen an einen solchen Erinnerungsservice zu erfüllen, habe ich mir selber was geschrieben. Folgende Funktionen sollten abgedeckt werden:
- Einfache Weboberfläche
- Geräteunabhängige Benachrichtigung (E-Mail)
- Hinweis auf anstehende Geburtstage
- Resourcenschonend
- Heiminstallation um Daten zu Hause zu behalten
Die Umsetzung erfolgte schon vor Jahren auf einem Raspberry Pi. Später lief das über Jahre auf meinem CubieTruck und nun auf dem neuen Zotac. Auf dem neuem System sollte kein MySQL mehr laufen, somit wurde das System für PostgreSQL angepasst. Den Quellcode gibt es auf Github.
Die Webseite liefert ein statisches HTML mit Javascript aus, welches eine kleine PHP-API anspricht. Man kann Einträge anlegen, bearbeiten und löschen. Durch einen nächtlichen Cronjob wird eine PHP-CLI-Datei aufgerufen, die eine E-Mail mit allen heutigen Geburtstagskindern und den Terminen in den nächsten zwei Wochen schickt. Liegt an dem aktuellen Tag kein Geburtstag vor, so wird auch keine E-Mail verschickt.
Der Crontab-Eintrag sieht wie folgt aus, wobei man diesen für den Webseiten-Benutzer anlegen kann:
# m h dom mon dow command 30 5 * * * php /opt/birthdays/etc/report.php
Die PHP-Dateien müssen dann noch über einen Webserver ansprechbar gemacht werden. Ich nutze dafür PHP-FPM. Dieser wird dann über Nginx ausgeliefert. Hier die Nginx-Konfiguration mit einigen Erläuterungen in den Kommentaren:
server { # Eintrag reagiert nur auf HTTPS listen 443; ssl on; server_name geburtstage.georf.de; ssl_certificate /etc/letsencrypt/live/zotac.georf.de/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/zotac.georf.de/privkey.pem; # Webseite ist mit Passwort geschützt auth_basic "Wohnung"; auth_basic_user_file /etc/nginx/htpasswd_wohnung; root /opt/birthdays; index index.html index.php; try_files $uri $uri/ =404; client_max_body_size 10M; fastcgi_buffers 64 4K; # Letsencrypt kann ohne Passwort zugreifen location /.well-known/acme-challenge/ { root /tmp/certbot/; auth_basic off; } # API-Anfragen werden an PHP-FPM weitergeleitet location ~ ^/api(/.*)$ { include fastcgi_params; fastcgi_param REQUEST_URI $1; fastcgi_param DOCUMENT_URI $1; fastcgi_param SCRIPT_NAME $1; fastcgi_param PATH_INTO $1; fastcgi_param SCRIPT_FILENAME $document_root/api/index.php; fastcgi_pass unix:/var/run/php-fpm-www.sock; } }
Nun fehlt noch der Pool-Eintrag von PHP-FPM. Dazu nutze ich folgenden Inhalt:
[www] user = www-data group = www-data listen = /var/run/php-fpm-www.sock listen.owner = www-data listen.group = nginx pm = ondemand pm.max_children = 5 pm.process_idle_timeout = 10s; pm.max_requests = 500 access.log = /var/log/php-fpm.www.access.log chdir = / env[PATH] = /usr/local/bin:/usr/bin:/bin
1 thought on “Geburtstagserinnerungen per E-Mail”