192 lines
5.3 KiB
Bash
192 lines
5.3 KiB
Bash
#!/bin/bash
|
|
|
|
# Drone Detection System - Docker Quick Start Script
|
|
# This script sets up and starts the complete system using Docker
|
|
|
|
set -e
|
|
|
|
echo "🐳 Drone Detection System - Docker Setup"
|
|
echo "========================================"
|
|
|
|
# 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 is installed
|
|
if ! command -v docker &> /dev/null; then
|
|
print_error "Docker is not installed. Please install Docker first."
|
|
exit 1
|
|
fi
|
|
|
|
# Check if Docker Compose is installed
|
|
if ! command -v docker-compose &> /dev/null; then
|
|
print_error "Docker Compose is not installed. Please install Docker Compose first."
|
|
exit 1
|
|
fi
|
|
|
|
print_status "Docker and Docker Compose are available"
|
|
|
|
# Create .env file if it doesn't exist
|
|
if [ ! -f .env ]; then
|
|
print_status "Creating .env file from template..."
|
|
cp .env.docker .env
|
|
print_warning "Please edit .env file with your Twilio credentials before continuing"
|
|
echo "Required variables:"
|
|
echo " - TWILIO_ACCOUNT_SID"
|
|
echo " - TWILIO_AUTH_TOKEN"
|
|
echo " - TWILIO_PHONE_NUMBER"
|
|
echo ""
|
|
read -p "Press Enter to continue when .env is configured..."
|
|
fi
|
|
|
|
# Parse command line arguments
|
|
PROFILE="default"
|
|
DETACH="-d"
|
|
BUILD=""
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--production|-p)
|
|
PROFILE="production"
|
|
shift
|
|
;;
|
|
--simulation|-s)
|
|
PROFILE="simulation"
|
|
shift
|
|
;;
|
|
--foreground|-f)
|
|
DETACH=""
|
|
shift
|
|
;;
|
|
--build|-b)
|
|
BUILD="--build"
|
|
shift
|
|
;;
|
|
--help|-h)
|
|
echo "Usage: $0 [OPTIONS]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -p, --production Run with production profile (includes Nginx)"
|
|
echo " -s, --simulation Run with simulation profile (includes drone simulator)"
|
|
echo " -f, --foreground Run in foreground (don't detach)"
|
|
echo " -b, --build Force rebuild of containers"
|
|
echo " -h, --help Show this help message"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 # Start basic system"
|
|
echo " $0 -p # Start with production setup"
|
|
echo " $0 -s -f # Start with simulation in foreground"
|
|
echo " $0 -b # Rebuild and start"
|
|
exit 0
|
|
;;
|
|
*)
|
|
print_error "Unknown option: $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Stop any existing containers
|
|
print_status "Stopping any existing containers..."
|
|
docker-compose down 2>/dev/null || true
|
|
|
|
# Build containers if requested
|
|
if [ -n "$BUILD" ]; then
|
|
print_status "Building Docker containers..."
|
|
docker-compose build
|
|
fi
|
|
|
|
# Start the appropriate profile
|
|
case $PROFILE in
|
|
"production")
|
|
print_status "Starting production environment..."
|
|
docker-compose --profile production up $DETACH $BUILD
|
|
;;
|
|
"simulation")
|
|
print_status "Starting with simulation environment..."
|
|
docker-compose --profile simulation up $DETACH $BUILD
|
|
;;
|
|
*)
|
|
print_status "Starting development environment..."
|
|
docker-compose up $DETACH $BUILD
|
|
;;
|
|
esac
|
|
|
|
# Wait a moment for services to start
|
|
if [ -n "$DETACH" ]; then
|
|
print_status "Waiting for services to start..."
|
|
sleep 10
|
|
|
|
# Check service health
|
|
print_status "Checking service health..."
|
|
|
|
# Check backend
|
|
if curl -sf http://localhost:3001/api/health > /dev/null 2>&1; then
|
|
print_success "Backend is healthy"
|
|
else
|
|
print_warning "Backend health check failed"
|
|
fi
|
|
|
|
# Check frontend
|
|
if curl -sf http://localhost:3000 > /dev/null 2>&1; then
|
|
print_success "Frontend is healthy"
|
|
else
|
|
print_warning "Frontend health check failed"
|
|
fi
|
|
|
|
# Check database
|
|
if docker-compose exec -T postgres pg_isready -U postgres > /dev/null 2>&1; then
|
|
print_success "Database is healthy"
|
|
else
|
|
print_warning "Database health check failed"
|
|
fi
|
|
|
|
echo ""
|
|
print_success "🎉 Drone Detection System is running!"
|
|
echo ""
|
|
echo "Access URLs:"
|
|
echo " Frontend: http://localhost:3000"
|
|
echo " Backend: http://localhost:3001/api"
|
|
echo " Health: http://localhost:3001/api/health"
|
|
echo ""
|
|
echo "Default login credentials:"
|
|
echo " Admin: admin / admin123"
|
|
echo " Operator: operator / operator123"
|
|
echo ""
|
|
echo "Useful commands:"
|
|
echo " docker-compose logs -f # View logs"
|
|
echo " docker-compose ps # Check status"
|
|
echo " docker-compose down # Stop services"
|
|
echo " docker-compose restart backend # Restart a service"
|
|
echo ""
|
|
|
|
if [ "$PROFILE" = "simulation" ]; then
|
|
echo "🐍 Simulation is running!"
|
|
echo " Monitor with: docker-compose logs -f simulator"
|
|
echo ""
|
|
fi
|
|
else
|
|
echo ""
|
|
print_status "Services are running in foreground. Press Ctrl+C to stop."
|
|
fi
|