#!/usr/bin/env bash set -euo pipefail # --- Flags / Modi --- DEV_MODE=0 PROXY_MODE=0 NPM_IP="" while [[ $# -gt 0 ]]; do case "$1" in -dev) DEV_MODE=1 ;; -proxy) PROXY_MODE=1; NPM_IP="${2:-}"; shift ;; esac shift done APP_ENV="${APP_ENV:-$([[ $DEV_MODE -eq 1 ]] && echo local || echo production)}" APP_DEBUG="${APP_DEBUG:-$([[ $DEV_MODE -eq 1 ]] && echo true || echo false)}" export DEV_MODE PROXY_MODE NPM_IP APP_ENV APP_DEBUG DB_PASS="${DB_PASS:-$(openssl rand -hex 16)}" REDIS_PASS="${REDIS_PASS:-$(openssl rand -hex 16)}" export DB_PASS REDIS_PASS cd "$(dirname "$0")" source ./lib.sh require_root header # ── Defaults ──────────────────────────────────────────────────────────────── APP_NAME="${APP_NAME:-MailWolt}" APP_USER="${APP_USER:-mailwolt}" APP_GROUP="${APP_GROUP:-www-data}" APP_USER_PREFIX="${APP_USER_PREFIX:-mw}" APP_DIR="${APP_DIR:-/var/www/${APP_USER}}" BASE_DOMAIN="${BASE_DOMAIN:-example.com}" UI_SUB="${UI_SUB:-ui}" WEBMAIL_SUB="${WEBMAIL_SUB:-webmail}" MTA_SUB="${MTA_SUB:-mx}" DB_NAME="${DB_NAME:-${APP_USER}}" DB_USER="${DB_USER:-${APP_USER}}" SERVER_PUBLIC_IPV4="$(detect_ip)" SERVER_PUBLIC_IPV6="$(detect_ipv6)" DEFAULT_TZ="$(detect_timezone)" DEFAULT_LOCALE="$(guess_locale_from_tz "$DEFAULT_TZ")" echo -e "${GREY}Erkannte IP (v4): ${SERVER_PUBLIC_IPV4} v6: ${SERVER_PUBLIC_IPV6:-–}${NC}" # ── FQDNs abfragen ─────────────────────────────────────────────────────────── read -r -p "Mailserver FQDN (MX, z.B. mx.domain.tld) [Enter=${MTA_SUB}.${BASE_DOMAIN}]: " MTA_FQDN read -r -p "UI / Admin-Panel FQDN (z.B. ui.domain.tld) [Enter=${UI_SUB}.${BASE_DOMAIN}]: " UI_FQDN read -r -p "Webmail FQDN (z.B. webmail.domain.tld) [Enter=${WEBMAIL_SUB}.${BASE_DOMAIN}]: " WEBMAIL_FQDN # Defaults, wenn Enter gedrückt MTA_FQDN="${MTA_FQDN:-${MTA_SUB}.${BASE_DOMAIN}}" UI_FQDN="${UI_FQDN:-${UI_SUB}.${BASE_DOMAIN}}" WEBMAIL_FQDN="${WEBMAIL_FQDN:-${WEBMAIL_SUB}.${BASE_DOMAIN}}" SYSMAIL_SUB="${SYSMAIL_SUB:-sysmail}" SYSMAIL_DOMAIN="${SYSMAIL_SUB}.${BASE_DOMAIN}" DKIM_ENABLE="${DKIM_ENABLE:-1}" DKIM_SELECTOR="${DKIM_SELECTOR:-mwl1}" DKIM_GENERATE="${DKIM_GENERATE:-1}" # BASE_DOMAIN und Sub-Labels aus MTA/UI/WEBMAIL ableiten (robust) if [[ "$MTA_FQDN" =~ ^([^.]+)\.(.+)$ ]]; then MTA_SUB="${BASH_REMATCH[1]}" BASE_DOMAIN="${BASH_REMATCH[2]}" fi if [[ "$UI_FQDN" =~ ^([^.]+)\.(.+)$ ]]; then UI_SUB="${BASH_REMATCH[1]}" # BASE_DOMAIN hier NICHT überschreiben (wir folgen MX) fi if [[ "$WEBMAIL_FQDN" =~ ^([^.]+)\.(.+)$ ]]; then WEBMAIL_SUB="${BASH_REMATCH[1]}" fi # Kanonische Host-Variablen (NIE wieder zusammenbauen – nimm die FQDNs) MAIL_HOSTNAME="${MTA_FQDN}" UI_HOST="${UI_FQDN}" WEBMAIL_HOST="${WEBMAIL_FQDN}" # Zeitzone/Locale sinnvoll setzen (könntest du auch noch abfragen) APP_TZ="${APP_TZ:-$DEFAULT_TZ}" APP_LOCALE="${APP_LOCALE:-$DEFAULT_LOCALE}" # ── Variablen exportieren ─────────────────────────────────────────────────── export APP_NAME APP_USER APP_GROUP APP_USER_PREFIX APP_DIR export BASE_DOMAIN UI_SUB WEBMAIL_SUB MTA_SUB export SYSMAIL_SUB SYSMAIL_DOMAIN DKIM_ENABLE DKIM_SELECTOR DKIM_GENERATE export UI_HOST WEBMAIL_HOST MAIL_HOSTNAME export DB_NAME DB_USER DB_PASS export SERVER_PUBLIC_IPV4 SERVER_PUBLIC_IPV6 APP_TZ APP_LOCALE # ── Sequenz ──────────────────────────────────────────────────────────────── for STEP in 10-provision 20-ssl 21-le-deploy-hook 30-db 40-postfix 50-dovecot 60-rspamd-opendkim 70-nginx 75-le-issue 80-app 90-services 95-monit 98-motd 99-summary do log ">>> Running ${STEP}.sh" bash "./${STEP}.sh" done