Files
org-stack/manage.sh
Stefano Manfredi 2866bff217 first commit
2025-12-01 14:58:40 +00:00

223 lines
5.2 KiB
Bash

#!/bin/bash
# Management script for Organization Stack
set -e
# Load configuration
if [ -f .env ]; then
set -a
source .env
set +a
fi
# Determine deployment path
get_deploy_path() {
# Handle REMOTE_PATH (supports both absolute and relative paths)
if [ -z "$REMOTE_PATH" ]; then
# Backwards compatibility: use old REMOTE_DIR if REMOTE_PATH not set
REMOTE_PATH="${REMOTE_DIR:-org-stack}"
fi
# Determine if path is absolute or relative
if [[ "$REMOTE_PATH" = /* ]]; then
echo "$REMOTE_PATH"
else
echo "~/$REMOTE_PATH"
fi
}
# Remote execution wrapper
remote_exec() {
if [ -n "$REMOTE_HOST" ] && [ -n "$REMOTE_USER" ]; then
local deploy_path=$(get_deploy_path)
ssh -p ${REMOTE_PORT:-22} ${REMOTE_USER}@${REMOTE_HOST} "cd $deploy_path && $1"
else
eval "$1"
fi
}
function show_help {
cat << EOF
Organization Stack Management Script
Usage: ./manage.sh [command]
Commands:
start Start all services
stop Stop all services
restart Restart all services
status Show status of all services
logs Show logs (add service name to filter: ./manage.sh logs gitea)
update Pull latest images and restart
backup Backup all volumes
restore Restore from backup
reset Stop and remove all containers and volumes (DESTRUCTIVE!)
Examples:
./manage.sh start
./manage.sh logs authelia
./manage.sh backup
EOF
}
function start_services {
echo "Starting services..."
remote_exec "docker compose up -d"
echo "✓ Services started"
if [ -n "$BASE_DOMAIN" ]; then
echo ""
echo "Access points:"
echo " - Gitea: https://git.${BASE_DOMAIN}"
echo " - Wiki: https://wiki.${BASE_DOMAIN}"
echo " - Authelia: https://auth.${BASE_DOMAIN}"
echo " - lldap: https://ldap.${BASE_DOMAIN}"
fi
}
function stop_services {
echo "Stopping services..."
remote_exec "docker compose stop"
echo "✓ Services stopped"
}
function restart_services {
echo "Restarting services..."
remote_exec "docker compose restart"
echo "✓ Services restarted"
}
function show_status {
remote_exec "docker compose ps"
}
function show_logs {
if [ -z "$1" ]; then
remote_exec "docker compose logs -f --tail=100"
else
remote_exec "docker compose logs -f --tail=100 $1"
fi
}
function update_services {
echo "Pulling latest images..."
remote_exec "docker compose pull"
echo ""
echo "Restarting services..."
remote_exec "docker compose up -d"
echo "✓ Services updated"
}
function backup_volumes {
BACKUP_DIR="./backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
echo "Creating backup in $BACKUP_DIR..."
# Backup each volume
for volume in lldap_data authelia_data gitea_data jspwiki_data; do
echo "Backing up $volume..."
docker run --rm \
-v "org-stack_${volume}:/data" \
-v "$(pwd)/$BACKUP_DIR:/backup" \
alpine \
tar czf "/backup/${volume}.tar.gz" -C /data .
done
echo "✓ Backup completed: $BACKUP_DIR"
}
function restore_volumes {
echo "Available backups:"
ls -1d ./backups/*/ 2>/dev/null || echo "No backups found"
echo ""
read -p "Enter backup directory name (e.g., backups/20240101_120000): " BACKUP_DIR
if [ ! -d "$BACKUP_DIR" ]; then
echo "❌ Backup directory not found"
exit 1
fi
read -p "⚠️ This will overwrite current data. Continue? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Restore cancelled"
exit 1
fi
echo "Stopping services..."
docker compose stop
for volume in lldap_data authelia_data gitea_data jspwiki_data; do
if [ -f "$BACKUP_DIR/${volume}.tar.gz" ]; then
echo "Restoring $volume..."
docker run --rm \
-v "org-stack_${volume}:/data" \
-v "$(pwd)/$BACKUP_DIR:/backup" \
alpine \
sh -c "rm -rf /data/* && tar xzf /backup/${volume}.tar.gz -C /data"
fi
done
echo "Starting services..."
docker compose start
echo "✓ Restore completed"
}
function reset_everything {
echo "⚠️ WARNING: This will remove all containers, volumes, and data!"
read -p "Type 'yes' to confirm: " CONFIRM
if [ "$CONFIRM" != "yes" ]; then
echo "Reset cancelled"
exit 1
fi
echo "Stopping and removing everything..."
remote_exec "docker compose down -v"
echo "✓ Everything removed"
echo ""
echo "To start fresh, run:"
echo " ./deploy.sh"
}
# Main script
case "${1:-}" in
start)
start_services
;;
stop)
stop_services
;;
restart)
restart_services
;;
status)
show_status
;;
logs)
show_logs "${2:-}"
;;
update)
update_services
;;
backup)
backup_volumes
;;
restore)
restore_volumes
;;
reset)
reset_everything
;;
help|--help|-h|"")
show_help
;;
*)
echo "Unknown command: $1"
echo ""
show_help
exit 1
;;
esac