项目/AI
AI · 运行中

DeepSeek Harness AI 控制台

自己的 AI 自动化控制台,跑在 .223 上,对公网提供 dsh 域名入口。

DSHAI自动化Node.js

这是什么

DeepSeek Harness AI 控制台(DSH)是我自己搭的一个 AI 自动化控制台。它跑在 .223 这台机器上,通过隧道对外提供 dsh 域名入口,平时我打开这个域名就能用。

为什么做

以前做 AI 相关的自动化,能力都散在一堆脚本和临时命令里:跑在哪个目录、用哪个环境变量、有没有在跑,全靠记忆。我想要一个固定的入口,把调用、插件和常驻任务收拢到一处,于是就有了 DSH。

解决什么问题

  • 统一入口:一个 dsh 域名进控制台,不用再记端口、路径和零散脚本。
  • 插件化扩展:新能力以插件形式接进来,不用改进程主体,加完重启就生效。
  • 常驻可用:和 .223 上其它服务一样用 systemd 托管,配合隧道进程,机器重启后能自己起来。
  • 和 Homelab 一致:部署方式沿用这台机器已有的习惯(服务化 + 隧道),维护成本低。

现在什么状态

状态:运行中,已经作为日常入口在用,后续继续按需补插件和自动化任务。这个项目主要是练 DSH 部署、插件机制、隧道和服务化这几件事。

功能

  • 对公网提供 dsh 域名入口的 AI 自动化控制台
  • 跑在 .223 上,控制台与隧道进程分离部署
  • 用 systemd 托管常驻,机器重启后自动恢复
  • 插件化接入新能力,不改动进程主体
  • 与同机其它 Homelab 服务共用一套服务化与隧道习惯

技术栈

Node.jsDSHsystemd隧道转发Linux

使用 / 部署教程

部署思路

DSH 的形态很朴素:一个常驻进程 + 一条隧道。进程负责控制台和插件,隧道负责把内网端口映射到公网域名。下面是我在 .223 上用的通用步骤。

1. 准备运行环境

确认机器上有 Node.js 和常用构建工具,建一个独立的运行用户和目录,不要用 root 直接跑业务:

sudo useradd -r -s /usr/sbin/nologin dsh
sudo mkdir -p /opt/dsh && sudo chown dsh:dsh /opt/dsh

2. 放置代码与依赖

把 DSH 放到 /opt/dsh,安装依赖。配置(密钥、端口、插件开关)统一走环境变量或 .env,文件和目录权限收紧到运行用户。

3. 用 systemd 托管

在这台机器上,所有常驻服务都是 systemd unit,DSH 也照这个来。新建 dsh.service,关键点:User=dsh、WorkingDirectory=/opt/dsh、Restart=always、EnvironmentFile= 指向配置文件。写好后:

sudo systemctl daemon-reload
sudo systemctl enable --now dsh
sudo systemctl status dsh
journalctl -u dsh -f

4. 打通隧道

dsh 域名入口由隧道提供。参照同机已有的 *-tunnel.service 写法,单独做一个隧道 unit,把本地控制台端口映射到 dsh 域名,同样 enable --now,并设为开机自启。隧道和控制台分开成两个 unit,任一挂掉互不牵连。

5. 验证

  • 本机 curl 127.0.0.1:<端口> 能通;
  • 外网访问 dsh 域名能打开控制台;
  • 重启机器后,systemctl status dsh 和隧道 unit 都自动恢复;
  • 装一个插件,重启进程,确认加载生效。

注意事项

  • 控制台对公网开放,前面一定要有认证或访问白名单,别裸奔。
  • 密钥只放环境变量文件,不进 Git、不进日志。
  • .223 上还跑着其它服务和备份 timer,改 unit 前先确认不影响别人。

注意

  • 控制台经隧道对公网开放,务必加认证或 IP 白名单,避免暴露管理面。
  • API key 等敏感配置只用环境变量或权限收紧的配置文件,不要提交到仓库或打印到日志。
  • .223 上同时运行着其它 systemd 服务和备份 timer,改动 unit 或重启机器时注意别打断它们。