Fix: mx-Domain bekommt LE-Zertifikat + Postfix/Dovecot werden konfiguriert
- mailwolt-apply-domains: MAIL_HOST wird in ACME-Challenge-Block aufgenommen, certbot wird auch für die Mail-Domain ausgeführt, Postfix + Dovecot erhalten danach automatisch das neue Zertifikat - SslCertificatesTable: certbot-Ausgabe korrekt geparst (Einrückung mit Leerzeichen) - settings-form: "kein Zertifikat nötig" entfernt (Mail-Domain braucht Zertifikat) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main v1.1.279
parent
96e2b4d5ab
commit
d60d228012
|
|
@ -51,7 +51,7 @@ class SslCertificatesTable extends Component
|
||||||
if (str_contains($out, 'No certificates found')) return [];
|
if (str_contains($out, 'No certificates found')) return [];
|
||||||
|
|
||||||
$certs = [];
|
$certs = [];
|
||||||
$blocks = preg_split('/\n(?=Certificate Name:)/m', $out);
|
$blocks = preg_split('/\n(?=\s*Certificate Name:)/m', $out);
|
||||||
|
|
||||||
foreach ($blocks as $block) {
|
foreach ($blocks as $block) {
|
||||||
if (!preg_match('/Certificate Name:\s*(.+)/i', $block, $nameM)) continue;
|
if (!preg_match('/Certificate Name:\s*(.+)/i', $block, $nameM)) continue;
|
||||||
|
|
|
||||||
|
|
@ -363,7 +363,7 @@
|
||||||
{{ $label }}
|
{{ $label }}
|
||||||
@if($st === 'nodns') <span style="font-size:10px"> — kein DNS-Eintrag</span>
|
@if($st === 'nodns') <span style="font-size:10px"> — kein DNS-Eintrag</span>
|
||||||
@elseif($st === 'error') <span style="font-size:10px"> — fehlgeschlagen</span>
|
@elseif($st === 'error') <span style="font-size:10px"> — fehlgeschlagen</span>
|
||||||
@elseif($st === 'skip') <span style="font-size:10px;color:var(--mw-t4)"> — kein Zertifikat nötig</span>
|
@elseif($st === 'skip') <span style="font-size:10px;color:var(--mw-t4)"> — übersprungen</span>
|
||||||
@elseif($st === 'running') <span style="font-size:10px;color:var(--mw-t4)"> — läuft…</span>
|
@elseif($st === 'running') <span style="font-size:10px;color:var(--mw-t4)"> — läuft…</span>
|
||||||
@endif
|
@endif
|
||||||
</span>
|
</span>
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ cat > "${NGINX_SITE}" <<CONF
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
listen [::]:80;
|
listen [::]:80;
|
||||||
server_name ${UI_HOST} ${WEBMAIL_HOST};
|
server_name ${UI_HOST} ${WEBMAIL_HOST} ${MAIL_HOST};
|
||||||
|
|
||||||
root ${APP_DIR}/public;
|
root ${APP_DIR}/public;
|
||||||
index index.php index.html;
|
index index.php index.html;
|
||||||
|
|
@ -87,7 +87,7 @@ certbot_safe() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "${SSL_AUTO}" = "1" ]; then
|
if [ "${SSL_AUTO}" = "1" ]; then
|
||||||
for DOMAIN in "${UI_HOST}" "${WEBMAIL_HOST}"; do
|
for DOMAIN in "${UI_HOST}" "${WEBMAIL_HOST}" "${MAIL_HOST}"; do
|
||||||
[ -z "${DOMAIN}" ] && continue
|
[ -z "${DOMAIN}" ] && continue
|
||||||
if cert_needs_action "${DOMAIN}"; then
|
if cert_needs_action "${DOMAIN}"; then
|
||||||
certbot_safe "${DOMAIN}" || true
|
certbot_safe "${DOMAIN}" || true
|
||||||
|
|
@ -99,17 +99,19 @@ fi
|
||||||
# Nur HTTPS wenn LE-Cert tatsächlich vorhanden, sonst HTTP-only (kein self-signed Fallback)
|
# Nur HTTPS wenn LE-Cert tatsächlich vorhanden, sonst HTTP-only (kein self-signed Fallback)
|
||||||
UI_HAS_CERT=0
|
UI_HAS_CERT=0
|
||||||
WM_HAS_CERT=0
|
WM_HAS_CERT=0
|
||||||
|
MAIL_HAS_CERT=0
|
||||||
[ -f "/etc/letsencrypt/live/${UI_HOST}/fullchain.pem" ] && UI_HAS_CERT=1
|
[ -f "/etc/letsencrypt/live/${UI_HOST}/fullchain.pem" ] && UI_HAS_CERT=1
|
||||||
[ -f "/etc/letsencrypt/live/${WEBMAIL_HOST}/fullchain.pem" ] && WM_HAS_CERT=1
|
[ -f "/etc/letsencrypt/live/${WEBMAIL_HOST}/fullchain.pem" ] && WM_HAS_CERT=1
|
||||||
|
[ -f "/etc/letsencrypt/live/${MAIL_HOST}/fullchain.pem" ] && MAIL_HAS_CERT=1
|
||||||
(
|
(
|
||||||
|
|
||||||
if [ "${UI_HAS_CERT}" = "1" ] || [ "${WM_HAS_CERT}" = "1" ]; then
|
if [ "${UI_HAS_CERT}" = "1" ] || [ "${WM_HAS_CERT}" = "1" ]; then
|
||||||
# Mindestens ein Cert vorhanden → HTTP-Redirect Block
|
# Mindestens ein Web-Cert vorhanden → HTTP-Redirect Block (inkl. MAIL_HOST für ACME-Renewal)
|
||||||
cat <<CONF
|
cat <<CONF
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
listen [::]:80;
|
listen [::]:80;
|
||||||
server_name ${UI_HOST} ${WEBMAIL_HOST};
|
server_name ${UI_HOST} ${WEBMAIL_HOST} ${MAIL_HOST};
|
||||||
|
|
||||||
location /.well-known/acme-challenge/ {
|
location /.well-known/acme-challenge/ {
|
||||||
root ${ACME_ROOT};
|
root ${ACME_ROOT};
|
||||||
|
|
@ -220,8 +222,14 @@ if [ -d "${STATE_DIR}" ]; then
|
||||||
printf "error" > "${STATE_DIR}/webmail"
|
printf "error" > "${STATE_DIR}/webmail"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
# Mail-Domain: kein certbot im Wizard für MX → skip (kein Fehler, nur nicht zutreffend)
|
# Mail-Domain: LE-Cert für Postfix/Dovecot
|
||||||
[ -f "${STATE_DIR}/mail" ] && printf "skip" > "${STATE_DIR}/mail"
|
if [ -f "${STATE_DIR}/mail" ]; then
|
||||||
|
if [ "${MAIL_HAS_CERT}" = "1" ]; then
|
||||||
|
printf "done" > "${STATE_DIR}/mail"
|
||||||
|
else
|
||||||
|
printf "error" > "${STATE_DIR}/mail"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# done-Signal: immer schreiben damit der 2s-Poll stoppt
|
# done-Signal: immer schreiben damit der 2s-Poll stoppt
|
||||||
if [ "${UI_HAS_CERT}" = "1" ] || [ "${WM_HAS_CERT}" = "1" ]; then
|
if [ "${UI_HAS_CERT}" = "1" ] || [ "${WM_HAS_CERT}" = "1" ]; then
|
||||||
|
|
@ -234,5 +242,31 @@ if [ -d "${STATE_DIR}" ]; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# --- Phase 4: Postfix + Dovecot mit Mail-Domain-Zertifikat konfigurieren ---
|
||||||
|
if [ -n "${MAIL_HOST}" ] && [ "${MAIL_HAS_CERT}" = "1" ]; then
|
||||||
|
MAIL_CERT="/etc/letsencrypt/live/${MAIL_HOST}/fullchain.pem"
|
||||||
|
MAIL_KEY="/etc/letsencrypt/live/${MAIL_HOST}/privkey.pem"
|
||||||
|
|
||||||
|
# Postfix
|
||||||
|
if command -v postconf >/dev/null 2>&1; then
|
||||||
|
postconf -e "smtpd_tls_cert_file = ${MAIL_CERT}"
|
||||||
|
postconf -e "smtpd_tls_key_file = ${MAIL_KEY}"
|
||||||
|
postconf -e "smtp_tls_cert_file = ${MAIL_CERT}"
|
||||||
|
postconf -e "smtp_tls_key_file = ${MAIL_KEY}"
|
||||||
|
systemctl reload postfix 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Dovecot
|
||||||
|
if [ -d /etc/dovecot/conf.d ]; then
|
||||||
|
cat > /etc/dovecot/conf.d/10-ssl.conf <<DCONF
|
||||||
|
ssl = yes
|
||||||
|
ssl_cert = <${MAIL_CERT}
|
||||||
|
ssl_key = <${MAIL_KEY}
|
||||||
|
ssl_min_protocol = TLSv1.2
|
||||||
|
DCONF
|
||||||
|
systemctl reload dovecot 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
nginx -t && systemctl reload nginx
|
nginx -t && systemctl reload nginx
|
||||||
echo "mailwolt-apply-domains fertig"
|
echo "mailwolt-apply-domains fertig"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue