mirror of
https://github.com/Dvorinka/Containr.git
synced 2026-06-03 20:12:58 +00:00
201 lines
5.1 KiB
Bash
Executable File
201 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Unified Docker Compose Management Script
|
|
# Usage: ./start-unified.sh [dev|prod|cloudflare|stop|logs|status|clean]
|
|
|
|
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
|
|
|
|
# Function to print colored output
|
|
print_status() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Check if docker-compose.yml exists
|
|
if [ ! -f "docker-compose.yml" ]; then
|
|
print_error "docker-compose.yml not found!"
|
|
exit 1
|
|
fi
|
|
|
|
# Function to show help
|
|
show_help() {
|
|
echo "Usage: $0 [COMMAND]"
|
|
echo ""
|
|
echo "Commands:"
|
|
echo " dev - Start development environment with hot reload"
|
|
echo " prod - Start production environment"
|
|
echo " cloudflare- Start production with Cloudflare tunnel"
|
|
echo " stop - Stop all services"
|
|
echo " logs - Show logs for all services"
|
|
echo " status - Show status of all services"
|
|
echo " clean - Remove all containers, volumes, and images"
|
|
echo " help - Show this help message"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 dev # Start development mode"
|
|
echo " $0 prod # Start production mode"
|
|
echo " $0 cloudflare # Start with Cloudflare tunnel"
|
|
echo " $0 logs # View logs"
|
|
}
|
|
|
|
# Function to start development environment
|
|
start_dev() {
|
|
print_status "Starting development environment..."
|
|
|
|
# Set development environment variables
|
|
export ENVIRONMENT=development
|
|
export LOG_LEVEL=DEBUG
|
|
export DOMAIN=localhost
|
|
export ACME_EMAIL=admin@localhost
|
|
export DEV_MODE=./internal # Enable development volumes
|
|
export VITE_API_URL=http://api.localhost
|
|
export CORS_ALLOWED_ORIGINS=http://localhost,http://localhost:3000
|
|
|
|
# Stop existing containers
|
|
docker compose down 2>/dev/null || true
|
|
|
|
# Start services
|
|
docker compose up -d --build
|
|
|
|
print_success "Development environment started!"
|
|
print_status "Frontend: http://localhost"
|
|
print_status "API: http://api.localhost"
|
|
print_status "Traefik Dashboard: http://localhost:8080"
|
|
print_status "Traefik Auth: admin/admin"
|
|
}
|
|
|
|
# Function to start production environment
|
|
start_prod() {
|
|
print_status "Starting production environment..."
|
|
|
|
# Check if required environment variables are set
|
|
if [ -z "$DOMAIN" ] || [ "$DOMAIN" = "localhost" ]; then
|
|
print_error "Please set DOMAIN environment variable for production!"
|
|
print_status "Example: export DOMAIN=yourdomain.com"
|
|
exit 1
|
|
fi
|
|
|
|
# Unset development mode
|
|
unset DEV_MODE
|
|
|
|
# Stop existing containers
|
|
docker compose down 2>/dev/null || true
|
|
|
|
# Start services
|
|
docker compose up -d --build
|
|
|
|
print_success "Production environment started!"
|
|
print_status "Frontend: https://$DOMAIN"
|
|
print_status "API: https://api.$DOMAIN"
|
|
print_status "Traefik Dashboard: https://traefik.$DOMAIN"
|
|
}
|
|
|
|
# Function to start with Cloudflare tunnel
|
|
start_cloudflare() {
|
|
print_status "Starting production environment with Cloudflare tunnel..."
|
|
|
|
# Check if Cloudflare token is set
|
|
if [ -z "$CLOUDFLARED_TOKEN" ]; then
|
|
print_error "Please set CLOUDFLARED_TOKEN environment variable!"
|
|
print_status "Get token from: https://dash.cloudflare.com/argotunnel"
|
|
exit 1
|
|
fi
|
|
|
|
# Unset development mode
|
|
unset DEV_MODE
|
|
|
|
# Stop existing containers
|
|
docker compose down 2>/dev/null || true
|
|
|
|
# Start services with cloudflared profile
|
|
docker compose --profile cloudflared up -d --build
|
|
|
|
print_success "Production with Cloudflare tunnel started!"
|
|
print_warning "Note: Cloudflare tunnel will expose your services publicly"
|
|
print_status "Check Cloudflare dashboard for your tunnel URL"
|
|
}
|
|
|
|
# Function to stop services
|
|
stop_services() {
|
|
print_status "Stopping all services..."
|
|
docker compose down
|
|
print_success "All services stopped!"
|
|
}
|
|
|
|
# Function to show logs
|
|
show_logs() {
|
|
docker compose logs -f
|
|
}
|
|
|
|
# Function to show status
|
|
show_status() {
|
|
print_status "Service status:"
|
|
docker compose ps
|
|
}
|
|
|
|
# Function to clean everything
|
|
clean_all() {
|
|
print_warning "This will remove ALL containers, volumes, and images!"
|
|
read -p "Are you sure? (y/N): " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
print_status "Removing containers, volumes, and images..."
|
|
docker compose down -v --rmi all
|
|
docker system prune -f
|
|
print_success "Cleanup complete!"
|
|
else
|
|
print_status "Cleanup cancelled."
|
|
fi
|
|
}
|
|
|
|
# Main script logic
|
|
case "${1:-help}" in
|
|
dev)
|
|
start_dev
|
|
;;
|
|
prod)
|
|
start_prod
|
|
;;
|
|
cloudflare)
|
|
start_cloudflare
|
|
;;
|
|
stop)
|
|
stop_services
|
|
;;
|
|
logs)
|
|
show_logs
|
|
;;
|
|
status)
|
|
show_status
|
|
;;
|
|
clean)
|
|
clean_all
|
|
;;
|
|
help|--help|-h)
|
|
show_help
|
|
;;
|
|
*)
|
|
print_error "Unknown command: $1"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|