#!/usr/bin/env bash # # ARGUS Enterprise Web Security Platform — updater. Pulls the latest # published images and restarts the stack. # # cd /opt/argus && ./update.sh # (or, if you don't have it locally yet) # curl -fsSL https://git-cloud.weboria.eu/weboria/argus-installer/raw/branch/main/update.sh | bash # set -euo pipefail INSTALL_DIR="${ARGUS_INSTALL_DIR:-/opt/argus}" bold() { printf '\033[1m%s\033[0m\n' "$1"; } info() { printf ' %s\n' "$1"; } ok() { printf ' \033[32m✓\033[0m %s\n' "$1"; } fail() { printf ' \033[31m✗\033[0m %s\n' "$1" >&2; exit 1; } bold "ARGUS Updater" echo [ -f "$INSTALL_DIR/docker-compose.yml" ] || fail "No ARGUS installation found at $INSTALL_DIR (set ARGUS_INSTALL_DIR if you installed elsewhere)." cd "$INSTALL_DIR" API_HOST_PORT="$(grep -oP '^API_HOST_PORT=\K.*' .env 2>/dev/null || true)" API_HOST_PORT="${API_HOST_PORT:-9080}" BEFORE_VERSION="$(curl -fsS "http://127.0.0.1:${API_HOST_PORT}/health" 2>/dev/null | grep -oP '"version"\s*:\s*"\K[^"]+' || echo "unknown")" info "Current version: ${BEFORE_VERSION}" bold "Pulling latest images..." docker compose pull bold "Restarting..." docker compose up -d echo bold "Waiting for ARGUS to become healthy..." READY=false for _ in $(seq 1 60); do if curl -fsS "http://127.0.0.1:${API_HOST_PORT}/health" >/dev/null 2>&1; then READY=true break fi sleep 5 done if [ "$READY" != "true" ]; then fail "ARGUS did not come back healthy within 5 minutes. Check: docker compose -f $INSTALL_DIR/docker-compose.yml logs" fi AFTER_VERSION="$(curl -fsS "http://127.0.0.1:${API_HOST_PORT}/health" 2>/dev/null | grep -oP '"version"\s*:\s*"\K[^"]+' || echo "unknown")" ok "ARGUS is healthy — now running version ${AFTER_VERSION}" if [ "$BEFORE_VERSION" != "$AFTER_VERSION" ]; then info "Updated: ${BEFORE_VERSION} → ${AFTER_VERSION}" else info "Already up to date." fi