Files
drone-detector/docker-start.sh
2025-08-16 19:43:44 +02:00

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