version: '3.8' services: backend: build: context: ./backend dockerfile: Dockerfile ports: - "5000:5000" environment: - SUPABASE_URL=${SUPABASE_URL} - SUPABASE_KEY=${SUPABASE_KEY} - CLIENT_ID=${CLIENT_ID} - CLIENT_SECRET=${CLIENT_SECRET} - REDIRECT_URL=${REDIRECT_URL} - HUGGING_KEY=${HUGGING_KEY} - JWT_SECRET_KEY=${JWT_SECRET_KEY} - SECRET_KEY=${SECRET_KEY} - DEBUG=${DEBUG} - SCHEDULER_ENABLED=${SCHEDULER_ENABLED} - PORT=5000 - LANG=C.UTF-8 - LC_ALL=C.UTF-8 - PYTHONIOENCODING=utf-8 - PYTHONUTF8=1 - DOCKER_CONTAINER=true - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/0 volumes: - ./backend:/app env_file: - ./backend/.env depends_on: - supabase - redis networks: - lin-network frontend: build: context: ./frontend dockerfile: Dockerfile ports: - "3000:3000" volumes: - ./frontend:/app - /app/node_modules environment: - VITE_API_URL=http://localhost:5000/api - VITE_NODE_ENV=development depends_on: - backend networks: - lin-network profiles: - dev supabase: image: supabase/postgres:latest ports: - "5432:5432" environment: - POSTGRES_DB=lin - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres volumes: - supabase_data:/var/lib/postgresql/data networks: - lin-network redis: image: redis:alpine ports: - "6379:6379" networks: - lin-network # Production-ready Nginx reverse proxy nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./frontend/build:/usr/share/nginx/html - ./ssl:/etc/nginx/ssl depends_on: - frontend - backend networks: - lin-network profiles: - prod volumes: supabase_data: networks: lin-network: driver: bridge