#!/usr/bin/env bash # stack-deploy.sh - Safe Docker Swarm stack deployer # Handles special chars in .env (||, backticks, %, *) via Python set -euo pipefail STACK="${1:?Usage: stack-deploy.sh }" DIR="/volume1/docker/compose-files" YAML="$DIR/${STACK}.yaml" ENVFILE="$DIR/${STACK}.env" PY="/volume1/docker/compose-files/deploy/envparse.py" [ -f "$YAML" ] || { echo "ERROR: $YAML not found"; exit 1; } echo "==> Deploying stack: $STACK" if [ -f "$ENVFILE" ]; then echo " Loading: $ENVFILE" eval "$(python3 $PY export "$ENVFILE")" VARS="$(python3 $PY vars "$ENVFILE")" echo " Vars: $VARS" envsubst "$VARS" < "$YAML" \ | python3 $PY strip \ | docker stack deploy -c - "$STACK" else echo " No env file" docker stack deploy -c "$YAML" "$STACK" fi echo "==> Done: $STACK"