#!/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 " 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