diff --git a/scripts/80-app.sh b/scripts/80-app.sh index 08366d5..f4ec18d 100644 --- a/scripts/80-app.sh +++ b/scripts/80-app.sh @@ -228,7 +228,7 @@ if [[ -f "${APP_DIR}/package.json" && ! -f "${APP_DIR}/public/build/manifest.jso fi # --- Abschluss: Caches + Rechte + Reloads ----------------------------------- -sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && php artisan optimize:clear && php artisan config:cache" +sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && php artisan optimize:clear && php artisan config:cache && php artisan optimize:clear" chown -R "$APP_USER":"$APP_GROUP" "$APP_DIR" chmod -R u=rwX,g=rwX,o=rX "$APP_DIR" diff --git a/scripts/95-monit.sh b/scripts/95-monit.sh index d267ced..872a4f0 100644 --- a/scripts/95-monit.sh +++ b/scripts/95-monit.sh @@ -38,4 +38,6 @@ check process nginx with pidfile /run/nginx.pid EOF chmod 600 /etc/monit/monitrc monit -t && systemctl enable --now monit -monit reload || true \ No newline at end of file +monit reload || true + +log "[✓] Monit konfiguriert und gestartet" \ No newline at end of file diff --git a/scripts/98-motd.sh b/scripts/98-motd.sh index 27483e3..c5ca436 100644 --- a/scripts/98-motd.sh +++ b/scripts/98-motd.sh @@ -6,9 +6,24 @@ log "MOTD installieren …" install -d /usr/local/bin cat >/usr/local/bin/mw-motd <<'SH' #!/usr/bin/env bash -set -euo pipefail -NC="\033[0m"; CY="\033[1;36m"; GR="\033[1;32m"; YE="\033[1;33m"; RD="\033[1;31m"; GY="\033[0;90m" -printf "\033[1;36m" +# bewusst KEIN "set -e"; MOTD soll nie hart abbrechen +set -u + +# Farben +NC="\033[0m"; CY="\033[1;36m"; GR="\033[1;32m"; YE="\033[1;33m"; RD="\033[1;31m"; GY="\033[0;90m"; WH="\033[1;37m" + +# Installer-Variablen (optional) +UI_HOST=""; WEBMAIL_HOST=""; MAIL_HOSTNAME=""; LE_EMAIL=""; PROXY_MODE=""; NPM_IP="" +[ -r /etc/mailwolt/installer.env ] && . /etc/mailwolt/installer.env || true +# Aus .env (falls vorhanden) +if [ -r /var/www/mailwolt/.env ]; then + LE_EMAIL="${LE_EMAIL:-$(grep -E '^LE_EMAIL=' /var/www/mailwolt/.env 2>/dev/null | sed 's/^LE_EMAIL=//')}" + PROXY_MODE="${PROXY_MODE:-$(grep -E '^PROXY_MODE=' /var/www/mailwolt/.env 2>/dev/null | sed 's/^PROXY_MODE=//')}" + NPM_IP="${NPM_IP:-$(grep -E '^NPM_IP=' /var/www/mailwolt/.env 2>/dev/null | sed 's/^NPM_IP=//')}" +fi + +# Header +printf "${CY}" cat <<'ASCII' :::: :::: ::: ::::::::::: ::: ::: ::: :::::::: ::: ::::::::::: +:+:+: :+:+:+ :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: @@ -18,24 +33,100 @@ cat <<'ASCII' #+# #+# #+# #+# #+# #+# #+#+# #+#+# #+# #+# #+# #+# ### ### ### ### ########### ########## ### ### ######## ########## ### ASCII -printf "\033[0m\n" -now="$(date '+%Y-%m-%d %H:%M:%S %Z')" -fqdn="$(hostname -f 2>/dev/null || hostname)" -ip_int="$(hostname -I 2>/dev/null | awk '{print $1}')" -ip_ext=""; command -v curl >/dev/null 2>&1 && ip_ext="$(curl -s --max-time 1 https://ifconfig.me || true)" -upt="$(uptime -p 2>/dev/null || true)" -cores="$(nproc 2>/dev/null || echo -n '?')" -load="$(awk '{print $1" / "$2" / "$3}' /proc/loadavg 2>/dev/null)" -svc(){ systemctl is-active --quiet "$1" && echo -e "${GR}OK${NC}" || echo -e "${RD}FAIL${NC}"; } +printf "${NC}\n" + +# Safe-Helfer (niemals Script killen) +grab() { eval "$1" 2>/dev/null || true; } +line() { printf "${GY}%-7s:${NC} %s\n" "$1" "$2"; } + +# Systemdaten +now="$(date '+%Y-%m-%d %H:%M:%S %Z' 2>/dev/null || echo -n '-')" +fqdn="$(hostname -f 2>/dev/null || hostname 2>/dev/null || echo -n '-')" +ip_int="$(hostname -I 2>/dev/null | awk '{print $1}' 2>/dev/null || true)" +ip_ext="$(curl -fsS --max-time 1 https://ifconfig.me 2>/dev/null || true)" +upt="$(uptime -p 2>/dev/null || echo -n '-')" +cores="$(nproc 2>/dev/null || echo -n '-')" +load="$(awk '{print $1" / "$2" / "$3}' /proc/loadavg 2>/dev/null || echo -n '-')" + +# RAM/SWAP (MiB) +mem_total="$(awk '/MemTotal/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '-')" +mem_avail="$(awk '/MemAvailable/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '0')" +mem_used=$(( ${mem_total:-0}-${mem_avail:-0} )) +swap_total="$(awk '/SwapTotal/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '-')" +swap_free="$(awk '/SwapFree/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '0')" +swap_used=$(( ${swap_total:-0}-${swap_free:-0} )) + +# Disks +disk_line(){ df -hP "$1" 2>/dev/null | awk 'NR==2{printf "%s/%s (%s used)", $3,$2,$5}'; } +disk_root="$(disk_line /)" +disk_var="$(disk_line /var)" + +svc_state(){ + local unit="$1" + if systemctl is-active --quiet "$unit"; then + printf "${GR}OK${NC}" + else + printf "${RD}FAIL${NC}" + fi +} + +# Ausgabe printf "${CY}Information as of:${NC} ${YE}%s${NC}\n" "$now" -printf "${GY}FQDN :${NC} %s\n" "$fqdn" -if [ -n "$ip_ext" ]; then printf "${GY}IP :${NC} %s ${GY}(ext:${NC} %s${GY})${NC}\n" "${ip_int:-?}" "$ip_ext"; else printf "${GY}IP :${NC} %s\n" "${ip_int:-?}"; fi -printf "${GY}Uptime :${NC} %s\n" "${upt:-?}" -printf "${GY}Cores :${NC} %s\n" "$cores" -printf "${GY}Load :${NC} %s (1/5/15)\n" "${load:-?}" -printf "${GY}Svc :${NC} postfix: $(svc postfix) dovecot: $(svc dovecot) nginx: $(svc nginx) mariadb: $(svc mariadb) redis: $(svc redis)\n" +line "FQDN" "$fqdn" +if [ -n "$ip_ext" ]; then + printf "${GY}%-7s:${NC} %s ${GY}(ext:${NC} %s${GY})${NC}\n" "IP" "${ip_int:--}" "$ip_ext" +else + line "IP" "${ip_int:--}" +fi +line "Uptime" "$upt" +printf "${GY}%-7s:${NC} %s cores, load %s (1/5/15)\n" "CPU" "$cores" "$load" +printf "${GY}%-7s:${NC} %s MiB used / %s MiB total\n" "RAM" "$mem_used" "$mem_total" +printf "${GY}%-7s:${NC} %s MiB used / %s MiB total\n" "SWAP" "$swap_used" "$swap_total" +line "Disk /" "${disk_root:-'-'}" +line "Disk/var" "${disk_var:-'-'}" + +# App/Installer Infos +[ -n "${LE_EMAIL:-}" ] && line "LE Mail" "$LE_EMAIL" +[ -n "${UI_HOST:-}" ] && line "UI" "$UI_HOST" +[ -n "${WEBMAIL_HOST:-}" ] && line "Webmail" "$WEBMAIL_HOST" +[ -n "${MAIL_HOSTNAME:-}" ]&& line "MX" "$MAIL_HOSTNAME" +if [ -n "${PROXY_MODE:-}" ]; then + if [ "$PROXY_MODE" = "1" ]; then + line "Proxy" "ja (NPM: ${NPM_IP:-unbekannt})" + elif [ "$PROXY_MODE" = "dev" ]; then + line "Proxy" "Entwicklungsmodus" + else + line "Proxy" "nein" + fi +fi + +# Services +printf "${WH}\nServices:${NC}\n" +printf " nginx … %b\n" "$(svc_state nginx)" +printf " mariadb … %b\n" "$(svc_state mariadb)" +printf " redis-server … %b\n" "$(svc_state redis-server)" +printf " postfix … %b\n" "$(svc_state postfix)" +printf " dovecot … %b\n" "$(svc_state dovecot)" +printf " mailwolt-ws … %b\n" "$(svc_state mailwolt-ws)" +printf " mailwolt-queue … %b\n" "$(svc_state mailwolt-queue)" +printf " mailwolt-schedule … %b\n" "$(svc_state mailwolt-schedule)" + +# Zertifikatskurzinfo (nur wenn vorhanden) +show_cert_exp(){ + local name="$1" path="$2" + if [ -r "$path" ]; then + local exp + exp="$(openssl x509 -in "$path" -noout -enddate 2>/dev/null | sed 's/notAfter=//')" + [ -n "$exp" ] && printf "${GY}%s cert:${NC} expires %s\n" "$name" "$exp" + fi +} +show_cert_exp "UI" "/etc/ssl/ui/fullchain.pem" +show_cert_exp "Webmail" "/etc/ssl/webmail/fullchain.pem" +show_cert_exp "MX" "/etc/ssl/mail/fullchain.pem" + +exit 0 SH -chmod +x /usr/local/bin/mw-motd +chmod 755 /usr/local/bin/mw-motd if [[ -d /etc/update-motd.d ]]; then cat >/etc/update-motd.d/10-mailwolt <<'SH' @@ -51,6 +142,41 @@ SH fi : > /etc/motd 2>/dev/null || true + + +#cat >/usr/local/bin/mw-motd <<'SH' +##!/usr/bin/env bash +#set -euo pipefail +#NC="\033[0m"; CY="\033[1;36m"; GR="\033[1;32m"; YE="\033[1;33m"; RD="\033[1;31m"; GY="\033[0;90m" +#printf "\033[1;36m" +#cat <<'ASCII' +#:::: :::: ::: ::::::::::: ::: ::: ::: :::::::: ::: ::::::::::: +#+:+:+: :+:+:+ :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: +#+:+ +:+:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +#+#+ +:+ +#+ +#++:++#++: +#+ +#+ +#+ +:+ +#+ +#+ +:+ +#+ +#+ +#+#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+#+ +#+ +#+ +#+ +#+ +#+ +##+# #+# #+# #+# #+# #+# #+#+# #+#+# #+# #+# #+# #+# +#### ### ### ### ########### ########## ### ### ######## ########## ### +#ASCII +#printf "\033[0m\n" +#now="$(date '+%Y-%m-%d %H:%M:%S %Z')" +#fqdn="$(hostname -f 2>/dev/null || hostname)" +#ip_int="$(hostname -I 2>/dev/null | awk '{print $1}')" +#ip_ext=""; command -v curl >/dev/null 2>&1 && ip_ext="$(curl -s --max-time 1 https://ifconfig.me || true)" +#upt="$(uptime -p 2>/dev/null || true)" +#cores="$(nproc 2>/dev/null || echo -n '?')" +#load="$(awk '{print $1" / "$2" / "$3}' /proc/loadavg 2>/dev/null)" +#svc(){ systemctl is-active --quiet "$1" && echo -e "${GR}OK${NC}" || echo -e "${RD}FAIL${NC}"; } +#printf "${CY}Information as of:${NC} ${YE}%s${NC}\n" "$now" +#printf "${GY}FQDN :${NC} %s\n" "$fqdn" +#if [ -n "$ip_ext" ]; then printf "${GY}IP :${NC} %s ${GY}(ext:${NC} %s${GY})${NC}\n" "${ip_int:-?}" "$ip_ext"; else printf "${GY}IP :${NC} %s\n" "${ip_int:-?}"; fi +#printf "${GY}Uptime :${NC} %s\n" "${upt:-?}" +#printf "${GY}Cores :${NC} %s\n" "$cores" +#printf "${GY}Load :${NC} %s (1/5/15)\n" "${load:-?}" +#printf "${GY}Svc :${NC} postfix: $(svc postfix) dovecot: $(svc dovecot) nginx: $(svc nginx) mariadb: $(svc mariadb) redis: $(svc redis)\n" +#SH +#chmod +x /usr/local/bin/mw-motd + #cat >/usr/local/bin/mw-motd <<'SH' ##!/usr/bin/env bash ## bewusst KEIN "set -e"; MOTD soll nie hart abbrechen