我在将我的 Web 应用部署到基础层服务器(AWS t2 micro,1 GB RAM)时遇到困难,这促使我构建了 Graft
Source: Dev.to
背景
为了简化应用和 CI/CD,我大量使用了类似 Dokploy 的工具。然而,由于预算紧张且没有收入,我不得不把我的 Web 应用迁移到更弱的服务器(AWS t2.micro,1 GB RAM)。Dokploy 本身就可能消耗超过 1 GB RAM,导致服务器在我甚至来不及部署应用之前就崩溃。我发现它在小服务器上会带来多少臃肿。
解决方案
每次部署都手动 SSH 到服务器实在太繁琐,于是我创建了自己的部署工具:Graft。
概念
不再在服务器上运行代理,而是让代理在本地运行。它通过 SSH 登录服务器,完成所有设置(通过 Traefik 的网关反向代理、推送源码、构建并部署)。这就是最初的 Graft。
当前版本 (v2.2.3)
-
使用 graft‑hook 的 CI/CD(Rust Webhook 接收器)
- 空闲时占用 1.7 MB
- 活跃部署期间约 15 MB RAM(相较于 Dokploy 的 >1 GB)
-
自动备份与回滚(简单命令)
-
DNS 自动化(Cloudflare 集成)
-
Docker Compose 直通(远程运行任意
docker compose命令)
Graft 可以通过简单命令执行备份和回滚,并且只需一条命令即可迁移 Cloudflare DNS 记录。
结果
使用 Graft 部署一个 Web 应用大约需要 15 分钟(前提是 Docker Compose 在本地能够正常工作)。它还允许直接从本地终端在远程服务器上运行任何 Docker Compose 命令。
工作流
# One-time setup
graft init
# Deploy
graft sync
# Manage like localhost
graft logs backend
graft restart frontend
graft ps
安装
Graft 现已通过多种包管理器提供:
- Homebrew
- Winget
- apt、dnf、yay、paru
- 直接
sh脚本
文档
贡献
如果你感兴趣,先在测试服务器上尝试 Graft。我已经实现了我所需的全部功能,但我欢迎大家提出想法并贡献代码,以提升社区的使用体验。
GitHub
https://github.com/skssmd/Graft
