83 lines
2.2 KiB
Bash
Executable File
83 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Update Docker Stacks Script
|
|
# Pull latest images and recreate containers
|
|
|
|
set -e
|
|
|
|
STACKS_DIR="/home/jpmschweitzer/Projects/tower-of-joy/stacks"
|
|
|
|
# Show usage
|
|
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
|
echo "Usage: $0 [stack-name]"
|
|
echo ""
|
|
echo "Update a specific stack or all stacks"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 portainer # Update only Portainer"
|
|
echo " $0 ollama # Update only Ollama"
|
|
echo " $0 # Update all stacks (interactive)"
|
|
echo ""
|
|
echo "Available stacks:"
|
|
ls -1 "$STACKS_DIR"/*.yml 2>/dev/null | xargs -n 1 basename | sed 's/.yml$//' | sed 's/^/ - /'
|
|
exit 0
|
|
fi
|
|
|
|
# Function to update a stack
|
|
update_stack() {
|
|
local stack_file=$1
|
|
local stack_name=$(basename "$stack_file" .yml)
|
|
|
|
echo ""
|
|
echo "=== Updating $stack_name ==="
|
|
|
|
# Pull latest images
|
|
echo "[1/3] Pulling latest images..."
|
|
docker compose -f "$stack_file" pull
|
|
|
|
# Recreate containers
|
|
echo "[2/3] Recreating containers..."
|
|
docker compose -f "$stack_file" up -d
|
|
|
|
# Verify containers running
|
|
echo "[3/3] Verifying containers..."
|
|
sleep 2
|
|
if docker compose -f "$stack_file" ps | grep -q "Up"; then
|
|
echo "✅ $stack_name updated successfully"
|
|
else
|
|
echo "⚠️ $stack_name may have issues, check logs"
|
|
fi
|
|
}
|
|
|
|
# If specific stack provided
|
|
if [ -n "$1" ]; then
|
|
STACK_FILE="$STACKS_DIR/$1.yml"
|
|
if [ -f "$STACK_FILE" ]; then
|
|
update_stack "$STACK_FILE"
|
|
else
|
|
echo "❌ Stack not found: $1"
|
|
echo "Available stacks:"
|
|
ls -1 "$STACKS_DIR"/*.yml 2>/dev/null | xargs -n 1 basename | sed 's/.yml$//' | sed 's/^/ - /'
|
|
exit 1
|
|
fi
|
|
else
|
|
# Interactive mode - update all stacks
|
|
echo "=== Update All Stacks ==="
|
|
echo ""
|
|
echo "This will update all deployed stacks to the latest images."
|
|
read -p "Continue? (y/N) " -n 1 -r
|
|
echo
|
|
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
for stack_file in "$STACKS_DIR"/*.yml; do
|
|
if [ -f "$stack_file" ]; then
|
|
update_stack "$stack_file"
|
|
fi
|
|
done
|
|
echo ""
|
|
echo "=== All Stacks Updated ==="
|
|
else
|
|
echo "Update cancelled"
|
|
exit 0
|
|
fi
|
|
fi
|