feat(PROJ-17): Admin Dashboard Systemauslastung immer anzeigen
- Systemauslastungs-Sektion wird immer gerendert (nicht nur bei Erfolg) - Fehlermeldung wenn /api/admin/system/stats nicht erreichbar ist - Feature-Status auf In Review gesetzt Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
#!/bin/bash
|
||||
# archivmail Updater
|
||||
# Zieht die neueste Version aus Gitea, baut Frontend + Backend und startet Dienste neu.
|
||||
#
|
||||
# Aufruf (auf dem Server als root):
|
||||
# bash /opt/archivmail/update.sh
|
||||
#
|
||||
# Oder direkt von Gitea laden und ausführen:
|
||||
# curl -fsSL https://gitea.perlbach24.de/scripte/archivmail/raw/branch/main/update.sh | bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m'
|
||||
log() { echo -e "${GREEN}[OK]${NC} $*"; }
|
||||
info() { echo -e "${BLUE}[..]${NC} $*"; }
|
||||
warn() { echo -e "${YELLOW}[!!]${NC} $*"; }
|
||||
die() { echo -e "${RED}[ERR]${NC} $*" >&2; exit 1; }
|
||||
|
||||
[[ $EUID -eq 0 ]] || die "Bitte als root ausführen: sudo bash update.sh"
|
||||
|
||||
REPO_URL="${REPO_URL:-https://gitea.perlbach24.de/scripte/archivmail.git}"
|
||||
INSTALL_DIR="/opt/archivmail"
|
||||
BUILD_DIR="/opt/archivmail/_build"
|
||||
FRONTEND_DIR="/opt/archivmail/frontend"
|
||||
BIN_DIR="/opt/archivmail/bin"
|
||||
|
||||
echo ""
|
||||
echo " ╔══════════════════════════════════════╗"
|
||||
echo " ║ archivmail Updater ║"
|
||||
echo " ╚══════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
# ── Voraussetzungen prüfen ────────────────────────────────────────────────
|
||||
|
||||
command -v git >/dev/null || die "git nicht gefunden"
|
||||
command -v node >/dev/null || die "node nicht gefunden"
|
||||
command -v npm >/dev/null || die "npm nicht gefunden"
|
||||
command -v go >/dev/null || die "go nicht gefunden"
|
||||
|
||||
# ── Quellcode holen ───────────────────────────────────────────────────────
|
||||
|
||||
if [[ -d "$BUILD_DIR/.git" ]]; then
|
||||
info "Aktualisiere Quellcode aus Gitea..."
|
||||
git -C "$BUILD_DIR" fetch origin
|
||||
git -C "$BUILD_DIR" reset --hard origin/main
|
||||
log "Quellcode aktualisiert ($(git -C "$BUILD_DIR" log -1 --format='%h %s'))"
|
||||
else
|
||||
info "Lade Quellcode von $REPO_URL ..."
|
||||
mkdir -p "$BUILD_DIR"
|
||||
git clone "$REPO_URL" "$BUILD_DIR"
|
||||
log "Quellcode geladen"
|
||||
fi
|
||||
|
||||
# ── Go Backend bauen ──────────────────────────────────────────────────────
|
||||
|
||||
info "Baue Go Backend..."
|
||||
cd "$BUILD_DIR"
|
||||
go build -o "$BUILD_DIR/archivmail-new" ./cmd/archivmail/
|
||||
log "Go Backend gebaut"
|
||||
|
||||
# ── Next.js Frontend bauen ────────────────────────────────────────────────
|
||||
|
||||
info "Installiere Node-Abhängigkeiten..."
|
||||
npm ci --prefer-offline 2>/dev/null || npm ci
|
||||
log "Node-Abhängigkeiten installiert"
|
||||
|
||||
info "Baue Next.js Frontend..."
|
||||
npm run build
|
||||
log "Frontend gebaut"
|
||||
|
||||
# ── Dienste stoppen ───────────────────────────────────────────────────────
|
||||
|
||||
info "Stoppe Dienste..."
|
||||
systemctl stop archivmail-frontend 2>/dev/null || warn "archivmail-frontend nicht aktiv"
|
||||
systemctl stop archivmail 2>/dev/null || warn "archivmail nicht aktiv"
|
||||
|
||||
# ── Dateien einspielen ────────────────────────────────────────────────────
|
||||
|
||||
info "Spiele Backend ein..."
|
||||
mkdir -p "$BIN_DIR"
|
||||
cp "$BUILD_DIR/archivmail-new" "$BIN_DIR/archivmail"
|
||||
chmod +x "$BIN_DIR/archivmail"
|
||||
log "Backend eingespielt"
|
||||
|
||||
info "Spiele Frontend ein..."
|
||||
mkdir -p "$FRONTEND_DIR"
|
||||
rsync -a --delete \
|
||||
"$BUILD_DIR/.next/" "$FRONTEND_DIR/.next/" \
|
||||
2>/dev/null || cp -r "$BUILD_DIR/.next/." "$FRONTEND_DIR/.next/"
|
||||
cp "$BUILD_DIR/package.json" "$FRONTEND_DIR/package.json"
|
||||
cp "$BUILD_DIR/package-lock.json" "$FRONTEND_DIR/package-lock.json"
|
||||
cp "$BUILD_DIR/next.config.ts" "$FRONTEND_DIR/next.config.ts"
|
||||
|
||||
cd "$FRONTEND_DIR"
|
||||
npm ci --omit=dev --prefer-offline 2>/dev/null || npm ci --omit=dev
|
||||
log "Frontend eingespielt"
|
||||
|
||||
# ── Datenbankmigrationen (falls vorhanden) ────────────────────────────────
|
||||
|
||||
if [[ -f "$BIN_DIR/archivmail" ]]; then
|
||||
info "Führe Datenbankmigrationen durch..."
|
||||
"$BIN_DIR/archivmail" migrate 2>/dev/null && log "Migrationen abgeschlossen" \
|
||||
|| warn "Kein migrate-Befehl oder keine Migrationen nötig"
|
||||
fi
|
||||
|
||||
# ── Dienste starten ───────────────────────────────────────────────────────
|
||||
|
||||
info "Starte Dienste..."
|
||||
systemctl start archivmail
|
||||
systemctl start archivmail-frontend
|
||||
log "Dienste gestartet"
|
||||
|
||||
# ── Status prüfen ─────────────────────────────────────────────────────────
|
||||
|
||||
sleep 2
|
||||
BACKEND_OK=0
|
||||
FRONTEND_OK=0
|
||||
|
||||
systemctl is-active --quiet archivmail && BACKEND_OK=1
|
||||
systemctl is-active --quiet archivmail-frontend && FRONTEND_OK=1
|
||||
|
||||
echo ""
|
||||
echo " ┌──────────────────────────────────────┐"
|
||||
[[ $BACKEND_OK -eq 1 ]] && echo " │ Backend ✓ läuft │" \
|
||||
|| echo " │ Backend ✗ nicht aktiv │"
|
||||
[[ $FRONTEND_OK -eq 1 ]] && echo " │ Frontend ✓ läuft │" \
|
||||
|| echo " │ Frontend ✗ nicht aktiv │"
|
||||
echo " └──────────────────────────────────────┘"
|
||||
echo ""
|
||||
|
||||
[[ $BACKEND_OK -eq 1 && $FRONTEND_OK -eq 1 ]] && log "Update abgeschlossen." \
|
||||
|| warn "Ein oder mehrere Dienste sind nicht aktiv. Prüfe: journalctl -u archivmail -u archivmail-frontend"
|
||||
Reference in New Issue
Block a user