今天在 GitHub Trending 上看到一个有意思的项目:Openship,一个开源、自托管的部署平台,核心理念是「推代码即上线」——零配置文件、零流水线、零 YAML,只需一个 openship deploy 命令即可完成构建、容器化、域名、SSL 全套上线流程。
一、项目概述
Openship 脱胎于现代开发团队对简化部署的强烈需求:传统 CI/CD 方案(GitHub Actions、Jenkins、GitLab CI)虽然强大,但配置门槛高、维护成本大,尤其对个人开发者和小型团队不友好。Openship 的定位是:把 Fly.io 和 Railway 的体验带到自托管场景,同时保留完全的控制权。
核心能力一览:
- 推代码即部署:
openship init绑定项目,openship deploy自动检测技术栈并完成全流程 - 内置 CI/CD:支持预览环境、分支部署、滚动回滚
- 全栈支持:Node.js、Python、Go、Rust、PHP、Ruby、Java、.NET、Docker Compose、Monorepo
- 数据库全家桶:PostgreSQL、MySQL、MongoDB、Redis,开箱即用
- 基础设施全套:Let’s Encrypt 自动 SSL、边缘 CDN(S3 兼容存储)、内置 SMTP 邮件服务器、定时备份
- 三种操作界面:桌面 App(Electron)、Web 面板、CLI;另有 REST API 和 MCP 协议,天然支持 AI Agent 集成
- 灵活部署:可对接 Openship Cloud(托管服务),也可部署在任何 Linux VPS(DigitalOcean、Hetzner、Homelab 等)上
当前版本 0.2.0,采用 Apache 2.0 开源许可证,生产可用。
二、技术架构
技术栈选型
从项目源码结构来看,Openship 采用 Bun + TypeScript 构建工具链,使用 Turbo Monorepo 管理多包架构,核心仓库结构如下:
openship/
├── apps/
│ ├── api/ # 后端 REST API 服务
│ ├── dashboard/ # Next.js Web 管理面板
│ ├── desktop/ # Electron 桌面应用
│ ├── email/ # 内置邮件服务器
│ └── web/ # 官网前端
├── packages/
│ └── db/ # 数据库 Schema(Drizzle ORM)
└── scripts/
└── release.ts # 版本发布脚本
项目使用 Bun 作为首选运行时和包管理器(packageManager: "[email protected]"),而 devDependencies 中仅引入了 Prettier、Turbo 和 TypeScript,依赖非常轻量。数据库层采用 Drizzle ORM,属于新一代类型安全、轻量级 ORM,比 Prisma 更接近 SQL 原生。
内置 CI/CD 工作流
Openship 的部署流程大致如下:
cd your-project
openship init # 交互式绑定项目,生成 .openship/config.json
openship deploy # 触发完整流水线
deploy 命令内部自动完成:
- 环境检测:读取
package.json、Dockerfile、语言特征文件,判断项目类型 - 构建镜像:根据检测结果生成或复用 Dockerfile,构建 OCI 镜像
- 编排服务:若项目依赖数据库或 Redis,自动注入
docker-compose.yml - 网络配置:注册域名、申请 Let’s Encrypt 证书,配置反向代理
- 健康检查:轮询
/health端点,确认服务启动成功后返回
源码中的 monorepo workspaces 配置允许多个子项目并行构建,Turbo 的 --filter 机制可以精准控制只构建变更的部分,大幅提升 CI 效率。
MCP 协议集成
MCP(Model Context Protocol)是 AI Agent 领域的开放协议,允许 AI 助手直接调用部署工具。结合 REST API,Openship 可以被 AI Agent 调用来实现「自然语言部署」——比如对 AI 说「帮我把这个 Node 项目部署到生产环境」,Agent 调用 Openship API 完成全部操作。
三、安装与快速开始
环境要求
- 操作系统:Linux(Ubuntu 20.04+、Debian 11+)、macOS
- Bun 运行时(npm i -g openship 会自动引导安装)
- Docker 和 Docker Compose(用于容器化部署)
安装方式一:Bun(一键推荐)
# 安装 Bun(如未安装)
curl -fsSL https://bun.sh/install | bash
# 安装 Openship CLI
npm i -g openship
# 或使用 Bun 直接安装
bun add -g openship
安装方式二:安装脚本(Linux/macOS)
curl -fsSL https://get.openship.io | sh
启动服务
openship up # 安装为后台服务,开机自启
openship open # 打开 Web 管理面板
openship stop # 停止服务
openship up --foreground # 前台运行(调试模式)
Docker Compose 部署
git clone https://github.com/oblien/openship.git
cd openship
cp .env.example .env
# 编辑 .env,填入必要配置(域名、邮箱等)
docker compose up -d
访问 http://localhost:3000 即可进入 Web 面板。
四、使用方法与实战
部署第一个项目
# 1. 在项目根目录初始化
cd my-awesome-project
openship init
# 2. 交互式配置(自动检测框架)
# ? Project name: my-awesome-project
# ? Port: 3000
# ? Health check path: /health
# 3. 一键部署
openship deploy
# 4. 查看实时日志
openship logs -f
预览环境与分支部署
Openship 原生支持预览环境(Preview Environments),每次在 Git 分支上推送代码会自动生成一个独立的预览 URL:
git checkout -b feature/new-login
git push origin feature/new-login
# Openship 自动分配 https://feature-new-login.preview.yourdomain.com
使用桌面 App
openship install # 安装桌面应用(或从 openship.io 下载)
openship app # 打开桌面 App
桌面 App 提供图形化界面,实时显示构建日志、容器状态、资源使用率,适合不熟悉命令行的用户。
五、常见问题与解决方案
Q: openship up 报错 command not found?
确保已将 Bun/npm 全局 bin 目录加入 PATH:
echo 'export PATH="$HOME/.bun/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
Q: 部署 Node.js 项目时提示 packageManager 版本不匹配?
Openship 对 Bun 有硬性依赖,确保本地安装 Bun 1.3.10 以上版本。也可通过 Docker 方式绕过本地环境限制。
Q: SSL 证书申请失败?
确保域名已正确解析到服务器 IP,且防火墙开放 80(Let’s Encrypt 验证)和 443 端口。服务器时间需同步(NTP),否则 ACME 协议校验会失败。
Q: 想在同一台服务器上部署多个项目?
Openship 每个项目默认使用不同端口,通过内置反向代理统一对外提供服务。Docker 网络默认使用 bridge 模式,不同项目容器间网络隔离,安全可控。
Q: Docker Compose 部署后 Web 面板无法访问?
检查 .env 中 APP_URL 是否正确设置,并确认 docker compose ps 所有服务状态为 healthy。
六、总结
Openship 代表了「部署民主化」的一个新方向:把 Fly.io 的开箱即用体验与自托管的完全控制权结合,用零配置的方式降低了现代应用部署的门槛。它不是要替代 Kubernetes,而是填补了「Docker Compose 太手动、Jenkins 太重」之间的空白。
如果你厌倦了维护复杂的 CI/CD 流水线,或希望团队成员无需 DevOps 经验也能自主部署项目,Openship 值得一试。
项目地址:https://github.com/oblien/openship
官网:https://openship.io