将网站一键部署到服务器的方案很多,比如纯Shell脚本结合SSH、Jenkins等工具。本文将介绍如何利用GitHub Actions这一免费且轻量的CI/CD工具,实现代码推送后自动部署到云服务器。

之前一直在使用github的工作流,确实是一个比较好用的工具。
我之前用来构建公开静态文件仓库,让vercel来管理静态网站,这次我把所有的服务都迁移到了云服务器,所以所有的部署都需要重新调整一下。
还是老样子,先介绍一下我的场景和配置。
前置条件
- 项目类型: 静态网站(示例使用Hexo)
- 服务器环境: Linux系统(示例为Ubuntu)
服务器配置
1. 创建专用部署用户
1 2 3 4 5 6 7 8
| sudo adduser git --disabled-password
sudo su - git
mkdir -p ~/.ssh && chmod 700 ~/.ssh
|
2. 生成 SSH 密钥对
1 2
| sudo ssh-keygen -t ed25519 -C "github-actions-deploy-key" -f ~/.ssh/github_actions
|
3. 配置授权公钥
1 2 3 4 5 6
| sudo sh -c 'cat /home/git/.ssh/github_actions.pub >> /home/git/.ssh/authorized_keys'
sudo chmod 600 ~/.ssh/authorized_keys sudo chmod 644 ~/.ssh/github_actions.pub
|
4. 目标目录权限
1 2 3
| sudo mkdir -p /var/www/blog sudo chown -R deployer:deployer /var/www/blog
|
5.获取private key
1
| sudo cat ~/.ssh/github_actions
|
正常情况会返回这样的文本:
1 2
| -----BEGIN OPENSSH PRIVATE KEY----- -----END OPENSSH PRIVATE KEY-----
|
6.调整ssh配置
1 2 3 4 5 6
| # 启用密钥认证 PubkeyAuthentication yes # 禁用密码登录 PasswordAuthentication no # 允许部署用户 AllowUsers deployer
|
1
| sudo systemctl restart ssh
|
如果遇到权限问题
1 2 3 4 5 6 7 8 9 10
| # 切换到root再执行 chmod 700 ~git/.ssh chmod 600 ~git/.ssh/authorized_keys chown -R git:git ~git/.ssh
# 最后的路径调整成静态文件路径 sudo chown -R git:git /www/wwwroot
sudo setfacl -R -m u:git:rwx /www/wwwroot sudo setfacl -Rd -m u:git:rwx /www/wwwroot
|
Github仓库配置
1. 添加仓库密钥
- 访问仓库 Settings > Secrets > Actions
- 点击 New repository secret
- 输入名称
SERVER_SSH_KEY
,值粘贴前文获取的[私钥内容](#5.获取private key)
2. 配置工作流文件
创建 .github/workflows/deploy.yml
内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| name: Deploy Blog
on: [push]
jobs: build: runs-on: ubuntu-latest
steps: - name: Checkout code uses: actions/checkout@v4
- name: Install and Build run: | npm install npm run build
- name: Deploy to Server uses: easingthemes/ssh-deploy@main env: SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }} REMOTE_HOST: "" REMOTE_USER: "git" SOURCE: "public/" TARGET: "/www/wwwroot/guoshunfa.com" ARGS: "-avz --chown=git:git"
|
到这所有的配置就结束了。
验证效果
本地修改后执行Git推送:
1 2 3
| git add . git commit -m "触发自动部署" git push origin main
|
登录GitHub仓库,进入 Actions 标签页查看执行状态
成功完成后,访问服务器目标目录确认文件更新