version: '3.8' services: postgres: image: pgvector/pgvector:pg16 restart: always environment: POSTGRES_DB: bible_chat POSTGRES_USER: bible_admin POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data - ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql networks: - bible_network healthcheck: test: ["CMD-SHELL", "pg_isready -U bible_admin -d bible_chat"] interval: 30s timeout: 10s retries: 3 app: build: context: . dockerfile: docker/Dockerfile.prod restart: always environment: DATABASE_URL: postgresql://bible_admin:${DB_PASSWORD}@postgres:5432/bible_chat AZURE_OPENAI_KEY: ${AZURE_OPENAI_KEY} AZURE_OPENAI_ENDPOINT: ${AZURE_OPENAI_ENDPOINT} AZURE_OPENAI_DEPLOYMENT: ${AZURE_OPENAI_DEPLOYMENT} OLLAMA_API_URL: ${OLLAMA_API_URL} JWT_SECRET: ${JWT_SECRET} NEXTAUTH_URL: ${NEXTAUTH_URL} NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} NODE_ENV: production depends_on: postgres: condition: service_healthy networks: - bible_network healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:3000/api/health || exit 1"] interval: 30s timeout: 10s retries: 3 nginx: image: nginx:alpine restart: always ports: - "80:80" - "443:443" volumes: - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf - ./certbot/conf:/etc/letsencrypt - ./certbot/www:/var/www/certbot depends_on: app: condition: service_healthy networks: - bible_network networks: bible_network: driver: bridge volumes: postgres_data: