Files
Archive/docker-manage.sh

311 lines
7.7 KiB
Bash
Raw Normal View History

2025-12-09 06:52:43 +00:00
#!/bin/bash
# Habland Docker Management Script
# Simplified commands for managing all services
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Helper functions
print_success() { echo -e "${GREEN}${NC} $1"; }
print_error() { echo -e "${RED}${NC} $1"; }
print_info() { echo -e "${BLUE}${NC} $1"; }
print_warning() { echo -e "${YELLOW}${NC} $1"; }
# Check if docker is running
check_docker() {
if ! docker info > /dev/null 2>&1; then
print_error "Docker is not running. Please start Docker Desktop."
exit 1
fi
}
# Display usage
usage() {
cat << EOF
Habland Docker Management Script
Usage: ./docker-manage.sh [command] [options]
Commands:
start [service] Start all services or specific service
stop [service] Stop all services or specific service
restart [service] Restart all services or specific service
logs [service] View logs (use -f to follow)
status Show status of all services
db Database management commands
backup Backup databases
restore [file] Restore database from backup
clean Clean up Docker resources
rebuild [service] Rebuild and restart service
shell [service] Open shell in service container
Service Groups:
arcturus Arcturus emulator + Cool UI + assets
havana Havana server + web client
kepler Kepler server
roseau Roseau server + client
all All services
Examples:
./docker-manage.sh start # Start all services
./docker-manage.sh start arcturus # Start Arcturus stack
./docker-manage.sh logs arcturus-emulator # View Arcturus logs
./docker-manage.sh db # Database shell
./docker-manage.sh backup # Backup all databases
./docker-manage.sh status # Show service status
EOF
}
# Start services
start_service() {
check_docker
case "$1" in
arcturus)
print_info "Starting Arcturus stack..."
docker compose up -d unified-db asset-server arcturus-emulator cool-ui
;;
havana)
print_info "Starting Havana stack..."
docker compose up -d unified-db havana-server havana-web
;;
kepler)
print_info "Starting Kepler stack..."
docker compose up -d unified-db kepler-server
;;
roseau)
print_info "Starting Roseau stack..."
docker compose up -d unified-db roseau-server roseau-client
;;
all|"")
print_info "Starting all services..."
docker compose up -d
;;
*)
print_info "Starting $1..."
docker compose up -d "$1"
;;
esac
print_success "Services started successfully"
print_info "Run './docker-manage.sh status' to check service status"
}
# Stop services
stop_service() {
case "$1" in
arcturus)
print_info "Stopping Arcturus stack..."
docker compose stop cool-ui arcturus-emulator asset-server
;;
havana)
print_info "Stopping Havana stack..."
docker compose stop havana-web havana-server
;;
kepler)
print_info "Stopping Kepler..."
docker compose stop kepler-server
;;
roseau)
print_info "Stopping Roseau stack..."
docker compose stop roseau-client roseau-server
;;
all|"")
print_info "Stopping all services..."
docker compose down
;;
*)
print_info "Stopping $1..."
docker compose stop "$1"
;;
esac
print_success "Services stopped successfully"
}
# Restart services
restart_service() {
print_info "Restarting services..."
if [ -z "$1" ]; then
docker compose restart
else
docker compose restart "$1"
fi
print_success "Services restarted successfully"
}
# View logs
view_logs() {
if [ -z "$1" ]; then
docker compose logs -f
else
docker compose logs -f "$1"
fi
}
# Show service status
show_status() {
print_info "Service Status:"
echo ""
docker compose ps
echo ""
print_info "Resource Usage:"
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
}
# Database management
manage_db() {
print_info "Opening database shell..."
print_warning "Default credentials: root / root"
docker compose exec unified-db mysql -uroot -proot
}
# Backup databases
backup_db() {
BACKUP_DIR="./backups"
mkdir -p "$BACKUP_DIR"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/habland_backup_$TIMESTAMP.sql"
print_info "Creating database backup..."
docker compose exec -T unified-db mysqldump -uroot -proot --all-databases > "$BACKUP_FILE"
if [ -f "$BACKUP_FILE" ]; then
print_success "Backup created: $BACKUP_FILE"
# Compress backup
gzip "$BACKUP_FILE"
print_success "Backup compressed: ${BACKUP_FILE}.gz"
else
print_error "Backup failed"
exit 1
fi
}
# Restore database
restore_db() {
if [ -z "$1" ]; then
print_error "Please specify backup file"
print_info "Usage: ./docker-manage.sh restore <backup-file>"
exit 1
fi
if [ ! -f "$1" ]; then
print_error "Backup file not found: $1"
exit 1
fi
print_warning "This will overwrite existing databases!"
read -p "Continue? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
print_info "Restoring database from $1..."
# Handle gzipped files
if [[ "$1" == *.gz ]]; then
gunzip -c "$1" | docker compose exec -T unified-db mysql -uroot -proot
else
docker compose exec -T unified-db mysql -uroot -proot < "$1"
fi
print_success "Database restored successfully"
else
print_info "Restore cancelled"
fi
}
# Clean up Docker resources
clean_docker() {
print_warning "This will remove stopped containers, unused networks, and dangling images"
read -p "Continue? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
print_info "Cleaning up Docker resources..."
docker compose down
docker system prune -f
print_success "Cleanup complete"
else
print_info "Cleanup cancelled"
fi
}
# Rebuild service
rebuild_service() {
if [ -z "$1" ]; then
print_error "Please specify service to rebuild"
exit 1
fi
print_info "Rebuilding $1..."
docker compose build --no-cache "$1"
docker compose up -d "$1"
print_success "$1 rebuilt and restarted"
}
# Open shell in container
open_shell() {
if [ -z "$1" ]; then
print_error "Please specify service"
exit 1
fi
print_info "Opening shell in $1..."
docker compose exec "$1" /bin/sh || docker compose exec "$1" /bin/bash
}
# Main command handler
case "$1" in
start)
start_service "$2"
;;
stop)
stop_service "$2"
;;
restart)
restart_service "$2"
;;
logs)
view_logs "$2"
;;
status)
show_status
;;
db)
manage_db
;;
backup)
backup_db
;;
restore)
restore_db "$2"
;;
clean)
clean_docker
;;
rebuild)
rebuild_service "$2"
;;
shell)
open_shell "$2"
;;
help|--help|-h|"")
usage
;;
*)
print_error "Unknown command: $1"
echo ""
usage
exit 1
;;
esac