还在用FTP手动拖文件上传部署网站?改一行代码就要重复一遍上传流程,又慢又容易出错。自动化部署让你推送代码到Git,网站自动更新上线——这就是CI/CD的入门。本文用两种方案带你实现,从此告别手动部署。
一、为什么要自动化部署?
手动部署的痛点:慢、易漏文件、易出错、无版本记录、多人协作混乱。自动化部署的好处:一次配置长期受益、部署可追溯、可一键回滚、多人协作规范。哪怕是个人项目,配好后每次更新只需 git push,几秒上线。
二、方案A:Git Hooks(适合自己的服务器,轻量)
核心思路:在服务器上建一个裸仓库,配置post-receive钩子,每次收到推送就自动把代码检出到网站目录。
服务器端设置:
# 建裸仓库
git init --bare /var/repo/mysite.git
# 编辑钩子
nano /var/repo/mysite.git/hooks/post-receive
钩子内容:
#!/bin/bash
git --work-tree=/www/wwwroot/mysite --git-dir=/var/repo/mysite.git checkout -f
# 可加后续操作:重启服务、清缓存等
echo "部署完成"
chmod +x 赋予执行权限。本地端添加这个远程仓库:
git remote add deploy root@服务器IP:/var/repo/mysite.git
git push deploy main # 推送即部署!
三、方案B:GitHub Actions(适合团队,功能强)
代码托管在GitHub时,用Actions实现更强大的流程:推送后自动运行测试、构建、然后部署到服务器。在仓库建 .github/workflows/deploy.yml:
name: Deploy
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to server via SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /www/wwwroot/mysite
git pull origin main
# 构建、重启服务等命令
把服务器IP、用户名、SSH私钥存入仓库的Secrets(加密保存),之后每次推送到main分支就自动部署。前端项目还能在Actions里跑 npm build 再上传产物。
四、部署服务器的要求
自动化部署对服务器要求不高,但需要:稳定的SSH访问、Git环境、拉取代码的网络(香港VPS访问GitHub直连快,这是海外节点的优势,¥30/月起、24小时免费试用)。用密钥登录并做好SSH安全加固(参考博客教程)。
五、进阶:回滚与零停机
- 回滚:Git的好处就是历史可追溯,部署出问题
git reset --hard 上个版本即可秒回滚; - 零停机:进阶做法是部署到新目录再切换软链接(符号链接指向),避免部署过程中的访问中断;
- 部署前测试:重要项目让CI先跑自动化测试,测试通过才部署,拦住带bug的代码。
结论
自动化部署是从”业余”到”专业”的关键一步:个人项目用Git Hooks轻量搞定,团队协作用GitHub Actions功能全面。配置一次,之后每次 git push 就是一次干净、可追溯、可回滚的部署。在免费试用的VPS上把Git Hooks方案跑通,你会回不去手动上传的日子。