我在将我的 Web 应用部署到基础层服务器(AWS t2 micro,1 GB RAM)时遇到困难,这促使我构建了 Graft

发布: (2026年1月14日 GMT+8 19:50)
3 分钟阅读
原文: Dev.to

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 脚本

文档

https://graftdocs.vercel.app

贡献

如果你感兴趣,先在测试服务器上尝试 Graft。我已经实现了我所需的全部功能,但我欢迎大家提出想法并贡献代码,以提升社区的使用体验。

GitHub

https://github.com/skssmd/Graft

Graft 截图

Back to Blog

相关文章

阅读更多 »