feat: redesign CMS and unify German admin UI
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# ANOUMA — production server installer.
|
||||
# ANOUMA - production server installer.
|
||||
#
|
||||
# git clone https://github.com/whitehai11/anouma.git && cd anouma
|
||||
# chmod +x setup.sh && ./setup.sh
|
||||
@@ -10,7 +10,7 @@
|
||||
# and installs the server-side deploy.sh + docker-compose.yml.
|
||||
#
|
||||
# From then on, GitHub Actions owns all deployments (see
|
||||
# .github/workflows/release.yml) — there is no update.sh. Pushing a release
|
||||
# .github/workflows/release.yml) - there is no update.sh. Pushing a release
|
||||
# tag (vX.Y.Z) is the only way production gets updated.
|
||||
#
|
||||
# Safe to re-run: never regenerates an existing secret or SSH key, never
|
||||
@@ -110,14 +110,14 @@ step "System check"
|
||||
OS_NAME="$(uname -s)"
|
||||
ARCH_NAME="$(uname -m)"
|
||||
log_info "OS: $OS_NAME, Architecture: $ARCH_NAME"
|
||||
[ "$OS_NAME" = "Linux" ] || log_warn "Dieses Script wurde für Linux (Ubuntu/Debian) gebaut — andere Betriebssysteme werden nicht offiziell unterstützt."
|
||||
[ "$OS_NAME" = "Linux" ] || log_warn "Dieses Script wurde für Linux (Ubuntu/Debian) gebaut - andere Betriebssysteme werden nicht offiziell unterstützt."
|
||||
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
SUDO=""
|
||||
else
|
||||
command -v sudo >/dev/null 2>&1 || fail "Dieses Script braucht root-Rechte (Systembenutzer, /opt, Paketinstallation)." "Als root ausführen oder sudo installieren."
|
||||
SUDO="sudo"
|
||||
log_info "Läuft ohne root — verwende sudo für privilegierte Schritte."
|
||||
log_info "Läuft ohne root - verwende sudo für privilegierte Schritte."
|
||||
fi
|
||||
|
||||
PKG_INSTALL=""
|
||||
@@ -132,7 +132,7 @@ ensure_tool() {
|
||||
return
|
||||
fi
|
||||
if [ -n "$PKG_INSTALL" ]; then
|
||||
log_warn "$bin nicht gefunden — installiere Paket '$pkg' …"
|
||||
log_warn "$bin nicht gefunden - installiere Paket '$pkg' …"
|
||||
$SUDO apt-get update -y >/dev/null 2>&1 || true
|
||||
$PKG_INSTALL "$pkg" || fail "$bin konnte nicht automatisch installiert werden." "Installiere '$pkg' manuell und starte setup.sh erneut."
|
||||
command -v "$bin" >/dev/null 2>&1 || fail "$bin fehlt weiterhin nach der Installation."
|
||||
@@ -146,12 +146,12 @@ ensure_tool git git
|
||||
ensure_tool openssl openssl
|
||||
ensure_tool curl curl
|
||||
ensure_tool ssh-keygen openssh-client
|
||||
command -v wget >/dev/null 2>&1 || log_info "wget nicht gefunden — wird hier nicht benötigt."
|
||||
command -v wget >/dev/null 2>&1 || log_info "wget nicht gefunden - wird hier nicht benötigt."
|
||||
|
||||
if systemctl is-active --quiet ssh 2>/dev/null || systemctl is-active --quiet sshd 2>/dev/null; then
|
||||
log_success "SSH-Server läuft."
|
||||
else
|
||||
log_warn "Kein laufender SSH-Server erkannt (ssh/sshd) — GitHub Actions kann ohne einen laufenden SSH-Server nicht deployen. Installiere/starte z. B. 'openssh-server'."
|
||||
log_warn "Kein laufender SSH-Server erkannt (ssh/sshd) - GitHub Actions kann ohne einen laufenden SSH-Server nicht deployen. Installiere/starte z. B. 'openssh-server'."
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -180,7 +180,7 @@ DOCKER="docker"
|
||||
if ! docker info >/dev/null 2>&1; then
|
||||
if $SUDO docker info >/dev/null 2>&1; then
|
||||
DOCKER="$SUDO docker"
|
||||
log_warn "Docker braucht hier noch sudo (Gruppenmitgliedschaft wirkt erst nach erneutem Login) — setup.sh verwendet sudo für diesen Lauf."
|
||||
log_warn "Docker braucht hier noch sudo (Gruppenmitgliedschaft wirkt erst nach erneutem Login) - setup.sh verwendet sudo für diesen Lauf."
|
||||
else
|
||||
fail "Docker-Daemon läuft nicht oder ist nicht erreichbar." "Starte Docker: sudo systemctl start docker"
|
||||
fi
|
||||
@@ -196,9 +196,9 @@ fi
|
||||
log_success "Docker Compose erkannt: $($COMPOSE version | head -n1)"
|
||||
|
||||
if command -v node >/dev/null 2>&1; then
|
||||
log_info "Node.js auf dem Host erkannt: $(node --version) (wird nicht benötigt — ANOUMA läuft und wird ausschließlich in Docker gebaut/betrieben)."
|
||||
log_info "Node.js auf dem Host erkannt: $(node --version) (wird nicht benötigt - ANOUMA läuft und wird ausschließlich in Docker gebaut/betrieben)."
|
||||
else
|
||||
log_info "Node.js nicht auf dem Host installiert — das ist beabsichtigt, npm wird nur innerhalb von Docker (CI-Build) verwendet."
|
||||
log_info "Node.js nicht auf dem Host installiert - das ist beabsichtigt, npm wird nur innerhalb von Docker (CI-Build) verwendet."
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -215,7 +215,7 @@ if [ -d "$PROD_DIR" ] && [ -f "$PROD_DIR/.env" ]; then
|
||||
CHOICE="$(ask "Auswahl" "1")"
|
||||
case "$CHOICE" in
|
||||
2) log_info "Setup abgebrochen. Keine Änderungen vorgenommen."; exit 0 ;;
|
||||
*) log_info "Verwende bestehende Installation in $PROD_DIR — bestehende Daten bleiben unangetastet." ;;
|
||||
*) log_info "Verwende bestehende Installation in $PROD_DIR - bestehende Daten bleiben unangetastet." ;;
|
||||
esac
|
||||
else
|
||||
FRESH_INSTALL=true
|
||||
@@ -247,11 +247,11 @@ if [ -n "$DETECTED_NPM_NETWORK" ]; then
|
||||
NPM_DETECTED=true
|
||||
log_success "Nginx Proxy Manager erkannt (Netzwerk: $DETECTED_NPM_NETWORK)"
|
||||
else
|
||||
log_info "Nginx Proxy Manager wurde nicht erkannt — ANOUMA läuft eigenständig, das ist kein Fehler."
|
||||
log_info "Nginx Proxy Manager wurde nicht erkannt - ANOUMA läuft eigenständig, das ist kein Fehler."
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 6–8. .env — full generation, secrets, interactive questions
|
||||
# 6-8. .env - full generation, secrets, interactive questions
|
||||
# ---------------------------------------------------------------------------
|
||||
step ".env"
|
||||
|
||||
@@ -261,8 +261,8 @@ gen_secret() { openssl rand -hex 32; }
|
||||
env_get() { $SUDO grep -E "^$1=" "$ENV_FILE" 2>/dev/null | tail -n1 | cut -d'=' -f2- || true; }
|
||||
# Rewrites the file via a local temp file + `printf` (normal argument
|
||||
# passing, never re-interpolated into a nested shell string) so arbitrary
|
||||
# characters in $value — quotes, backslashes, anything a typed SMTP/registry
|
||||
# password might contain — can never break quoting or be misinterpreted.
|
||||
# characters in $value - quotes, backslashes, anything a typed SMTP/registry
|
||||
# password might contain - can never break quoting or be misinterpreted.
|
||||
#
|
||||
# The value is written double-quoted, with backslashes and double quotes
|
||||
# escaped: deploy.sh later `source`s this file as a bash script, so an
|
||||
@@ -283,7 +283,7 @@ env_set() {
|
||||
$SUDO cp "$tmp" "$ENV_FILE"
|
||||
rm -f "$tmp"
|
||||
}
|
||||
# Only fills a key in if currently missing/blank — makes generation safe to
|
||||
# Only fills a key in if currently missing/blank - makes generation safe to
|
||||
# re-run (existing secrets/config survive every future setup.sh run).
|
||||
env_ensure() {
|
||||
local key="$1" value="$2"
|
||||
@@ -294,7 +294,7 @@ env_ensure() {
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
log_info "Erstelle neue $ENV_FILE …"
|
||||
$SUDO tee "$ENV_FILE" >/dev/null <<'EOF'
|
||||
# Generated by setup.sh — see DEPLOYMENT.md for the full reference.
|
||||
# Generated by setup.sh - see DEPLOYMENT.md for the full reference.
|
||||
DATABASE_URI=
|
||||
POSTGRES_USER=postgres
|
||||
POSTGRES_PASSWORD=
|
||||
@@ -329,10 +329,10 @@ EOF
|
||||
fi
|
||||
|
||||
# --- secrets --------------------------------------------------------------
|
||||
env_ensure PAYLOAD_SECRET "$(gen_secret)" && log_info "PAYLOAD_SECRET generiert." || log_info "PAYLOAD_SECRET bereits vorhanden — unverändert."
|
||||
env_ensure MEETING_SESSION_SECRET "$(gen_secret)" && log_info "MEETING_SESSION_SECRET generiert." || log_info "MEETING_SESSION_SECRET bereits vorhanden — unverändert."
|
||||
env_ensure ANALYTICS_SALT_SECRET "$(gen_secret)" && log_info "ANALYTICS_SALT_SECRET generiert." || log_info "ANALYTICS_SALT_SECRET bereits vorhanden — unverändert."
|
||||
env_ensure CRON_SECRET "$(gen_secret)" && log_info "CRON_SECRET generiert." || log_info "CRON_SECRET bereits vorhanden — unverändert."
|
||||
env_ensure PAYLOAD_SECRET "$(gen_secret)" && log_info "PAYLOAD_SECRET generiert." || log_info "PAYLOAD_SECRET bereits vorhanden - unverändert."
|
||||
env_ensure MEETING_SESSION_SECRET "$(gen_secret)" && log_info "MEETING_SESSION_SECRET generiert." || log_info "MEETING_SESSION_SECRET bereits vorhanden - unverändert."
|
||||
env_ensure ANALYTICS_SALT_SECRET "$(gen_secret)" && log_info "ANALYTICS_SALT_SECRET generiert." || log_info "ANALYTICS_SALT_SECRET bereits vorhanden - unverändert."
|
||||
env_ensure CRON_SECRET "$(gen_secret)" && log_info "CRON_SECRET generiert." || log_info "CRON_SECRET bereits vorhanden - unverändert."
|
||||
|
||||
if env_ensure POSTGRES_PASSWORD "$(gen_secret)"; then
|
||||
log_info "POSTGRES_PASSWORD generiert."
|
||||
@@ -341,7 +341,7 @@ if env_ensure POSTGRES_PASSWORD "$(gen_secret)"; then
|
||||
PG_PASSWORD="$(env_get POSTGRES_PASSWORD)"
|
||||
env_set DATABASE_URI "postgresql://${PG_USER}:${PG_PASSWORD}@postgres:5432/${PG_DB}"
|
||||
else
|
||||
log_info "POSTGRES_PASSWORD bereits vorhanden — unverändert."
|
||||
log_info "POSTGRES_PASSWORD bereits vorhanden - unverändert."
|
||||
fi
|
||||
|
||||
# --- interactive questions (only for values with no safe automatic value) -
|
||||
@@ -351,7 +351,7 @@ if [ -z "$(env_get NEXT_PUBLIC_SERVER_URL)" ]; then
|
||||
env_set NEXT_PUBLIC_SERVER_URL "$APP_URL"
|
||||
[ -z "$(env_get SMTP_FROM)" ] && env_set SMTP_FROM "ANOUMA <no-reply@${DOMAIN}>"
|
||||
else
|
||||
log_info "NEXT_PUBLIC_SERVER_URL bereits vorhanden — unverändert."
|
||||
log_info "NEXT_PUBLIC_SERVER_URL bereits vorhanden - unverändert."
|
||||
fi
|
||||
|
||||
if [ -z "$(env_get LIVEKIT_URL)" ]; then
|
||||
@@ -359,8 +359,8 @@ if [ -z "$(env_get LIVEKIT_URL)" ]; then
|
||||
LIVEKIT_DOMAIN="$(ask "LiveKit-Domain (DNS + TLS-Reverse-Proxy nötig)" "livekit.${BASE_DOMAIN}" "LIVEKIT_DOMAIN")"
|
||||
env_set LIVEKIT_URL "https://${LIVEKIT_DOMAIN}"
|
||||
fi
|
||||
env_ensure LIVEKIT_API_KEY "LK$(openssl rand -hex 12)" && log_info "LIVEKIT_API_KEY generiert." || log_info "LIVEKIT_API_KEY bereits vorhanden — unverändert."
|
||||
env_ensure LIVEKIT_API_SECRET "$(gen_secret)" && log_info "LIVEKIT_API_SECRET generiert." || log_info "LIVEKIT_API_SECRET bereits vorhanden — unverändert."
|
||||
env_ensure LIVEKIT_API_KEY "LK$(openssl rand -hex 12)" && log_info "LIVEKIT_API_KEY generiert." || log_info "LIVEKIT_API_KEY bereits vorhanden - unverändert."
|
||||
env_ensure LIVEKIT_API_SECRET "$(gen_secret)" && log_info "LIVEKIT_API_SECRET generiert." || log_info "LIVEKIT_API_SECRET bereits vorhanden - unverändert."
|
||||
|
||||
if [ -z "$(env_get SMTP_HOST)" ]; then
|
||||
SETUP_SMTP="$(ask_yn "SMTP-Zugangsdaten jetzt eintragen? (sonst später manuell in .env)" "N")"
|
||||
@@ -391,7 +391,7 @@ if [ "$REGISTRY_HTTP_CODE" = "200" ] || [ "$REGISTRY_HTTP_CODE" = "401" ]; then
|
||||
REGISTRY_REACHABLE=true
|
||||
log_success "Registry erreichbar (HTTP $REGISTRY_HTTP_CODE)."
|
||||
else
|
||||
log_warn "Registry unter https://${REGISTRY_HOST}/v2/ nicht erreichbar (HTTP $REGISTRY_HTTP_CODE) — ggf. später erneut prüfen."
|
||||
log_warn "Registry unter https://${REGISTRY_HOST}/v2/ nicht erreichbar (HTTP $REGISTRY_HTTP_CODE) - ggf. später erneut prüfen."
|
||||
fi
|
||||
|
||||
if [ -z "$(env_get REGISTRY_USERNAME)" ]; then
|
||||
@@ -402,7 +402,7 @@ if [ -z "$(env_get REGISTRY_USERNAME)" ]; then
|
||||
REUSE="$(ask_yn "Diese Zugangsdaten für die Registry verwenden?" "Y")"
|
||||
if [ "$REUSE" = true ]; then
|
||||
REUSED_AUTH=true
|
||||
log_info "Registry-Zugangsdaten werden zur Laufzeit über die bestehende Docker-Session verwendet — trage sie zusätzlich unten ein, damit auch deploy.sh (als $DEPLOY_USER) einloggen kann."
|
||||
log_info "Registry-Zugangsdaten werden zur Laufzeit über die bestehende Docker-Session verwendet - trage sie zusätzlich unten ein, damit auch deploy.sh (als $DEPLOY_USER) einloggen kann."
|
||||
fi
|
||||
fi
|
||||
NEED_REGISTRY_AUTH="$(ask_yn "Werden Zugangsdaten für die Container Registry benötigt (privates Repository)?" "Y")"
|
||||
@@ -413,14 +413,14 @@ if [ -z "$(env_get REGISTRY_USERNAME)" ]; then
|
||||
if [ "$NON_INTERACTIVE" = true ]; then
|
||||
fail "Registry-Zugangsdaten fehlen." "Setze die Umgebungsvariablen REGISTRY_USERNAME und REGISTRY_PASSWORD und starte setup.sh erneut, oder führe es interaktiv aus."
|
||||
fi
|
||||
log_warn "Keine Registry-Zugangsdaten eingegeben — kann später manuell in $ENV_FILE ergänzt werden (REGISTRY_USERNAME / REGISTRY_PASSWORD)."
|
||||
log_warn "Keine Registry-Zugangsdaten eingegeben - kann später manuell in $ENV_FILE ergänzt werden (REGISTRY_USERNAME / REGISTRY_PASSWORD)."
|
||||
else
|
||||
env_set REGISTRY_USERNAME "$REG_USER"
|
||||
env_set REGISTRY_PASSWORD "$REG_PASS"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log_info "REGISTRY_USERNAME bereits vorhanden — unverändert."
|
||||
log_info "REGISTRY_USERNAME bereits vorhanden - unverändert."
|
||||
fi
|
||||
|
||||
if [ -z "$(env_get AUTO_DEPLOY)" ] || [ "$FRESH_INSTALL" = true ]; then
|
||||
@@ -457,8 +457,8 @@ echo "REGISTRY_PASSWORD: $(mask "$(env_get REGISTRY_PASSWORD)")"
|
||||
echo "AUTO_DEPLOY: $(env_get AUTO_DEPLOY)"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Compose files + deploy.sh — always refreshed from the repo checkout
|
||||
# (generated artifacts, not secrets/user data — safe to overwrite every run).
|
||||
# Compose files + deploy.sh - always refreshed from the repo checkout
|
||||
# (generated artifacts, not secrets/user data - safe to overwrite every run).
|
||||
# ---------------------------------------------------------------------------
|
||||
step "Deployment-Dateien"
|
||||
|
||||
@@ -488,16 +488,16 @@ fi
|
||||
step "Deployment-User"
|
||||
|
||||
if id "$DEPLOY_USER" >/dev/null 2>&1; then
|
||||
log_info "Benutzer '$DEPLOY_USER' existiert bereits — unverändert."
|
||||
log_info "Benutzer '$DEPLOY_USER' existiert bereits - unverändert."
|
||||
else
|
||||
DEPLOY_SHELL="/bin/bash"
|
||||
command -v bash >/dev/null 2>&1 || DEPLOY_SHELL="/bin/sh"
|
||||
# A real shell is required here — OpenSSH executes a forced authorized_keys
|
||||
# A real shell is required here - OpenSSH executes a forced authorized_keys
|
||||
# "command=" via the account's login shell (`$SHELL -c "command"`). A
|
||||
# nologin shell would swallow that command and refuse to run it, breaking
|
||||
# deployment entirely. "No normal interactive login" is instead enforced
|
||||
# by locking the password (below) and by the SSH key's forced command
|
||||
# (see step 11) — never by the shell field.
|
||||
# (see step 11) - never by the shell field.
|
||||
$SUDO useradd --system --create-home --shell "$DEPLOY_SHELL" "$DEPLOY_USER"
|
||||
$SUDO usermod -L "$DEPLOY_USER" >/dev/null 2>&1 || true
|
||||
log_success "Benutzer '$DEPLOY_USER' erstellt (kein Passwort, kein normaler Login möglich)."
|
||||
@@ -507,17 +507,17 @@ if $DOCKER info >/dev/null 2>&1 && getent group docker >/dev/null 2>&1; then
|
||||
$SUDO usermod -aG docker "$DEPLOY_USER"
|
||||
log_success "'$DEPLOY_USER' zur docker-Gruppe hinzugefügt (notwendig für docker compose)."
|
||||
fi
|
||||
# Deliberately NO sudo rights of any kind for this user — see DEPLOYMENT.md
|
||||
# Deliberately NO sudo rights of any kind for this user - see DEPLOYMENT.md
|
||||
# ("Security") for the docker-group-is-root-equivalent trade-off and how the
|
||||
# restricted SSH key + fixed deploy.sh logic mitigate it.
|
||||
|
||||
DEPLOY_HOME="$(getent passwd "$DEPLOY_USER" | cut -d: -f6)"
|
||||
$SUDO chown -R "$DEPLOY_USER:$DEPLOY_USER" "$PROD_DIR" \
|
||||
"$PROD_DIR/backups" "$PROD_DIR/media" "$PROD_DIR/docker-compose.yml" "$PROD_DIR/deploy.sh" "$ENV_FILE" 2>/dev/null || true
|
||||
# .deploy/ (the SSH keypair) stays out of that blanket chown — see step 11.
|
||||
# .deploy/ (the SSH keypair) stays out of that blanket chown - see step 11.
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 11–13. SSH deployment key + authorized_keys restriction
|
||||
# 11-13. SSH deployment key + authorized_keys restriction
|
||||
# ---------------------------------------------------------------------------
|
||||
step "SSH Deployment Key"
|
||||
|
||||
@@ -542,7 +542,7 @@ $SUDO touch "$AUTH_KEYS"
|
||||
|
||||
FORCED_LINE="restrict,command=\"$PROD_DIR/deploy.sh\" $PUBLIC_KEY"
|
||||
if $SUDO grep -qF "$PUBLIC_KEY" "$AUTH_KEYS" 2>/dev/null; then
|
||||
log_info "Public Key ist bereits in authorized_keys eingetragen — unverändert."
|
||||
log_info "Public Key ist bereits in authorized_keys eingetragen - unverändert."
|
||||
else
|
||||
printf '%s\n' "$FORCED_LINE" | $SUDO tee -a "$AUTH_KEYS" >/dev/null
|
||||
log_success "Public Key mit eingeschränktem Forced-Command in authorized_keys eingetragen."
|
||||
@@ -554,14 +554,14 @@ $SUDO chown -R "$DEPLOY_USER:$DEPLOY_USER" "$DEPLOY_HOME/.ssh"
|
||||
# ---------------------------------------------------------------------------
|
||||
# Start Postgres now (harmless, needed regardless of whether a release has
|
||||
# ever been deployed yet). The app image itself is only ever started by
|
||||
# deploy.sh once at least one release has been pushed — a fresh install has
|
||||
# deploy.sh once at least one release has been pushed - a fresh install has
|
||||
# no image to run yet.
|
||||
# ---------------------------------------------------------------------------
|
||||
step "Datenbank"
|
||||
|
||||
cd "$PROD_DIR"
|
||||
|
||||
# Relies on cwd (now $PROD_DIR) for compose file discovery — same as every
|
||||
# Relies on cwd (now $PROD_DIR) for compose file discovery - same as every
|
||||
# other compose call below, so it consistently picks up
|
||||
# docker-compose.override.yml too when one exists.
|
||||
wait_healthy() {
|
||||
@@ -584,24 +584,24 @@ wait_healthy postgres 60 && DB_READY=true
|
||||
if [ "$DB_READY" = true ]; then
|
||||
log_success "Datenbank ist bereit."
|
||||
else
|
||||
log_warn "Datenbank wurde nicht rechtzeitig healthy — prüfe: $COMPOSE logs postgres"
|
||||
log_warn "Datenbank wurde nicht rechtzeitig healthy - prüfe: $COMPOSE logs postgres"
|
||||
fi
|
||||
|
||||
EXISTING_IMAGE="$(env_get ANOUMA_IMAGE)"
|
||||
APP_READY=false
|
||||
if [ -n "$EXISTING_IMAGE" ]; then
|
||||
log_info "ANOUMA_IMAGE ist bereits gesetzt ($EXISTING_IMAGE) — starte Anwendung …"
|
||||
log_info "ANOUMA_IMAGE ist bereits gesetzt ($EXISTING_IMAGE) - starte Anwendung …"
|
||||
if [ -n "$(env_get REGISTRY_USERNAME)" ]; then
|
||||
echo "$(env_get REGISTRY_PASSWORD)" | $DOCKER login "$(env_get REGISTRY)" -u "$(env_get REGISTRY_USERNAME)" --password-stdin >/dev/null 2>&1 || log_warn "Registry-Login fehlgeschlagen — 'docker compose pull' könnte fehlschlagen."
|
||||
echo "$(env_get REGISTRY_PASSWORD)" | $DOCKER login "$(env_get REGISTRY)" -u "$(env_get REGISTRY_USERNAME)" --password-stdin >/dev/null 2>&1 || log_warn "Registry-Login fehlgeschlagen - 'docker compose pull' könnte fehlschlagen."
|
||||
fi
|
||||
if $COMPOSE --env-file "$ENV_FILE" pull app 2>/dev/null && $COMPOSE --env-file "$ENV_FILE" run --rm app npm run migrate && $COMPOSE --env-file "$ENV_FILE" up -d; then
|
||||
wait_healthy app 60 && APP_READY=true
|
||||
fi
|
||||
if [ "$APP_READY" = false ]; then
|
||||
log_warn "Anwendung konnte nicht (neu) gestartet werden — prüfe: $COMPOSE logs app"
|
||||
log_warn "Anwendung konnte nicht (neu) gestartet werden - prüfe: $COMPOSE logs app"
|
||||
fi
|
||||
else
|
||||
log_info "Noch kein Release deployt — die Anwendung wird beim ersten Git-Tag automatisch über GitHub Actions gestartet."
|
||||
log_info "Noch kein Release deployt - die Anwendung wird beim ersten Git-Tag automatisch über GitHub Actions gestartet."
|
||||
if [ "$SKIP_SEED" = false ]; then
|
||||
log_info "Hinweis: Inhalte können nach dem ersten Deploy mit 'docker compose run --rm app npm run seed' eingespielt werden."
|
||||
fi
|
||||
@@ -681,7 +681,7 @@ if [ "$SSH_KEY_FRESH" = true ]; then
|
||||
echo "GHCR SERVER TOKEN (not a GitHub Secret):"
|
||||
echo " $(env_get REGISTRY_PASSWORD)"
|
||||
else
|
||||
echo "Existing deployment key found — GitHub Secrets wurden bereits bei der ersten Einrichtung ausgegeben."
|
||||
echo "Existing deployment key found - GitHub Secrets wurden bereits bei der ersten Einrichtung ausgegeben."
|
||||
echo "Falls sie nicht mehr vorliegen: DEPLOY_SSH_KEY kann sicher eingesehen werden mit:"
|
||||
echo " sudo cat $KEY_PATH"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user