134 lines
4.0 KiB
Bash
134 lines
4.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
source ./lib.sh
|
|
|
|
log "systemd Units (Reverb / Scheduler / Queue / Mail) …"
|
|
|
|
cat > /etc/systemd/system/${APP_USER}-ws.service <<EOF
|
|
[Unit]
|
|
Description=${APP_NAME} WebSocket Backend
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
[Service]
|
|
Type=simple
|
|
Environment=NODE_ENV=production WS_PORT=8080
|
|
User=${APP_USER}
|
|
Group=${APP_GROUP}
|
|
WorkingDirectory=${APP_DIR}
|
|
ExecStartPre=/usr/bin/bash -lc 'test -f .env'
|
|
ExecStartPre=/usr/bin/bash -lc 'test -d vendor'
|
|
ExecStart=/usr/bin/php artisan reverb:start --host=127.0.0.1 --port=8080 --no-interaction
|
|
Restart=always
|
|
RestartSec=2
|
|
StandardOutput=append:/var/log/${APP_USER}-ws.log
|
|
StandardError=append:/var/log/${APP_USER}-ws.log
|
|
KillSignal=SIGINT
|
|
TimeoutStopSec=15
|
|
UMask=0002
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
cat > /etc/systemd/system/${APP_USER}-schedule.service <<EOF
|
|
[Unit]
|
|
Description=${APP_NAME} Laravel Scheduler
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
[Service]
|
|
Type=simple
|
|
User=${APP_USER}
|
|
Group=${APP_GROUP}
|
|
WorkingDirectory=${APP_DIR}
|
|
ExecStartPre=/usr/bin/bash -lc 'test -f .env'
|
|
ExecStartPre=/usr/bin/bash -lc 'test -d vendor'
|
|
ExecStart=/usr/bin/php artisan schedule:work
|
|
Restart=always
|
|
RestartSec=2
|
|
StandardOutput=append:/var/log/${APP_USER}-schedule.log
|
|
StandardError=append:/var/log/${APP_USER}-schedule.log
|
|
KillSignal=SIGINT
|
|
TimeoutStopSec=15
|
|
UMask=0002
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
cat > /etc/systemd/system/${APP_USER}-queue.service <<EOF
|
|
[Unit]
|
|
Description=${APP_NAME} Queue Worker
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
[Service]
|
|
Type=simple
|
|
User=${APP_USER}
|
|
Group=${APP_GROUP}
|
|
WorkingDirectory=${APP_DIR}
|
|
ExecStartPre=/usr/bin/bash -lc 'test -f .env'
|
|
ExecStartPre=/usr/bin/bash -lc 'test -d vendor'
|
|
ExecStart=/usr/bin/php artisan queue:work --queue=default,notify --tries=1
|
|
Restart=always
|
|
RestartSec=2
|
|
StandardOutput=append:/var/log/${APP_USER}-queue.log
|
|
StandardError=append:/var/log/${APP_USER}-queue.log
|
|
KillSignal=SIGINT
|
|
TimeoutStopSec=15
|
|
UMask=0002
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
chown root:root /etc/systemd/system/${APP_USER}-*.service
|
|
chmod 644 /etc/systemd/system/${APP_USER}-*.service
|
|
touch /var/log/${APP_USER}-ws.log /var/log/${APP_USER}-schedule.log /var/log/${APP_USER}-queue.log
|
|
chown ${APP_USER}:${APP_GROUP} /var/log/${APP_USER}-*.log
|
|
chmod 664 /var/log/${APP_USER}-*.log
|
|
|
|
systemctl daemon-reload
|
|
|
|
# App-Dienste
|
|
if sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && php artisan list --no-ansi | grep -qE '(^| )reverb:start( |$)'"; then
|
|
systemctl enable --now ${APP_USER}-ws
|
|
else
|
|
systemctl disable --now ${APP_USER}-ws >/dev/null 2>&1 || true
|
|
fi
|
|
systemctl enable --now ${APP_USER}-schedule
|
|
systemctl enable --now ${APP_USER}-queue
|
|
|
|
# Mail-Dienste starten
|
|
systemctl enable --now rspamd opendkim postfix dovecot || true
|
|
|
|
# PHP-FPM: Unit erkennen, enable + (re)load
|
|
enable_and_touch_php_fpm() {
|
|
for u in php8.3-fpm php8.2-fpm php8.1-fpm php8.0-fpm php7.4-fpm php-fpm; do
|
|
if systemctl list-unit-files | grep -q "^${u}\.service"; then
|
|
systemctl enable --now "$u" || true
|
|
systemctl reload "$u" || systemctl restart "$u" || true
|
|
echo "[i] PHP-FPM unit: $u"
|
|
return 0
|
|
fi
|
|
done
|
|
echo "[!] Keine passende php-fpm Unit gefunden."
|
|
}
|
|
enable_and_touch_php_fpm
|
|
|
|
# Falls in 80-app.sh DKIM installiert wurde: jetzt einmal reloaden
|
|
if [[ -e /run/mailwolt.need-opendkim-reload ]]; then
|
|
systemctl reload opendkim || true
|
|
rm -f /run/mailwolt.need-opendkim-reload || true
|
|
fi
|
|
|
|
# Falls Zert-Fix markiert ist: Dovecot neu laden
|
|
if [[ -e /run/mailwolt.need-dovecot-reload ]]; then
|
|
systemctl reload dovecot || true
|
|
rm -f /run/mailwolt.need-dovecot-reload || true
|
|
fi
|
|
|
|
# Falls DB-Migration schon durch: einmal reload
|
|
db_ready(){ mysql -u"${DB_USER}" -p"${DB_PASS}" -h 127.0.0.1 -D "${DB_NAME}" -e "SHOW TABLES LIKE 'migrations'\G" >/dev/null 2>&1; }
|
|
if db_ready; then
|
|
systemctl reload postfix || true
|
|
fi
|
|
|
|
# Mini-Portcheck (hilft beim Installer-Output)
|
|
echo "Listening (25/465/587):"
|
|
ss -ltnp | awk '$4 ~ /:(25|465|587)$/ {print " " $0}' |