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

发布: (2026年1月14日 GMT+8 19:50)
3 min read
原文: 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

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...