DeepSeek Harness 云服务器部署指南:后台运行、SSH 隧道与 Tailscale 远程访问

chemicalcat 发布于 2 小时前 3 次阅读


近日期待已久的 DeepSeek Harness(后文简称 DSH)终于发布了开发者预览版。我浏览了相关视频后,就迫不及待地进行了部署。由于比较担心直接部署在自己的个人电脑上容易出什么问题,所以这次我选择部署在自己的一台云服务器上,并根据实际需要优化了一下 DSH 的运行体验。现在和各位分享一下具体的部署流程。

因为 DSH 的安装十分简单,所以本文主要聚焦于 DSH 部署在服务器上时的访问方法和优化调整,比如如何保证 DSH 自动、稳定地运行在服务器后台,以及如何快捷访问 DSH Web 界面。

零、准备工作

本次部署所需要的设备和工具有:

1. 一台 Linux 系统云服务器

各大厂商的云服务器(阿里云、腾讯云、雨云等)都可以。这里我使用的是一台 2 核 2G 的雨云服务器,所使用的系统是 Ubuntu 24.04 LTS。

2. 一台个人电脑

任意主流操作系统均可。本次部署我使用的是 Windows 11 操作系统。

3. AI 调用 API

DSH 兼容市面上主流模型的 API,不过为了原汤化原食(当然也稍微省事点),我这里直接使用了 DeepSeek 开放平台的 API。下面附上开放平台的链接:

DeepSeek 开放平台

4. 一台移动设备(非必要)

移动设备可以是手机或者平板,但这不是必要的。后文主要会讲解如何通过移动设备访问 DSH,这样就可以随时随地愉快地 vibe coding~

一、在云服务器上安装 DSH

首先,使用软件远程连接云服务器(这里使用的是 FinalShell)。

1.1 安装 Node.js

安装 DSH 前,服务器上需要安装 Node.js。如果直接从 Node.js 官网快速安装,可能会遇到奇奇怪怪的 Bug。这里我推荐打开以下链接:

安装 DeepSeek Harness(DSH)— Windows / macOS / Linux / WSL 一键教程 | dshbase 中文

找到“Linux — 一键(bash)”的安装命令,进行 Node.js 的安装:

# 安装 Node.js
command -v node >/dev/null 2>&1 || (curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - && sudo apt-get install -y nodejs)

将终端命令复制到 FinalShell 内执行,等待 Node.js 安装完成。

1.2 安装 DSH

完成 Node.js 的安装后,在服务器终端执行如下命令即可安装 DSH:

# DSH 安装命令
npx @deepseek-ai/dsh web

期间可能需要输入 y 确认安装。

安装成功后,终端会被占用并打印:

dsh web: http://127.0.0.1:3080

此时,DSH 服务已经运行在云服务器的 3080 端口上。

1.3 打开 DSH Web UI 页面

由于 DSH 运行在云服务器本地,不能直接访问,这里我们需要建立 SSH 隧道,使个人电脑能够打开浏览器访问 DSH。

首先打开个人电脑的终端,输入如下命令,然后输入服务器登录密码(如果没有设置登录密钥的话):

ssh -N -L 13080:127.0.0.1:3080 用户名@服务器IP地址

# 将“用户名@服务器IP地址”替换为实际的服务器用户名和服务器 IP 地址
# 如果电脑上的 13080 端口被占用,可以换成任意其他端口,例如 13081、11451 等

此时,我们的个人电脑就可以通过本机的 127.0.0.1:13080 访问服务器的 3080 端口。在浏览器中输入 127.0.0.1:13080,即可访问 DSH。首次访问时会提示填入 API Key,填入准备好的 Key 即可。

然后可以创建一个项目并新建会话进行测试。能顺利输出结果,就说明已经顺利完成 DSH 的部署。

二、DSH 云服务器使用优化

2.1 DSH 后台运行

当前运行在云服务器上的 DSH 依赖终端保持服务运行。一旦终端窗口关闭或者 SSH 断开,便不能访问 DSH,所以需要使用 systemd 托管 DSH,保证 DSH 能持续、稳定地运行在云服务器后台。

因为我们已经能够在云服务器上使用 DSH 了,托管办法很简单。只需要创建一个新对话,并打开创造模式,把以下提示词复制给 DSH,让它执行即可:

当前的 DSH 依赖终端运行,使用很不方便。请你使用 systemd 帮我托管 DSH,保证服务器开机后或服务崩溃时能自动启动 DSH,并使其在后台运行,端口默认为 3080。

建议记录 DSH 给出的常用管理命令(主要是记住 DSH 帮我们开启的 systemd 服务叫什么),方便后续的运维工作。

现在,就算我关闭 FinalShell 终端,也可以在本地电脑上通过 127.0.0.1:13080(前提是本地电脑上建立 SSH 隧道的终端没有关闭)访问服务器上的 DSH Web 了。

2.2 制作在个人电脑上一键启动 DSH Web UI 的脚本

如果每次都需要打开终端,输入 ssh -N -L 13080:127.0.0.1:3080 root@服务器IP 来建立 SSH 隧道,然后打开浏览器输入 127.0.0.1:13080,才能最终访问 DSH Web UI,还是相当麻烦的。我们可以制作一个自动化脚本来一键打开 DSH Web UI。

在制作脚本之前,建议先配置好云服务器的密钥登录,这样启动脚本的时候就不需要输入服务器登录密码。这里先简单介绍 Windows 系统如何配置密钥登录。

首先打开个人电脑的终端,输入如下指令:

ssh-keygen -t ed25519 -C "RainYun Server"

RainYun Server 只是作为密钥的备注标记,可以替换为其他方便识别的内容。

然后,生成的公钥和私钥会默认保存到:

C:\Users\你的用户名\.ssh\

其中,生成的 id_ed25519 是私钥,需要保密,绝对不要上传,也绝对不要发给别人。id_ed25519.pub 是公钥,理论上可以公开,我们需要把它上传到服务器。请打开个人电脑的终端,输入如下指令。执行指令时会提示输入一次云服务器的登录密码。

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh 用户名@你的服务器IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

这样密钥就配置成功了。这时我们可以通过 SSH 连接一下服务器,验证是否还需要密码登录。

然后在个人电脑上创建一个 TXT 文本(名称随意,这里我将其命名为 dsh_open.txt),填入如下内容:

@echo off
title DSH SSH Tunnel

echo Starting DSH SSH tunnel...
echo Local:  http://127.0.0.1:13080
echo Remote: 127.0.0.1:3080
echo.

start "DSH SSH Tunnel" cmd /k "ssh -N -L 13080:127.0.0.1:3080 用户名@服务器IP"

timeout /t 2 /nobreak >nul

start "" "http://127.0.0.1:13080"

exit

把其中的 用户名@服务器IP 更换成自己的服务器用户名和 IP。

保存后,把文件的 .txt 后缀改成 .bat 后缀。双击打开,稍等一会儿即可自动启动 DSH Web。

三、采用 Tailscale 从多设备远程访问服务器上的 DSH

如果觉得上面提到的脚本一键启动 DSH Web UI 不够优雅,想在浏览器中直接输入一个链接访问 DSH,或者想在移动设备上访问 DSH,那么可以基于 Tailscale 来实现。

Tailscale 能把处于不同网络下的设备连接进一个虚拟局域网,在所有设备之间建立点对点的加密隧道,并自动完成身份验证、密钥管理、NAT 穿透和路由管理。这样,网络内的设备就可以通过 Tailscale 分配给它们的内网地址相互访问。

3.1 在云服务器上安装 Tailscale

在云服务器终端输入如下安装命令:

curl -fsSL https://tailscale.com/install.sh | sh

完成安装后,在终端输入如下命令完成登录认证:

sudo tailscale up

等待输出诸如 https://login.tailscale.com/a/xxxxxxx 的链接后,将其复制到本地电脑的浏览器中打开。然后选择任意一种方式进行登录,这里我选择 GitHub 登录。

登录后会提示是否把云服务器设备连接到登录账号上,选择“Connect”。

初次使用 Tailscale 时,可能会询问一些信息,按需配置即可。

然后会进入 Tailscale 管理界面,此时已经可以看到我们的云服务器完成了认证,并被分配到一个内网地址,例如 100.116.251.96

我们也可以回到服务器终端,输入如下命令查看当前网络中的设备及其信息:

tailscale status

同时,可以使用如下命令查看当前设备的 IP:

tailscale ip

3.2 在个人电脑上安装 Tailscale

为了能让个人电脑通过 Tailscale 访问云服务器,也需要把个人电脑接入 Tailscale,并在电脑上安装 Tailscale。可以在 Tailscale 的官网上找到对应操作系统的安装包,下面提供官网地址。我的电脑是 Windows 系统,所以选择 Windows 安装包,点击并下载安装。

下载 Tailscale

完成安装后,跟随引导将个人电脑也接入 Tailscale。注意,登录的账号要和当时接入云服务器时登录的账号保持一致。

完成接入后,电脑右下角隐藏托盘中会多出一个类似骰子的 Tailscale 图标。单击即可显示 Tailscale 的配置项;点击头像一栏会出现一个新的子菜单,点击其中的“Admin console…”,浏览器会自动打开 Tailscale 管理页面。

此时会发现,Tailscale 管理页面中显示已经接入了两台设备:一台云服务器和一台个人电脑。这样,我们个人电脑上的 Tailscale 也配置好了。

3.3 配置 DSH Web 访问链接

当前的 DSH Web 运行在服务器的 127.0.0.1:3080 上,我们可以通过如下命令让 Tailscale 建立一条反向代理:

tailscale serve --bg 127.0.0.1:3080

初次运行该命令时,终端会提示需要打开给出的链接进行确认。

复制链接到个人电脑的浏览器中,完成确认即可。

这时再回到终端,会发现 Serve 已经建立。记住诸如 https://rainyun-6s6ksezk.tailf2251b.ts.net/ 的链接。

只要任意设备已经接入 Tailscale 虚拟局域网,打开设备的浏览器并输入这个链接,就可以直接访问云服务器上的 DSH Web。而没有接入该局域网的设备,就算拿到了这个链接,也访问不到服务器上的 DSH Web。

不过,此时由于 DSH 的安全限制,通过这种方式登录 DSH 后并不能读取工作区文件夹(会报错 HTTP 403),还不能正常使用。这时我们还是需要先通过 SSH 登录 DSH,让 DSH 协助我们进行进一步配置。

向 DSH 输入类似下面的提示词:

我现在采用 Tailscale 把当前的服务器和个人电脑接入了同一个虚拟局域网,并用 Tailscale 反向代理了服务器的 127.0.0.1:3080,也就是 DSH 服务。访问链接是 https://rainyun-6s6ksezk.tailf2251b.ts.net/。现在个人电脑可以通过链接访问 DSH Web,但是很多功能报错 403,并不能正常使用,请帮我解决这个问题。

稍等片刻,DSH 会自动排查原因并帮助我们修复这个问题。

随后,就可以通过链接正常访问并使用 DSH Web。

唯一美中不足的是,有一些接口仍然被锁定,不能通过 Tailscale 代理链接进行访问。不过目前开放的功能其实也足以应对大部分场景,必要时再使用 SSH 访问即可。

3.4 使用移动设备访问云服务器上的 DSH

有时候不方便带电脑出门干活,我们也可以借助 Tailscale,把移动设备接入 Tailscale,这样就可以用手机或者平板访问服务器上的 DSH Web。

下面我以自己的华为 MatePad 11 为例,简单演示一下移动设备如何接入 Tailscale。

首先还是得在平板上安装 Tailscale。如果直接从官网下载 APK 会比较麻烦,会跳转到 Google Play 下载,但 Google Play 对于国内移动设备不是很友好。我们可以直接去 Tailscale 的 GitHub 仓库找到 APK,链接如下:

Tailscale Android 安装包

下载并安装 Tailscale,然后打开 App,跟随引导把移动设备接入 Tailscale。成功接入后,我们会发现此时局域网中已经有三台设备了,分别是云服务器、个人电脑和移动设备。

此时,我们就可以通过之前的链接,在移动设备的浏览器上登录 DSH Web,指挥大肥鱼干活。

3.5 使用 Tailscale 代理云服务器上的其他 Web 服务

当然,Tailscale 不仅可以代理 DSH Web 服务。假设我们在服务器上写了一个网页,挂载在本机的 8800 端口,也可以通过 tailscale serve 进行反向代理。

比如,我提前让 DSH 帮我写了个网页,开放在本机的 8800 端口。

那么,可以在服务器终端输入如下命令:

tailscale serve --bg --https=1145 127.0.0.1:8800

#--bg 表示在后台运行
#--https=1145 配置实际访问的端口,如果1145被使用,可以使用其他任意未被占用的端口

现在,我们就可以在已接入局域网的任意设备上,通过浏览器输入 https://rainyun-6s6ksezk.tailf2251b.ts.net:1145/ 来访问这个网页。

碎碎念

这几天尝试 DSH 后,感觉挺有意思的。我很喜欢“一切皆插件”的设计理念。尽管现在的 DSH 还比较简陋,也比较难用,但是相信在社区的努力下,它一定会越来越好用。到时候要是能去什么地方捡点便宜 Token 来用,就再完美不过了。

另外,我很喜欢 DSH 的 Web UI 设计。当时也正是因为意识到 DSH 采用的是 Web UI 设计,才想着把它部署到服务器上。虽然踩了很多坑,但是完成优化后,获得了非常不错的远程访问体验,感觉可以随时随地监督大肥鱼干活了()。

此作者没有提供个人介绍。
最后更新于 2026-08-18