Schulportal-Konventionen übernommen: Dark Mode (ThemeToggle), beispieldaten.py + generated.json, kimi.md, mail-server (Postfix-Relay + API), Deploy-Workflow (pscp/plink, npm_default), Screenshots in preview/

This commit is contained in:
2026-10-02 10:46:10 +02:00
parent ca97ea028f
commit b3dfb8ab7c
27 changed files with 7284 additions and 163 deletions
+13
View File
@@ -0,0 +1,13 @@
FROM alpine:3.20
RUN apk add --no-cache postfix ca-certificates
COPY main.cf /etc/postfix/main.cf
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh && \
mkdir -p /var/spool/postfix /etc/postfix
# Port 25 nur intern im Docker-Netz (kein -p beim Start!)
EXPOSE 25
ENTRYPOINT ["/entrypoint.sh"]
+20
View File
@@ -0,0 +1,20 @@
#!/bin/sh
set -e
# Absender-Umschreibung auf die Nicht-Antworten-Adresse des hocks.eu-Tenants.
# Bei Direktzustellung an den M365-Eingang vertraut der Konnektor der
# Absender-IP – Absenderadresse wird zentral umgeschrieben, damit keine
# fremden Absenderdomains entstehen.
CANONICAL_ADDRESS="${CANONICAL_ADDRESS:-noreply@hocks.eu}"
printf '/.+/ %s\n' "$CANONICAL_ADDRESS" > /etc/postfix/sender_canonical
# Optionalen Relayhost aus der Umgebung setzen (z. B. [mx-von-hocks.eu]:25)
if [ -n "${RELAY_HOST:-}" ]; then
postconf -e "relayhost = ${RELAY_HOST}"
fi
# Chroot in Containern deaktivieren (sonst lokale Unix-Sockets nicht erreichbar)
postconf -F '*/*/chroot=n'
echo "MP-Mail-Relay startet (Relayhost: ${RELAY_HOST:-direkt}, Absender -> $CANONICAL_ADDRESS)"
exec postfix start-fg
+32
View File
@@ -0,0 +1,32 @@
# Hocks Mail-Relay (Mieterportal): liefert intern angenommene Mails über den
# konfigurierten Relayhost aus (O365-MX-Direktzustellung wie im Schulportal,
# oder smarthost mit AUTH-Erweiterung möglich).
# KEIN SMTP AUTH noetig bei Direktzustellung – wichtig: Container ist nicht
# oeffentlich exponiert, Relaying nur aus dem Docker-Netz (mynetworks).
compatibility_level = 3.6
myhostname = mail.mieterportal.hocks.eu
mydomain = hocks.eu
myorigin = $myhostname
# relayhost wird zur Laufzeit vom Entrypoint aus $RELAY_HOST gesetzt
# (Direktzustellung: [mx-von-hocks.eu]:25). Leer = direkte Auslieferung.
smtp_tls_security_level = encrypt
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_loglevel = 1
# Alle Absender (Envelope + Header) auf die Nicht-Antworten-Adresse umschreiben
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = regexp:/etc/postfix/sender_canonical
# Nur intern erreichbar – Relaying nur aus dem Docker-Netz erlaubt (kein offenes Relay!)
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8 172.16.0.0/12
smtpd_relay_restrictions = permit_mynetworks, defer
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
smtpd_client_restrictions = permit_mynetworks, reject
maillog_file = /dev/stdout
biff = no
append_dot_mydomain = no