services: postgres: image: postgres:15-alpine container_name: mvp-postgres environment: POSTGRES_DB: motovaultpro POSTGRES_USER: postgres POSTGRES_PASSWORD: localdev123 POSTGRES_INITDB_ARGS: "--encoding=UTF8" volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: mvp-redis command: redis-server --appendonly yes volumes: - redis_data:/data ports: - "6379:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 minio: image: minio/minio:latest container_name: mvp-minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin123 volumes: - minio_data:/data ports: - "9000:9000" # API - "9001:9001" # Console healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 backend: build: context: ./backend dockerfile: Dockerfile cache_from: - node:20-alpine container_name: mvp-backend environment: NODE_ENV: development PORT: 3001 DB_HOST: postgres DB_PORT: 5432 DB_NAME: motovaultpro DB_USER: postgres DB_PASSWORD: localdev123 REDIS_HOST: redis REDIS_PORT: 6379 MINIO_ENDPOINT: minio MINIO_PORT: 9000 MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin123 MINIO_BUCKET: motovaultpro AUTH0_DOMAIN: ${AUTH0_DOMAIN:-your-domain.auth0.com} AUTH0_CLIENT_ID: ${AUTH0_CLIENT_ID:-your-client-id} AUTH0_CLIENT_SECRET: ${AUTH0_CLIENT_SECRET:-your-client-secret} AUTH0_AUDIENCE: ${AUTH0_AUDIENCE:-https://api.motovaultpro.com} GOOGLE_MAPS_API_KEY: ${GOOGLE_MAPS_API_KEY:-your-google-maps-key} VPIC_API_URL: https://vpic.nhtsa.dot.gov/api/vehicles ports: - "3001:3001" depends_on: - postgres - redis - minio healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3001/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s frontend: build: context: ./frontend dockerfile: Dockerfile cache_from: - node:20-alpine - nginx:alpine container_name: mvp-frontend environment: NODE_ENV: development VITE_API_BASE_URL: http://backend:3001/api VITE_AUTH0_DOMAIN: ${VITE_AUTH0_DOMAIN:-motovaultpro.us.auth0.com} VITE_AUTH0_CLIENT_ID: ${VITE_AUTH0_CLIENT_ID:-yspR8zdnSxmV8wFIghHynQ08iXAPoQJ3} VITE_AUTH0_AUDIENCE: ${VITE_AUTH0_AUDIENCE:-https://api.motovaultpro.com} ports: - "0.0.0.0:3000:3000" # HTTP (redirects to HTTPS) - "0.0.0.0:443:3443" # HTTPS volumes: - ./certs:/etc/nginx/certs:ro # Mount SSL certificates depends_on: - backend healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "--no-check-certificate", "https://localhost:3443"] interval: 30s timeout: 10s retries: 3 start_period: 20s volumes: postgres_data: redis_data: minio_data: