DeepSeek-Harness (DSH) 部署说明文档
本文档记录了基于 Docker 的 DeepSeek-Harness 生产环境部署流程,包括镜像构建、容器管理、反向代理、基本认证及数据持久化配置。
1. 环境概览
| 项目 | 详情 |
|---|---|
| 应用名称 | DeepSeek-Harness (DSH) |
| 源码仓库 | https://github.com/deepseek-ai/deepseek-harness.git |
| 镜像版本 | deepseek-harness:local(基于dsh-v0.1.0-rc.7构建) |
| 运行模式 | Docker 容器,使用host网络模式 |
| 容器端口 | 3080(监听127.0.0.1:3080) |
| 主机端口映射 | 无(host 网络直接占用主机端口) |
| 数据持久化 | /data/dsh/app↔ 容器内/app |
| 反向代理 | Nginx(监听 80 端口,添加 HTTP 基本认证) |
| 域名 | example.com |
| 认证用户 | dsh(密码在/etc/nginx/conf.d/.htpasswd) |
2. 部署步骤
2.1 获取源代码并构建镜像
# 克隆代码gitclone https://github.com/deepseek-ai/deepseek-harness.gitcddeepseek-harness# 切换到稳定版本(可选)gitcheckout dsh-v0.1.0-rc.7# 构建 Docker 镜像dockerbuild-tdeepseek-harness:local.2.2 准备持久化目录
mkdir-p/data/dsh/app如果已有运行中的容器,先备份原有程序文件(避免挂载后丢失):
dockercpdsh:/app/. /data/dsh/app/2.3 编写 Docker Compose 配置
创建/opt/dsh/docker-compose.yml:
version:'3'services:dsh:image:deepseek-harness:localcontainer_name:dshnetwork_mode:host# 使用主机网络,容器内 127.0.0.1 即宿主机 127.0.0.1restart:unless-stoppedvolumes:-/data/dsh/app:/app# 挂载整个 /app 实现数据持久化# 环境变量(如需要可添加)# environment:# - DEEPSEEK_API_KEY=your_key 未实际的使用该参数,需要等后续ds版本尝试使用变量控制2.4 启动容器
cd/opt/dshdocker-composeup-d查看状态:
docker-composepsdockerlogs dsh验证服务:
curl-Ihttp://127.0.0.1:3080# 应返回 HTTP/1.1 200 OK3. 配置 Nginx 反向代理与基本认证
3.1 安装 Nginx 和 htpasswd 工具
# CentOS / RHELyuminstall-ynginx httpd-tools# Ubuntu / Debian# apt install -y nginx apache2-utils3.2 创建密码文件
mkdir-p/etc/nginx/conf.d htpasswd-c/etc/nginx/conf.d/.htpasswd dsh# 按提示输入密码3.3 Nginx 虚拟主机配置
配置文件路径(以宝塔面板为例):/www/server/panel/vhost/nginx/example.com.conf
关键配置片段(已省略通用部分):
server { listen 80; server_name example.com; # 基本认证 auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd; location / { proxy_pass http://127.0.0.1:3080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # WebSocket 支持 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }注意:如果使用宝塔面板,可以直接在面板中添加站点并修改配置文件,避免路径混淆。
3.4 测试并重载 Nginx
nginx-tsystemctl reload nginx3.5 放行防火墙
firewall-cmd--permanent--add-service=http firewall-cmd--reload云服务器安全组需开放 80(HTTPS 可选 443)端口。
4. 验证部署
浏览器访问http://example.com,弹出认证窗口,输入用户名dsh及密码,成功进入应用界面即部署完成。
5. 日常管理命令
所有操作均在/opt/dsh目录下执行:
cd/opt/dsh| 操作 | 命令 |
|---|---|
| 查看运行状态 | docker-compose ps |
| 查看实时日志 | docker-compose logs -f dsh |
| 重启容器 | docker-compose restart |
| 停止容器 | docker-compose stop |
| 启动已停止的容器 | docker-compose start |
| 删除容器(保留数据) | docker-compose down |
| 进入容器内部 | docker exec -it dsh /bin/sh |
6. 数据持久化说明
- 容器内
/app目录已挂载到宿主机/data/dsh/app。 - 所有应用数据(包括配置、数据库文件、日志、上传文件等)都会写入
/data/dsh/app。 - 删除容器或镜像不会影响该目录,数据安全。
查看数据目录内容:
ls-la/data/dsh/app7. 备份与恢复
7.1 备份数据
tar-czfdsh-backup-$(date+%Y%m%d).tar.gz /data/dsh/app7.2 恢复数据
# 停止容器docker-composedown# 恢复数据tar-xzfdsh-backup-YYYYMMDD.tar.gz-C/# 重新启动docker-composeup-d8. 升级镜像(重要注意事项)
由于当前docker-compose.yml挂载了整个/app,直接使用新镜像启动不会更新程序文件(因为宿主机目录中的程序文件是旧版本)。升级时请按以下步骤操作:
8.1 构建新镜像
cd/path/to/sourcedockerbuild-tdeepseek-harness:new.8.2 停止旧容器
cd/opt/dshdocker-composedown8.3 备份当前数据(可选)
cp-r/data/dsh/app /data/dsh/app_backup8.4 将新镜像的程序文件复制到宿主机目录
dockerrun--rmdeepseek-harness:newtar-C/app-c.|tar-C/data/dsh/app-x8.5 更新docker-compose.yml中的镜像标签为deepseek-harness:new
8.6 重新启动
docker-composeup-d优化建议:未来可修改挂载策略,只挂载数据子目录(如
/app/data),使程序文件完全跟随镜像更新,无需上述额外步骤。
9. 故障排查
| 现象 | 检查方法 |
|---|---|
| 容器无法启动 | docker logs dsh/docker-compose logs dsh |
| 端口被占用 | netstat -tulpn | grep 3080 |
| Nginx 返回 502 | 容器是否运行?proxy_pass地址是否正确? |
| 认证不生效 | Nginx 配置中auth_basic_user_file路径是否正确,密码文件是否存在 |
| 数据未持久化 | 确认挂载目录是否正确,检查/data/dsh/app是否有新文件生成 |
10. 联系与维护
- 项目官网:https://github.com/deepseek-ai/deepseek-harness
- 本部署文档维护人:阿白的旅行
- 更新日期:2026-08-19
提示1:若需启用 HTTPS,可使用 Certbot 自动获取 Let’s Encrypt 证书,具体命令:
certbot--nginx-dexample.com
提示2:本方案的认证方式过于简陋,建议开启nginx白名单 / 其他自定义防护措施