#!/bin/bash # SerpentRace Development Environment Setup and Management Script # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Functions print_info() { echo -e "${GREEN}[INFO]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # Check if Docker and Docker Compose are installed check_dependencies() { print_info "Checking dependencies..." if ! command -v docker &> /dev/null; then print_error "Docker is not installed. Please install Docker first." exit 1 fi if ! command -v docker-compose &> /dev/null; then print_error "Docker Compose is not installed. Please install Docker Compose first." exit 1 fi print_info "All dependencies are installed." } # Start development environment dev_start() { print_info "Starting SerpentRace development environment..." cd SerpentRace_Docker docker-compose -f docker-compose.dev.yml --env-file .env.dev up --build -d cd .. print_info "Development environment started successfully!" print_info "Services available at:" echo " - Frontend: http://localhost:5173" echo " - Backend API: http://localhost:3000" echo " - PostgreSQL: localhost:5432" echo " - Redis: localhost:6379" echo " - MinIO: http://localhost:9001 (admin: serpentrace / serpentrace123!)" echo " - PgAdmin: http://localhost:8080 (admin@serpentrace.dev / admin)" echo " - Redis Commander: http://localhost:8081" } # Start development environment with file watchers dev_watch() { print_info "Starting SerpentRace development environment with file watchers..." print_info "This will automatically sync file changes and rebuild containers as needed" cd SerpentRace_Docker docker-compose -f docker-compose.watch.yml --env-file .env.dev up --build --watch cd .. } # Stop development environment dev_stop() { print_info "Stopping SerpentRace development environment..." cd SerpentRace_Docker docker-compose -f docker-compose.dev.yml down cd .. print_info "Development environment stopped." } # Start production environment prod_start() { print_warning "Starting SerpentRace production environment..." print_warning "Make sure to update .env.prod with secure values!" cd SerpentRace_Docker docker-compose -f docker-compose.prod.yml --env-file .env.prod up --build -d cd .. print_info "Production environment started!" print_info "Services available at:" echo " - Frontend: http://localhost" echo " - Backend API: http://localhost:3000" } # Stop production environment prod_stop() { print_info "Stopping SerpentRace production environment..." cd SerpentRace_Docker docker-compose -f docker-compose.prod.yml down cd .. print_info "Production environment stopped." } # Show logs show_logs() { local service=$1 if [ -z "$service" ]; then print_info "Showing logs for all services..." cd SerpentRace_Docker docker-compose -f docker-compose.dev.yml logs -f cd .. else print_info "Showing logs for $service..." cd SerpentRace_Docker docker-compose -f docker-compose.dev.yml logs -f "$service" cd .. fi } # Clean up Docker resources cleanup() { print_warning "Cleaning up Docker resources..." cd SerpentRace_Docker docker-compose -f docker-compose.dev.yml down -v docker-compose -f docker-compose.prod.yml down -v cd .. docker system prune -f print_info "Cleanup completed." } # Show help show_help() { echo "SerpentRace Docker Management Script" echo "" echo "Usage: $0 [COMMAND]" echo "" echo "Commands:" echo " dev:start Start development environment with hot reload" echo " dev:watch Start development environment with file watchers (auto-rebuild)" echo " dev:stop Stop development environment" echo " prod:start Start production environment" echo " prod:stop Stop production environment" echo " logs [service] Show logs (optionally for specific service)" echo " cleanup Clean up all Docker resources" echo " help Show this help message" echo "" echo "Examples:" echo " $0 dev:start" echo " $0 dev:watch" echo " $0 logs backend" echo " $0 cleanup" } # Main script logic case "$1" in "dev:start") check_dependencies dev_start ;; "dev:watch") check_dependencies dev_watch ;; "dev:stop") dev_stop ;; "prod:start") check_dependencies prod_start ;; "prod:stop") prod_stop ;; "logs") show_logs "$2" ;; "cleanup") cleanup ;; "help"|*) show_help ;; esac