version: '3.8' services: postgres: image: pgvector/pgvector:pg16 container_name: cyrene_postgres environment: POSTGRES_USER: cyrene POSTGRES_PASSWORD: cyrene_pass POSTGRES_DB: cyrene_ai ports: ["5432:5432"] volumes: [cyrene_pg:/var/lib/postgresql/data] healthcheck: test: ["CMD-SHELL", "pg_isready -U cyrene -d cyrene_ai"] interval: 10s; timeout: 3s; retries: 5 cyrene: build: context: ./backend dockerfile: Dockerfile container_name: cyrene_app ports: ["8080:8080"] environment: ENV: production POSTGRES_HOST: postgres POSTGRES_PORT: "5432" POSTGRES_USER: cyrene POSTGRES_PASSWORD: cyrene_pass POSTGRES_DB: cyrene_ai JWT_SECRET: ${JWT_SECRET:-change-me-32-chars-minimum!!} ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin12345} LLM_API_URL: ${LLM_API_URL:-https://api.deepseek.com/v1} LLM_API_KEY: ${LLM_API_KEY} LLM_MODEL: ${LLM_MODEL:-deepseek-v4-flash} depends_on: postgres: condition: service_healthy restart: unless-stopped volumes: cyrene_pg: