飞牛NAS跑DeepSeek Harness公网访问:ZeroNews隧道+BasicAuth
在飞牛 NAS 上用 Nginx + DeepSeek Harness 容器部署,再通过 ZeroNews HTTPS 隧道与 BasicAuth 安全发布到公网。
ZeroNews 采用 Nginx + Harness 的部署方式,让 Harness 继续跑在飞牛上,再通过 HTTPS 公网域名完成远程访问,不再局限于本机部署。DeepSeek Harness Web UI 默认监听 http://127.0.0.1:3080。官方对部分配置类 API(模型、凭证、工作区等)做了严格限制:只信任回环来源。本机用 127.0.0.1 打开没问题;一旦把端口挂到 NAS 局域网或公网域名,模型页、远程改设置往往会 403。明文 http://IP 还会踩浏览器安全上下文,出现 crypto.randomUUID is not a function。如果你是在 macOS 本机跑 Harness,可参考 安全受控远程访问内网 DeepSeek Harness。
在能公网访问的基础上,ZeroNews 还提供 BasicAuth、IP 黑白名单、地址围栏 等安全策略,让 Harness 在更安全可控的情况下实现公网访问。

一、在飞牛上安装 ZeroNews 客户端
打开飞牛 应用中心,搜索
zeronews,安装并一路下一步。安装完成后打开客户端界面。


打开 ZeroNews 控制台 → 快速开始,复制 AuthToken。

回到飞牛的 ZeroNews 客户端页面,粘贴 Token,点 绑定。

等 10–20 秒,客户端状态变为 在线。同时在控制台 关联客户端 里,应能看到这台飞牛。


更完整的飞牛安装说明也可参考 在飞牛私有云 fnOS 运行 ZeroNews。
二、先加域名,再加 HTTPS 隧道
docker-compose.yml 里要回填访问域名,所以域名和 DSH 的 HTTPS 隧道可以先创建。
先添加 DSH Web UI 的自定义域名控制台 → 自定义域名 → 添加域名,子域起个好记的前缀,例如 dsharp。


然后添加 DSH HTTPS 隧道域名添加完成后,进入 隧道管理 添加 DSH Web UI 的 HTTPS 隧道。部署时对外只暴露 Nginx 的 3080 端口,隧道内网端口填 3080。
配置项填写值隧道协议HTTPS带宽按套餐选择,建议 5 Mbps 或更高公网域名选择自定义域名,再选刚添加的域名(如 dsharp.hn.takin.cc)绑定设备选择这台飞牛客户端内网地址默认本机内网端口3080


三、准备部署目录和 Nginx 配置
隧道添加完成后,回到飞牛上准备 DSH 容器的部署目录。打开飞牛 文件管理,在「我的文件」里建一个部署目录。例如在 docker 下新建 dsh,后文以这个目录为准。

在电脑上新建 nginx.conf,复制以下内容,再上传到该 dsh 目录(与即将创建的 docker-compose.yml 同级):
events {
worker_connections 1024;
}
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://deepseek-harness:3080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}
}

四、用 Compose 部署 Harness 和 Nginx
打开飞牛 Docker → Compose。


新建项目:
项目名:
dsh路径:选中上一步的
dsh目录来源:创建
docker-compose.yml把下面整段粘进去,把
DSH_TRUSTED_HOSTS改成你的隧道域名勾选 创建项目后立即启动,确认
services:
deepseek-harness:
image: alliot/deepseek-harness:0.1.0-rc.6.2
restart: unless-stopped
user: root
expose:
- "3080"
environment:
DSH_TRUSTED_HOSTS: dsharp.hn.takin.cc
DSH_ALLOW_REMOTE_CONFIGURATION: "1"
DSH_TELEMETRY_DISABLED: "1"
volumes:
- ./data:/home/node/.dsh
- ./work:/work
- type: bind
source: ./workspace
target: /workspace
read_only: true
tmpfs:
- /tmp:rw,nosuid,nodev,size=1g
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
stop_grace_period: 10s
networks:
- dsh-network
nginx-proxy:
image: nginx:alpine
container_name: dsh-nginx-proxy
restart: unless-stopped
ports:
- "3080:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- deepseek-harness
networks:
- dsh-network
networks:
dsh-network:
driver: bridge

等待镜像拉取完成并启动,确认两个容器都在运行。


几个注意事项:
user: root避免飞牛把运行用户改成普通账号后,挂载目录写不进去。Harness 不要再映射
3080:3080,只expose给 Nginx;对外只有 Nginx 的3080:80。./workspace挂到容器/workspace,后面添加工作区就选这个路径。./data是 Harness 配置和会话数据,备份时整目录带走。改过
DSH_TRUSTED_HOSTS必须重建项目,不要只重启。
两个容器都是绿色运行中后,本机 3080 已经起来。接下来不要用 http://飞牛IP:3080 去配模型——明文 IP 不是安全上下文,提供方目录会加载失败。直接走已经建好的 HTTPS 域名。
五、用域名打开 Web UI,完成基础配置
容器运行正常后,用浏览器打开隧道域名访问 DSH Web UI,例如:
打开后先完成基础配置。
配置模型 API Key
可以直接配置 DeepSeek 的 API Key。

添加工作区
回到主界面,新建工作区,目录选容器内的/workspace,对应飞牛dsh/workspace目录。Agent 改文件、跑命令都落在这里,容器重建不会丢。



工作区建好后,开一个会话,先问一句:
能正常回复,说明域名、Nginx、受信 Host 和模型都通了。
文档截图中的域名仅为示例,请以 ZeroNews 控制台显示的实际地址为准。
六、给隧道做安全加固
Harness Web UI 本身没有登录认证,同时操作权限又比较大,能改文件、跑命令,域名一旦泄露风险很大。因此在 ZeroNews 网关入口给这条 HTTPS 隧道做安全加固。这里使用BasicAuth给 DSH Web UI 加一层账号认证。在隧道的流量策略中配置 BasicAuth。

点击编辑:启用,填写用户名:密码,保存。


刷新域名,应先弹出浏览器登录框。随便输一组应被拒绝;输入正确账号后进入 Web UI,说明鉴权生效。


除了 BasicAuth,ZeroNews 还支持IP 白名单或地址围栏。可按实际情况再开一项。
地址围栏(地域访问控制)地址围栏通过识别访问来源 IP 的位置,实现基于国家 / 省份的地域访问控制,缩小可访问来源范围。如果访问都固定在某一个省份,可以只允许该省访问。在流量策略的 Geo Location 中配置,例如只允许广东省访问。



Harness 这类高权限面板:BasicAuth 必须开;白名单或围栏按实际情况再开一项。
小结把 DeepSeek Harness 部署在可长期运行的内网 NAS 上,工作区、密钥、改文件 / 跑命令的能力都留在本机;再通过 ZeroNews 的 BasicAuth、地址围栏、IP 黑白名单做安全公网发布,限制可访问的用户范围和身份,就可以在任何位置安全地远程执行和查看任务。


