# Docker Compose 生产部署 ## 快速开始 ```bash # 1. 配置环境变量 cp .docker.env.example .docker.env # 编辑 .docker.env,填入真实的 API Key 和密码 # 有域名时设置 DOMAIN=your-domain.com # 2. 启动所有服务 docker compose --env-file .docker.env up -d # 3. 查看状态 docker compose ps docker compose logs -f ``` ## 服务清单 | 服务 | 端口 | 说明 | |------|------|------| | caddy | 80 / 443 | 反向代理,自动 HTTPS | | gateway | 8080 (内部) | API 网关 | | ai-core | 8081 (内部) | AI 核心 | | memory-service | 8091 (内部) | 记忆检索 | | voice-service | 8093 (内部) | 语音识别 | | iot-debug-service | 8083 (内部) | IoT 调试 | | ethend | 9090 (外部) | 管理控制台 | | postgres | 5432 (内部) | 数据库 (pgvector/pg16) | | redis | 6379 (内部) | 缓存 | | qdrant | 6333 (内部) | 向量数据库 | | minio | 9000 (内部) | 对象存储 | | searxng | 8080 (内部) | 搜索引擎 | ## 环境变量 所有变量在 `.docker.env` 中配置,完整模板见 [.docker.env.example](../../.docker.env.example)。 ### 必填(服务启动 panic 若缺失) | 变量 | 说明 | |------|------| | `LLM_API_URL` | LLM API 地址 | | `LLM_API_KEY` | LLM API 密钥 | | `ADMIN_PASSWORD` | 管理员密码 | | `JWT_SECRET` | JWT 签名密钥 | | `INTERNAL_SERVICE_TOKEN` | 服务间通信认证 Token | | `POSTGRES_PASSWORD` | 数据库密码 | | `MINIO_SECRET_KEY` | MinIO 密钥 | ### 推荐配置 | 变量 | 默认值 | 说明 | |------|--------|------| | `LLM_MODEL` | `gpt-4o` | 主模型 | | `LLM_FALLBACK_MODEL` | `gpt-4o-mini` | 回退模型 | | `ADMIN_USERNAME` | `admin` | 管理员用户名 | | `ADMIN_NICKNAME` | `管理员` | AI 对管理员的称呼 | | `REGISTRATION_ENABLED` | `false` | 开放注册(生产建议关闭) | | `ALLOWED_ORIGINS` | `http://localhost:5173,...` | CORS 白名单 | | `ENABLE_BACKGROUND_THINKING` | `true` | 后台自主思考 | | `ACME_EMAIL` | — | Let's Encrypt 证书邮箱 | ## 域名与 HTTPS 在 `.docker.env` 中设置 `DOMAIN` 和 `ACME_EMAIL`: ```bash # 无域名(仅 HTTP) DOMAIN= # 有域名(自动 HTTPS) DOMAIN=your-domain.com ACME_EMAIL=admin@your-domain.com ``` Caddy 在 `DOMAIN` 有值时自动从 Let's Encrypt 申请 TLS 证书,无需额外配置。 ## 常用命令 ```bash # 重新构建并启动单个服务 docker compose up -d --build gateway # 查看特定服务日志 docker compose logs -f ai-core # 停止所有服务 docker compose down # 停止并删除数据卷(危险) docker compose down -v ```