video-accessibility/scripts/run-local.sh
2025-10-10 09:19:39 -05:00

243 lines
6.5 KiB
Bash
Executable file
Raw Permalink 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
# =============================================================================
# Local Development Startup Script for Accessible Video Platform
# =============================================================================
# This script starts backend services (API, Worker, MongoDB, Redis) in Docker
# Frontend should be run separately: cd frontend && npm run dev
#
# Usage: ./scripts/run-local.sh [options]
# Options:
# --rebuild Force rebuild of Docker images
# --stop Stop all services
# --restart Restart all services
# =============================================================================
set -e # Exit on any error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
COMPOSE_FILES="-f docker-compose.yml -f docker-compose.local.yml --env-file .env.local"
# =============================================================================
# Helper Functions
# =============================================================================
print_header() {
echo -e "${BLUE}==============================================================================${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}==============================================================================${NC}"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_warning() {
echo -e "${YELLOW}$1${NC}"
}
print_info() {
echo -e "${BLUE} $1${NC}"
}
# =============================================================================
# Pre-flight Checks
# =============================================================================
preflight_checks() {
print_header "Pre-flight Checks"
# Check if running from correct directory
if [ ! -f "docker-compose.yml" ]; then
print_error "docker-compose.yml not found. Please run from project root."
exit 1
fi
print_success "Running from correct directory"
# Check if .env.local exists
if [ ! -f ".env.local" ]; then
print_error ".env.local not found. Please create it first."
print_info "You can copy from .env.prod.example and modify for local settings"
exit 1
fi
print_success ".env.local found"
# Check if secrets directory exists
if [ ! -d "secrets" ]; then
print_error "secrets/ directory not found"
exit 1
fi
print_success "secrets/ directory found"
# Check if GCP credentials exist
if [ ! -f "secrets/gcp-credentials.json" ]; then
print_error "secrets/gcp-credentials.json not found"
exit 1
fi
print_success "GCP credentials found"
# Check if Docker is running
if ! docker info > /dev/null 2>&1; then
print_error "Docker is not running"
exit 1
fi
print_success "Docker is running"
# Check if docker compose is available
if ! docker compose version &> /dev/null; then
print_error "docker compose is not installed"
exit 1
fi
print_success "docker compose is available"
echo ""
}
# =============================================================================
# Stop Services
# =============================================================================
stop_services() {
print_header "Stopping Services"
print_info "Stopping all containers..."
docker compose $COMPOSE_FILES down
print_success "Services stopped"
echo ""
}
# =============================================================================
# Start Services
# =============================================================================
start_services() {
print_header "Starting Local Development Services"
# Load environment variables
export $(cat .env.local | grep -v '^#' | xargs)
# Build images if needed
if [ "$REBUILD" = true ]; then
print_info "Building Docker images (--rebuild flag specified)..."
docker compose $COMPOSE_FILES build --no-cache
print_success "Docker images built"
fi
# Start services
print_info "Starting services..."
docker compose $COMPOSE_FILES up -d
print_success "Services started"
# Wait for services to be healthy
print_info "Waiting for services to be healthy (30 seconds)..."
sleep 30
# Check service health
print_info "Checking container status..."
docker compose $COMPOSE_FILES ps
echo ""
}
# =============================================================================
# Display Status and Instructions
# =============================================================================
display_status() {
print_header "Local Development Environment Ready"
echo -e "${GREEN}✓ Backend services are running in Docker${NC}"
echo ""
echo -e "${BLUE}Service URLs:${NC}"
echo " API: http://localhost:8003"
echo " Docs: http://localhost:8003/docs"
echo " MongoDB: mongodb://localhost:27017"
echo " Redis: redis://localhost:6379"
echo ""
echo -e "${YELLOW}Next Steps:${NC}"
echo " 1. Start the frontend:"
echo " ${GREEN}cd frontend && npm run dev${NC}"
echo ""
echo " 2. Access the application:"
echo " ${GREEN}http://localhost:6001/video-accessibility${NC}"
echo ""
echo -e "${BLUE}Useful Commands:${NC}"
echo " View logs: ${GREEN}docker compose logs -f [service]${NC}"
echo " Restart service: ${GREEN}docker compose restart [service]${NC}"
echo " Stop services: ${GREEN}./scripts/run-local.sh --stop${NC}"
echo " Rebuild images: ${GREEN}./scripts/run-local.sh --rebuild${NC}"
echo ""
echo -e "${BLUE}Available services:${NC} api, worker, mongodb, redis"
echo ""
}
# =============================================================================
# Main Function
# =============================================================================
main() {
# Parse command line arguments
REBUILD=false
STOP=false
RESTART=false
while [[ $# -gt 0 ]]; do
case $1 in
--rebuild)
REBUILD=true
shift
;;
--stop)
STOP=true
shift
;;
--restart)
RESTART=true
shift
;;
*)
print_error "Unknown option: $1"
echo "Usage: $0 [--rebuild] [--stop] [--restart]"
exit 1
;;
esac
done
print_header "Accessible Video Platform - Local Development"
echo ""
# Execute based on flags
if [ "$STOP" = true ]; then
preflight_checks
stop_services
print_success "Local development environment stopped"
exit 0
fi
if [ "$RESTART" = true ]; then
preflight_checks
stop_services
start_services
display_status
exit 0
fi
# Normal startup
preflight_checks
start_services
display_status
}
# Run main function
main "$@"