version: '3.8' services: # Backend API Service backend: build: context: ../backend dockerfile: Dockerfile container_name: ai4write-backend restart: unless-stopped environment: NODE_ENV: ${NODE_ENV:-production} PORT: 3001 # PostgreSQL - 外部服务 DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}?schema=public&connection_limit=20&pool_timeout=10 # MinIO - 外部服务 MINIO_ENDPOINT: ${MINIO_ENDPOINT} MINIO_PORT: ${MINIO_PORT} MINIO_USE_SSL: ${MINIO_USE_SSL:-false} MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY} MINIO_SECRET_KEY: ${MINIO_SECRET_KEY} MINIO_BUCKET: ${MINIO_BUCKET} # Redis - 外部服务 REDIS_URL: ${REDIS_URL} # Embedding API EMBEDDING_API_URL: ${EMBEDDING_API_URL} EMBEDDING_MODEL: ${EMBEDDING_MODEL} # LLM Configuration DEEPSEEK_BASE_URL: ${DEEPSEEK_BASE_URL} DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY} DEEPSEEK_MODEL: ${DEEPSEEK_MODEL} # JWT Configuration JWT_SECRET: ${JWT_SECRET} JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-7d} networks: - ai4write-network extra_hosts: - "host.docker.internal:host-gateway" # Frontend Nuxt.js Application frontend: build: context: ../frontend dockerfile: Dockerfile container_name: ai4write-frontend restart: unless-stopped environment: NODE_ENV: ${NODE_ENV:-production} # 使用同域反向代理,浏览器调用 /api NUXT_PUBLIC_API_BASE_URL: ${NUXT_PUBLIC_API_BASE_URL:-/api} networks: - ai4write-network depends_on: - backend # Reverse proxy for single-domain entry proxy: image: nginx:alpine container_name: ai4write-proxy restart: unless-stopped depends_on: - frontend - backend ports: - "${PROXY_PORT:-8089}:80" # 如需 HTTPS,可在此添加 443 并挂载证书 # - "443:443" volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro networks: - ai4write-network networks: ai4write-network: driver: bridge