Shipherd 的 Logo

2025年8月4日 • 更新于 2026年2月16日

Shipherd:动态代码运行器

我是如何创建 Shipherd 这个动态运行代码的平台的。

技术: Node.js, React, Docker

我为什么要做 Shipherd

我做 Shipherd,是因为我受够了为小项目一遍又一遍地做同样的运维杂活。


当时,我有一个运行在 OrangePi 上的个人仪表盘,它确实帮我把日常生活安排得井井有条。但每次小改动都变成一场部署仪式:写代码、commit、push、SSH、cd、pull、重启,然后祈祷它别挂。如果有什么东西悄悄崩溃了,我往往要过好几天才会发现。


我托管的其他东西也在不断重复这个模式:机器人、脚本和小型服务。我不需要企业级的基础设施,但确实需要可靠性。我想要一种既有自托管的感觉,又带有助手的东西。

Shipherd 是什么

Shipherd 是一个免费、开源的平台,用于在你自己的服务器上运行和监控代码。


核心理念很简单:接入代码,运行它,把无聊的部分交给 Shipherd 处理。它能自动完成这些常见任务:


  • 从 Git 提供商(包括自托管方案)拉取更新
  • 以极低的配置成本运行项目
  • 服务崩溃时自动重启
  • 在同一个仪表盘中展示日志、CPU 和内存
  • 在需要关注时发送通知

它运行在 Docker 中,因此在不同机器上的部署过程都是可预期的。


Shipherd 仪表盘
Shipherd 仪表盘

日常使用体验

对我来说,最棒的一点是 Shipherd 改变了我对业余项目的看法。


在有 Shipherd 之前,我常常因为部署很烦而拖延小的改进。现在,我可以把业余项目当作始终在线的系统,而不是脆弱的实验品。


项目创建向导
项目创建向导

代码来源

Shipherd 有三种主要的代码接入方式:

挂载的文件系统

如果你的服务器上有一个项目,可以让 Shipherd 指向它所在的目录。它会直接在那里运行代码,所以你可以继续沿用现有的工作流程。这非常适合没有放进 Git 的项目,或者快速实验。


项目创建向导中的文件选择器
项目创建向导中的文件选择器

Git 提供商

你可以连接 GitHub、GitLab、自托管的 Forgejo,或任何 Git 仓库。Shipherd 会拉取最新的更改并自动运行你的代码。这非常适合已经在 Git 中的项目和团队。


要求身份验证的 Git 项目
要求身份验证的 Git 项目

示例项目

如果你不知道从哪里开始,Shipherd 提供了 Node.js、Python、Go 和 Rust 的示例模板。你可以用其中一个模板创建新项目,几秒钟内就能得到一个可以运行的应用。


示例项目
示例项目

它有什么用

推送即忘

项目可以跟踪你的主分支并自动拉取新的更改,因此在许多场景下,部署可以完全自动化。

默认自愈

如果某个进程崩溃,Shipherd 可以重启它,并通过电子邮件、Discord 或 webhook 通知你。这弥补了我个人托管环境中最大的缺口:静默故障。

实时运行可见性

日志和资源使用情况都可以在仪表盘中查看,所以排查问题不用再从 SSH 开始。


实时日志与监控视图
实时日志与监控视图


通知与告警设置
通知与告警设置

运行时支持与 Shipherd Tools

Shipherd 的运行时目前已经支持 Node.js、Python、Go 和 Rust 项目。在应用端集成方面,shipherd-tools 目前提供官方的 Node.js SDK(tools-node)v1。它封装了健康检查、日志和控制 API,让应用可以向 Shipherd 回报更丰富的运行时数据。


Rust、Go 和 Python 的 SDK 包正在积极开发中,是路线图中的最高优先级。平台协议本身已经与语言无关,因此这些 SDK 是为了达到对等水平而构建的,而不是二等的附加品。

这个项目对我的意义

Shipherd 起初只是我个人的"止痛药",但它成为了最能改善我构建软件方式的项目之一。


它教会我如何把可靠性当作产品功能来设计,而不仅仅是后端层面的考量。它也促使我从真实的工作流程出发思考:人们在部署之前、之中和之后都在做什么。


如今,Shipherd 就是我从第一天起就希望拥有的平台:实用的自托管,更少的"保姆式"操作,以及快得多的反馈循环。


微信联系

扫一扫,添加我的微信

扫描二维码添加我的微信
微信号