diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index f79d934e..8277123c 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -107,6 +107,16 @@ if [ -d "$SCRIPTS_SOURCE_DIR" ]; then chmod +x "$INTERNAL_SCRIPTS_DIR/upgrade-watchdog.sh" echo "✓ Upgrade watchdog script deployed" + # Backward compatibility: also deploy to /data/scripts/ for older sidecar configs + # that still reference the old path (command: /data/scripts/upgrade-watchdog.sh) + # Only deploy if /data/scripts exists or can be created (skip if bind-mounted with other content) + LEGACY_SCRIPTS_DIR="/data/scripts" + if mkdir -p "$LEGACY_SCRIPTS_DIR" 2>/dev/null; then + cp "$SCRIPTS_SOURCE_DIR/upgrade-watchdog.sh" "$LEGACY_SCRIPTS_DIR/upgrade-watchdog.sh" + chmod +x "$LEGACY_SCRIPTS_DIR/upgrade-watchdog.sh" + echo "✓ Upgrade watchdog script also deployed to $LEGACY_SCRIPTS_DIR (backward compat)" + fi + # Audit log the deployment if [ -w "$(dirname "$AUDIT_LOG")" ]; then echo "{\"timestamp\":\"$(date -u +"%Y-%m-%dT%H:%M:%SZ")\",\"event\":\"upgrade_script_deployed\",\"script_hash\":\"$SCRIPT_HASH\",\"version\":\"${npm_package_version:-unknown}\",\"user\":\"system\"}" >> "$AUDIT_LOG" 2>/dev/null || true diff --git a/docs/configuration/auto-upgrade.md b/docs/configuration/auto-upgrade.md index 7801ee23..bd84c36c 100644 --- a/docs/configuration/auto-upgrade.md +++ b/docs/configuration/auto-upgrade.md @@ -48,7 +48,7 @@ The auto-upgrade feature uses a **watchdog sidecar** container that: ### Docker Compose Setup ::: info -The upgrade watchdog script is automatically deployed to `/data/scripts/` by the MeshMonitor container on startup. No manual script download is required. +The upgrade watchdog script is automatically deployed to `/data/.meshmonitor-internal/` by the MeshMonitor container on startup. No manual script download is required. ::: 1. **Enable the watchdog sidecar** by using the upgrade overlay: diff --git a/scripts/upgrade-watchdog.sh b/scripts/upgrade-watchdog.sh index 2b78326d..674dc19d 100755 --- a/scripts/upgrade-watchdog.sh +++ b/scripts/upgrade-watchdog.sh @@ -166,17 +166,21 @@ pull_image() { recreate_container() { log "Recreating container: $CONTAINER_NAME" - # Resolve compose directory - try configured path, then standard mount point + # Resolve compose directory - try configured path, then known mount points + # Older sidecar configs used /data/compose, current uses /compose local compose_dir="" if [ -d "$COMPOSE_PROJECT_DIR" ] && [ -f "$COMPOSE_PROJECT_DIR/docker-compose.yml" ]; then compose_dir="$COMPOSE_PROJECT_DIR" elif [ -d "/compose" ] && [ -f "/compose/docker-compose.yml" ]; then log_warn "COMPOSE_PROJECT_DIR=$COMPOSE_PROJECT_DIR not found, falling back to /compose" compose_dir="/compose" + elif [ -d "/data/compose" ] && [ -f "/data/compose/docker-compose.yml" ]; then + log_warn "Falling back to legacy path /data/compose - please update COMPOSE_PROJECT_DIR to /compose" + compose_dir="/data/compose" fi if [ -z "$compose_dir" ]; then - log_error "No docker-compose.yml found at $COMPOSE_PROJECT_DIR or /compose" + log_error "No docker-compose.yml found at $COMPOSE_PROJECT_DIR, /compose, or /data/compose" log_error "The upgrade sidecar requires Docker Compose files to recreate containers safely." log_error "Mount your compose directory to /compose in the sidecar container." return 1 @@ -486,6 +490,19 @@ main() { log "Compose project: $COMPOSE_PROJECT_DIR" log "==================================================" + # Warn if running from the legacy script path + SCRIPT_PATH="$(readlink -f "$0" 2>/dev/null || echo "$0")" + case "$SCRIPT_PATH" in + /data/scripts/*) + log_warn "==================================================" + log_warn "Running from legacy path: $SCRIPT_PATH" + log_warn "Please update your docker-compose.upgrade.yml to use:" + log_warn " command: /data/.meshmonitor-internal/upgrade-watchdog.sh" + log_warn "See: https://github.com/Yeraze/meshmonitor/blob/main/docker-compose.upgrade.yml" + log_warn "==================================================" + ;; + esac + # Initialize status write_status "ready"