自托管服务
oblien/openship avatar
oblien/openship

Openship:一台机器上跑完构建、部署、域名和 TLS 的自托管平台

自托管部署平台。这是在同一个盒子上托管您部署的应用程序的风格,具有自动域+ Let's Encrypt TLS。

12,298 个 Star1,110 个 ForkTypeScriptApache-2.0

秒懂

它是什么?
Openship 是一个 Apache-2.0 许可的自托管部署平台,内置 CI/CD,能把仓库直接构建并部署到同一台服务器上,自动分配域名并签发 Let's Encrypt 证书。本文基于 README 与仓库信息,分析它的运行机制、适用场景和边界。
适合谁用?
Openship 适合三类人:在单一 Linux 服务器上想用 Docker 一键获得完整部署栈的个人开发者,需要 push-to-deploy 和团队访问的小团队,以及不想维护任何基础设施、愿意用托管云的零运维用户。不适合的人包括:需要 Kubernetes 级弹性伸缩或复杂多集群编排的团队,因为 Openship 的 Compose 模式明确把应用和数据库放在同一台机器上,没有跨节点调度能力;也不适合对控制平面有严格隔离要求的场景,因为自托管实例要求登录,但控制平面与应用同机运行,安全边界并不清晰。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 TypeScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题:把部署平台的复杂度压缩到一台机器

很多自托管者面临一个尴尬:部署平台本身比应用还难维护。Kubernetes 太重,裸机部署又需要手工配置 Nginx、证书、进程守护。Openship 的定位是中间地带,它把构建、推送、路由、TLS 终止全部打包,你只需要指向一个仓库,剩下的由它完成。这从 README 的快速开始表就能看出,它明确区分了三种运行方式:桌面应用适合单人单机,自托管服务器适合团队或需要 push-to-deploy 的场景,云模式则完全托管。它解决的核心问题是运维碎片化,把域名、证书、反向代理、CI/CD 这些原本分散的工具统一成一个接口。适合的人群很明确:不想碰 K8s、但又不满足于 PaaS 限制的独立开发者和小团队。

两种运行模式:Compose 与 bare,决策点在你有没有 Docker

Openship 的架构核心是控制平面与数据平面的分离,但具体怎么分离取决于你运行 `openship up` 时的环境。在 Linux 且安装了 Docker 的情况下,它默认进入 Compose 模式,启动 Postgres、Redis、API、dashboard,以及一个容器化的 OpenResty 边缘层,监听 80 和 443 端口。这个模式的特点是应用和数据库都跑在同一台机器上,自动域名和 Let's Encrypt TLS 由边缘层处理。在 macOS、Windows 或没有 Docker 的 Linux 上,它进入 bare 模式,只运行一个轻量进程,内置嵌入式数据库,它不托管应用,而是通过 SSH 把应用部署到远程服务器或云。这个设计意味着你不需要预先决定架构,环境会自动选择。但这也带来一个隐含约束:如果你在 Linux 上但不想用 Docker,必须显式加 `--bare` 参数,否则会被强制进入 Compose 模式。

安装与首次部署:一条命令到控制面板,两条命令到线上

安装 Openship 有两种方式。官方推荐用 `curl -fsSL https://get.openship.io | sh`,这个脚本会在系统 Node 版本低于 22 时自带一个 Node。也可以用 `npm i -g openship`,但需要你已有 Node 22+。安装后运行 `openship`,交互式向导会创建第一个管理员、配置域名、并把 Openship 安装为开机服务。对于 CI 或无头环境,可以跳过向导直接运行 `openship up`,它会以后台服务方式启动,支持开机自启和自动重启。部署项目很简单,在项目目录里执行 `openship init` 关联目录,然后 `openship deploy`。这里有个值得注意的细节:自托管实例总是要求登录,管理员在首次设置时创建,这意味着即使你只是单机使用,也需要维护一个账号。

桌面应用与自托管服务器的分工:一个按需运行,一个常驻

README 特别强调了一个使用场景:单人用户应该用桌面应用,而不是自托管服务器。桌面应用把控制平面跑在你自己的机器上,只在应用打开时运行,不暴露任何公共端口,也不需要登录。它通过 SSH 驱动远程服务器,或者连接 Openship Cloud。这种设计的优点是没有常驻进程,也没有公网攻击面。但代价是,你无法获得 push-to-deploy,因为 CI/CD 需要一个始终在线的端点来接收 webhook。一旦你需要团队访问或想在服务器上托管应用,就必须切换到自托管服务器。这个权衡很清晰:桌面应用是零运维的入口,但功能受限;自托管服务器是功能完整的入口,但你需要维护一个常驻服务。对于大多数个人项目,桌面应用可能已经足够,但如果你希望 GitHub 推送后自动部署,那就得升级到服务器模式。

开发版构建:预览新功能,但别用于生产

Openship 提供了一个从源码构建的开发版,安装命令是 `curl -fsSL https://get.openship.io/dev | sh`,默认构建 main 分支,也可以通过 `OPENSHIP_REF=dev` 指定分支或标签。这个开发版安装为独立的 `openship-dev` 命令,使用独立的 `~/.openship-dev` 目录和独立服务,不会影响生产环境的 `openship` 数据。更新时运行 `openship-dev update` 会拉取最新源码并重新构建。README 明确警告这是未验证的开发构建,dashboard 编译需要真实的内存和 CPU,不适合生产路径。这个设计的好处是你可以安全地预览新功能,但坏处是它依赖 Bun 和 git,而且构建过程可能很慢。对于想提前尝试新特性的用户,这是一个低风险的实验通道,但你必须清楚它没有经过发布流程的测试。

Shell 补全:两种方式,一个取舍

Openship 为 bash、zsh 和 fish 提供了 Tab 补全,但实现方式有两种,各有取舍。静态文件方式是把补全脚本写入固定路径,例如 `openship completion zsh > ~/.zsh/completions/_openship`,优点是 shell 启动瞬间完成,缺点是升级后需要重新生成才能获得新命令。动态加载方式是在 shell 配置里加一行 `source <(openship completion zsh)`,每次新开 shell 都会执行,始终反映当前版本,但会增加每次 shell 启动的延迟。README 推荐静态文件方式,因为延迟对日常使用更敏感。这个细节说明项目对开发者体验的考虑比较细致,但同时也提醒你,升级 Openship 后不要忘记重新生成补全文件,否则新命令不会出现在 Tab 里。

局限性与替代方案:单机部署的边界在哪里

Openship 最大的局限是 Compose 模式只支持单机部署。README 明确说这个模式在 Linux 上托管应用,自动域名和 TLS 由 OpenResty 边缘层处理,但它没有提到任何多节点或集群能力。如果你的应用需要水平扩展,或者你想把数据库与应用分离到不同机器,这个模式就不合适。bare 模式虽然可以把应用部署到远程服务器,但那是通过 SSH 手动指定目标,没有自动调度。替代方案中,CapRover 是一个类似的自托管 PaaS,它也提供一键部署和 Let's Encrypt,但 CapRover 更强调基于 Docker Swarm 的集群支持,而 Openship 的 Compose 模式更像是单机 Docker Compose 的封装。另一个选择是 Coolify,它同样支持自托管和多种部署方式,但 Coolify 的架构更复杂,支持多服务器。与这些相比,Openship 的卖点是简单,它把控制平面和数据平面打包成一个进程或一组容器,而不是引入额外的编排层。如果你需要集群,应该直接考虑 CapRover 或 Coolify,而不是试图让 Openship 做它没设计的事。

维护成本与许可证:升级容易,但要注意运行时依赖

Openship 的升级路径很简单,自托管服务器上运行 `openship update` 即可,开发版用 `openship-dev update`。桌面应用则是通过下载最新发布包更新,CLI 的 `openship install` 会获取最新版本。这种设计降低了长期维护的负担,但有一个隐含成本:npm 安装方式要求 Node 22+,如果你的系统 Node 版本较旧,安装脚本会自带 Node,这会增加磁盘占用。另外,Compose 模式依赖 Docker,这意味着你需要维护 Docker 自身的安全更新。许可证是 Apache-2.0,允许自由使用、修改和商用,但如果你分发修改版本,需要保留原始版权声明和许可文本。这是一个宽松的许可证,没有传染性,适合商业集成。整体来看,Openship 的维护成本主要集中在你自己的基础设施上,而不是平台本身,但你需要定期运行 `openship update` 来获得修复和新功能。

编辑结论

Openship 适合三类人:在单一 Linux 服务器上想用 Docker 一键获得完整部署栈的个人开发者,需要 push-to-deploy 和团队访问的小团队,以及不想维护任何基础设施、愿意用托管云的零运维用户。不适合的人包括:需要 Kubernetes 级弹性伸缩或复杂多集群编排的团队,因为 Openship 的 Compose 模式明确把应用和数据库放在同一台机器上,没有跨节点调度能力;也不适合对控制平面有严格隔离要求的场景,因为自托管实例要求登录,但控制平面与应用同机运行,安全边界并不清晰。在采用前,你应该先验证三件事:你的 Linux 服务器是否安装了 Docker,因为 Compose 模式依赖它;你的域名是否已经能指向服务器 IP,因为自动域名和 Let's Encrypt 证书依赖公网可达;以及你能否接受 Node 22+ 的运行时要求,特别是用 npm 全局安装时。最后,Openship 的许可证是 Apache-2.0,允许商用和修改,但如果你要分发修改版,需要保留版权声明。它不是一个 PaaS 替代品,而是一个把部署复杂度压缩到单条命令的实用工具,它的边界就是它的卖点。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记