video-accessibility/DEPLOYMENT_OPTIONS.md

4.3 KiB

Deployment Options for Video Accessibility Platform

🏗 Current Docker Setup

Your docker-compose.yml serves both frontend and backend in development mode:

  • Frontend: Vite dev server on port 5173 (hot reload)
  • Backend: FastAPI on port 8000 (auto-reload)
  • Database: MongoDB + Redis
  • Workers: Celery + Change Stream service

🚀 Production Deployment Options

What it does:

  • Frontend: Built React app served by Nginx (port 80)
  • Backend: Production FastAPI (port 8000)
  • Single docker-compose up deployment

Usage:

# Production deployment
docker-compose -f docker-compose.prod.yml up -d

# Access:
# Frontend: http://localhost:80
# Backend API: http://localhost:8000

Benefits:

  • Single command deployment
  • Optimized frontend build
  • Production-ready configuration
  • Built-in health checks
  • Nginx caching and compression

2. Single Domain with Nginx Proxy Best UX

What it does:

  • Everything served from one domain (port 80)
  • /api/* routes to backend
  • /* routes to frontend
  • WebSocket support included

Usage:

# Uses nginx/nginx.conf for routing
docker-compose -f docker-compose.prod.yml up nginx

# Access everything at: http://localhost

Benefits:

  • No CORS issues
  • Single domain simplicity
  • Better caching control
  • Rate limiting built-in
  • SSL termination ready

3. Cloud-Native (Google Cloud) 🌟 Enterprise

Architecture:

Frontend (Cloud Storage + CDN) → API (Cloud Run) → Database (MongoDB Atlas)
                                      ↓
                               Workers (Cloud Run)

Components:

  • Frontend: Build + deploy to Cloud Storage, serve via Cloud CDN
  • Backend: Deploy to Cloud Run (auto-scaling)
  • Workers: Separate Cloud Run service for Celery
  • Database: MongoDB Atlas (managed)
  • Files: Google Cloud Storage (already integrated)

Benefits:

  • Auto-scaling
  • Global CDN
  • Managed services
  • Pay-per-use
  • High availability

📊 Comparison Matrix

Option Complexity Cost Scalability Maintenance
Dev Docker Low Very Low Limited Manual
Prod Docker Low Low Manual Medium
Nginx Proxy Medium Low Manual Medium
Cloud Native High Variable Automatic Low

🚀 Quick Migration Guide

From Development → Production Docker

  1. Update environment variables:

    cp .env.example .env.prod
    # Edit .env.prod with production values
    
  2. Deploy:

    docker-compose -f docker-compose.prod.yml up -d
    
  3. Verify:

    # Frontend (optimized build)
    curl http://localhost:80
    
    # Backend API
    curl http://localhost:8000/health
    

From Docker → Cloud Native

  1. Build frontend:

    cd frontend && npm run build
    gsutil -m rsync -r -d dist/ gs://your-bucket/
    
  2. Deploy backend:

    gcloud run deploy video-api --source=./backend --region=us-central1
    
  3. Deploy workers:

    gcloud run deploy video-workers --source=./backend --region=us-central1
    

🔧 Configuration Files Created

docker-compose.prod.yml

  • Production-ready Docker setup
  • Nginx serving frontend
  • Optimized environment variables
  • Health checks included

nginx/nginx.conf

  • Single-domain routing configuration
  • API proxy with rate limiting
  • WebSocket support
  • Static file caching
  • Security headers

🎯 Recommendations by Use Case

Small Team / MVP

→ Use Production Docker (docker-compose.prod.yml)

Growing Business

→ Use Nginx Proxy setup for better performance

Enterprise / Scale

→ Go Cloud Native with Google Cloud Run + CDN

🔍 Current Status

Development: Already working with docker-compose up
Production Docker: Ready with docker-compose.prod.yml
Nginx Proxy: Configured and ready to deploy
⚠️ Cloud Native: Requires GCP setup and configuration

Your current Docker setup is development-optimized. For production, use the new docker-compose.prod.yml which properly builds and serves the React app through Nginx while keeping the backend API separate but coordinated.