311 lines
7.7 KiB
Bash
311 lines
7.7 KiB
Bash
|
|
#!/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
|