Files
Archive/docker-manage.sh

311 lines
7.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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