version: '3.8' services: # MySQL Database mysql: image: mysql:8.0 container_name: langchain-mysql environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456} MYSQL_DATABASE: ${MYSQL_DATABASE:-langchain_learning} ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-123456}"] interval: 10s timeout: 5s retries: 5 networks: - langchain-network # FastAPI Application api: build: context: . dockerfile: Dockerfile target: production container_name: langchain-api env_file: - .env environment: DATABASE_URL: mysql+pymysql://root:${MYSQL_ROOT_PASSWORD:-123456}@mysql:3306/${MYSQL_DATABASE:-langchain_learning} FAISS_BASE_PATH: /app/data/faiss_indexes ports: - "${API_PORT:-8000}:8000" volumes: - faiss_data:/app/data/faiss_indexes depends_on: mysql: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - langchain-network restart: unless-stopped # Development API (optional - use with docker-compose -f docker-compose.yml -f docker-compose.dev.yml up) api-dev: build: context: . dockerfile: Dockerfile target: development container_name: langchain-api-dev env_file: - .env environment: DATABASE_URL: mysql+pymysql://root:${MYSQL_ROOT_PASSWORD:-123456}@mysql:3306/${MYSQL_DATABASE:-langchain_learning} FAISS_BASE_PATH: /app/data/faiss_indexes DEBUG: "true" ports: - "8001:8000" volumes: - ./src:/app/src - ./scripts:/app/scripts - faiss_data:/app/data/faiss_indexes depends_on: mysql: condition: service_healthy networks: - langchain-network profiles: - dev networks: langchain-network: driver: bridge volumes: mysql_data: driver: local faiss_data: driver: local