feat: 添加数字人对接中转服务 Docker Compose 部署方案

- 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 密钥泄露
This commit is contained in:
2026-04-22 14:24:59 +08:00
parent 0f765281cb
commit 7d07eee2be
5 changed files with 80 additions and 32 deletions

View File

@@ -1,24 +1,29 @@
# ============================================================
# 数字人对接中转服务 - docker-compose.yml
#
# 环境变量说明(填入 .env):
# DIFY_URL - Dify 服务地址
# DIFY_API_KEY - Dify API 密钥
# DH_PORT - 宿主机映射端口(默认 8000)
# REDIS_EXPOSE - Redis 是否暴露宿主机端口,默认 false(仅容器内互通)
#
# 使用方法:
# 1. 将 DIFY_URL 和 DIFY_API_KEY 填入 .env 文件
# 2. 执行: docker compose up -d
# 3. 验证: curl http://localhost:8000
# 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 和 ports 配置
# networks:
# - digital-human-net
# ports:
# - "6379:6379"
networks:
- digital-human-net
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
@@ -33,30 +38,24 @@ services:
container_name: digital-human-relay
restart: unless-stopped
ports:
- "8000:8000"
- "${DH_PORT:-8000}:8000"
environment:
# Dify 服务地址,如 https://atwdify.antiwearvalve.com/v1
DIFY_URL: "${DIFY_URL}"
# Dify API 密钥,如 app-PDkSHiHZsZIluoZF7N2OlNZM
DIFY_API_KEY: "${DIFY_API_KEY}"
# Redis 连接地址(服务名方式,Docker Compose 内部 DNS)
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
# ============================================================
# 网络配置(生产环境取消注释)
# ============================================================
# networks:
# digital-human-net:
# driver: bridge
networks:
digital-human-net:
driver: bridge