- digital-human: FastAPI 中转服务,连接客户端与 Dify LLM 平台 - Redis: 容器内缓存,支持请求体哈希缓存(300s TTL) - 支持通过 DH_PORT 自定义宿主机映射端口 - Redis 默认不暴露端口,通过 docker-compose.redis-expose.yml 按需开启 - 显式声明 digital-human-net 网络,容器间通过内部 DNS 互通 - 修复 redis.ConnectionError 导入路径(使用 redis.exceptions) - Dockerfile pip 安装回退机制,避免镜像源不可用时构建失败 - 新增 .gitignore 防止 .env 密钥泄露
62 lines
2.0 KiB
YAML
62 lines
2.0 KiB
YAML
# ============================================================
|
||
# 数字人对接中转服务 - docker-compose.yml
|
||
#
|
||
# 环境变量说明(填入 .env):
|
||
# DIFY_URL - Dify 服务地址
|
||
# DIFY_API_KEY - Dify API 密钥
|
||
# DH_PORT - 宿主机映射端口(默认 8000)
|
||
# REDIS_EXPOSE - Redis 是否暴露宿主机端口,默认 false(仅容器内互通)
|
||
#
|
||
# 使用方法:
|
||
# 1. cp .env.example .env,填入 DIFY_URL 和 DIFY_API_KEY
|
||
# 2. docker compose up -d
|
||
# 3. 验证: curl http://localhost:${DH_PORT:-8000}
|
||
# ============================================================
|
||
|
||
services:
|
||
|
||
# ── Redis 缓存服务 ──────────────────────────────────────
|
||
# Redis 仅在容器网络内部可用,digital-human 通过 Docker Compose
|
||
# 内部 DNS(redis 服务名)直连,宿主机无法直接访问。
|
||
redis:
|
||
image: redis:7-alpine
|
||
container_name: digital-human-redis
|
||
restart: unless-stopped
|
||
networks:
|
||
- digital-human-net
|
||
healthcheck:
|
||
test: ["CMD", "redis-cli", "ping"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 3
|
||
|
||
# ── 数字人对接中转服务 ──────────────────────────────────
|
||
digital-human:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile
|
||
container_name: digital-human-relay
|
||
restart: unless-stopped
|
||
ports:
|
||
- "${DH_PORT:-8000}:8000"
|
||
environment:
|
||
DIFY_URL: "${DIFY_URL}"
|
||
DIFY_API_KEY: "${DIFY_API_KEY}"
|
||
REDIS_HOST: "redis"
|
||
REDIS_PORT: "6379"
|
||
depends_on:
|
||
redis:
|
||
condition: service_healthy
|
||
networks:
|
||
- digital-human-net
|
||
healthcheck:
|
||
test: ["CMD", "curl", "-f", "http://localhost:8000/"]
|
||
interval: 30s
|
||
timeout: 10s
|
||
retries: 3
|
||
start_period: 15s
|
||
|
||
networks:
|
||
digital-human-net:
|
||
driver: bridge
|