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