兄弟们,做站长也好,搞个人项目也罢,最烦的就是每次改完代码还得手动连服务器、拖文件、重启服务。尤其是像我这种懒人,改个错别字都得 ssh 上去敲命令,折腾半小时,结果就改了个标点符号。有没有什么办法,让我把代码往 GitHub 一推,网站就自动更新?今天聊聊怎么用 GitHub Actions 这个「白嫖」工具,实现网站自动部署与 SSH 同步,全程零成本,比请运维喝咖啡还划算。
先别怕,GitHub Actions 就是个自动化流水线
一听“Actions”这种专业词,可能有人觉得高深。其实你把它想象成一条流水线——你往 GitHub 仓库里推代码,就像把原料扔上传送带,然后流水线自动帮你打包、测试、甚至把成品送到服务器上。而我们今天只需要其中一小段:把打包好的文件通过 SSH 同步到你的服务器。
注意,这里的“同步”不是全量覆盖,而是增量更新(类似 rsync),只上传改动的文件,节省流量和时间。GitHub 每个月免费赠送 2000 分钟的 Actions 运行时间,个人网站一个月也就跑几十次,根本用不完,等于白嫖。
举个真实例子:我的博客自动更新
我有个用 Hugo 生成的静态博客,源文件在 GitHub 上。以前每次写文章流程:本地写 markdown → 运行 hugo 生成静态文件 → 用 FileZilla 手动上传到服务器 → 重启 Nginx。更新一篇至少要 5 分钟,还容易漏传文件。
现在呢?我只管写文章、push 到 GitHub,5 秒后网站就更新了。怎么做到的?其实就写了一个 YAML 配置文件,放在仓库的 .github/workflows/ 目录下,不到 30 行代码。核心逻辑就三步:
- 检出代码:把仓库的最新内容拉下来。
- 生成静态文件:比如跑 hugo 命令生成 html。
- SSH 同步:通过 rsync 把生成的文件传到服务器指定目录。
关键一步是 SSH 连接。你需要在 GitHub 仓库设置里添加两个密钥(Deploy Keys):一个私钥(存到 GitHub Secrets),一个公钥放到服务器 ~/.ssh/authorized_keys 里。这样 Actions 就能用 SSH 登录你的服务器,且无需输入密码。
技术细节?用打车来比喻
可能有朋友问:“SSH 密钥、rsync 参数,听起来还是有点懵。” 没关系,我换个角度帮你理解。
- GitHub Actions 配置文件:就像一张行程单,告诉“司机”(Actions)什么时候出发(触发条件)、去哪里(拉代码)、干什么(打包、同步)。每行命令就是一条路标,比如
uses: actions/checkout@v3就是“去仓库取件”。 - SSH 密钥:好比你自己配的电子门禁卡。你把一张卡(公钥)留在服务器门口,另一张卡(私钥)放在 GitHub 保险柜(Secrets)里。Actions 每次来送货,掏出私钥一刷,服务器门就开了。
- rsync:不是把整个货柜搬过去,而是只搬那些有变化的零件。比如你只改了首页的一个图片,rsync 只会把那个图片文件传上去,其他不动。
看,是不是很简单?你根本不需要懂什么协议、端口,只需要知道配置文件里写这几样东西就够了。
顺手还能加个「自动通知」
如果你想让部署更有仪式感,还可以在 Actions 最后一步发个 Telegram 或者钉钉消息,告诉团队“网站已更新,新文章已上线”。代码也很简单,一行 webhook 请求就行。比如我用的是 appleboy/telegram-action,填上 bot token 和 chat ID,十分钟搞定。
结尾:别只盯着这个方案,好工具多着呢
GitHub Actions 这个玩法我大概用了两年,稳如老狗。尤其适合个人博客、公司官网这类静态站点。如果你的项目是动态网站(比如 PHP 或 Node.js),同样可以通过 SSH 执行远程命令来重启服务,思路完全一致。
当然,技术方案从来不止一种。如果哪天你觉得 GitHub Actions 不够用(比如想连内网服务器),或者想试试更自动化的 CI/CD 工具,不妨多看看别的路子。更多方案可访问 itfangan.com,上面整理了几十种零成本或低成本的运维方案,从静态博客到在线商城都有,全是 IT 老炮们实战滚出来的经验,希望对你有帮助。
下次改完代码 push 一下就去喝咖啡吧,网站自己会更新。