130 lines
4.4 KiB
Bash
130 lines
4.4 KiB
Bash
#!/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}}"
|
||
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]}"
|
||
fi
|
||
if [[ "$WEBMAIL_FQDN" =~ ^([^.]+)\.(.+)$ ]]; then
|
||
WEBMAIL_SUB="${BASH_REMATCH[1]}"
|
||
fi
|
||
|
||
SYSMAIL_SUB="${SYSMAIL_SUB:-sysmail}"
|
||
SYSMAIL_DOMAIN="${SYSMAIL_SUB}.${BASE_DOMAIN}"
|
||
# 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
|
||
export SERVER_PUBLIC_IPV4 SERVER_PUBLIC_IPV6 APP_TZ APP_LOCALE
|
||
|
||
install -d -m 0755 /etc/mailwolt
|
||
cat >/etc/mailwolt/installer.env <<EOF
|
||
BASE_DOMAIN=${BASE_DOMAIN}
|
||
MTA_SUB=${MTA_SUB}
|
||
UI_SUB=${UI_SUB}
|
||
WEBMAIL_SUB=${WEBMAIL_SUB}
|
||
|
||
MAIL_HOSTNAME=${MAIL_HOSTNAME}
|
||
UI_HOST=${UI_HOST}
|
||
WEBMAIL_HOST=${WEBMAIL_HOST}
|
||
|
||
SYSMAIL_SUB=${SYSMAIL_SUB}
|
||
SYSMAIL_DOMAIN=${SYSMAIL_DOMAIN}
|
||
|
||
DKIM_ENABLE=${DKIM_ENABLE}
|
||
DKIM_SELECTOR=${DKIM_SELECTOR}
|
||
DKIM_GENERATE=${DKIM_GENERATE}
|
||
|
||
DB_HOST=127.0.0.1
|
||
DB_NAME=${DB_NAME}
|
||
DB_USER=${DB_USER}
|
||
DB_PASS=${DB_PASS}
|
||
|
||
SERVER_PUBLIC_IPV4=${SERVER_PUBLIC_IPV4}
|
||
SERVER_PUBLIC_IPV6=${SERVER_PUBLIC_IPV6}
|
||
APP_ENV=${APP_ENV}
|
||
EOF
|
||
|
||
# ── Sequenz ────────────────────────────────────────────────────────────────
|
||
for STEP in 10-provision 20-ssl 21-le-deploy-hook 22-dkim-helper 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 |