文章目录
实现效果
- 每次在本地开发测试完成后,push 到 Github 后即自动完成部署。
- 提高效率,自动化节省手动部署的重复性工作。
环境
本地环境:Mac OS
服务器环境:Ubuntu Server
步骤
- 生成公私钥。
- Github 配置。
- 服务器配置。
- 代码配置。
- 查看日志。
- 畅快享受提交即部署。
生成公私钥
- 本地环境执行生成公私钥的指令。
ssh-keygen -m PEM -t rsa -b 4096
- 输入生成 key 的名称。
Enter file in which to save the key (/Users/zero/.ssh/id_rsa):deploy_key
- 回车,再回车。
- 生成公私钥成功。
Github 配置
- 创建项目的 Secrets。Secrets 即在 action 中可以直接引用的变量(经过加密)。
- 创建 Secrets 变量 - Name: DEPLOY_KEY。用于存储生成的私钥。
- 本地查看上文生成的私钥。
cat ~/.ssh/deploy_key
- 复制私钥内容到 Secrets 变量 - Value。(注意:BEGIN END 部分同样需要复制)
- 创建 Secrets 变量 - Name: USERNAME。用于存储登录服务器的用户名。
- 创建 Secrets 变量 - Name: HOST。用于存储登录服务器的 IP 地址。
- 最终 Github 上项目 Secrets 变量的结果。
服务器配置
- 本地查看上文生成的公钥。
cat ~/.ssh/deploy_key.pub
- 在 ssh 授权公钥文件中追加上文生成的公钥。
vim ~/.ssh/authorized_keys
代码配置
- 在代码主目录创建文件夹
.github
。 - 在
.github
文件夹中创建文件夹workflows
。 - 在
workflows
文件夹中创建文件deploy.yml
。- yml 文件中粘贴入如下代码,并更新相应的分支名、部署内容路径、部署位置路径、Django 进程号。(代码中以 master 为例,以自动化部署 Django 项目为例。)
- 注意代码缩进。
- yml 文件中粘贴入如下代码,并更新相应的分支名、部署内容路径、部署位置路径、Django 进程号。(代码中以 master 为例,以自动化部署 Django 项目为例。)
name: Depoly Action
on:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: ssh deploy
uses: easingthemes/ssh-deploy@v2.1.5
with:
REMOTE_HOST: ${{ secrets.HOST }}
REMOTE_USER: ${{ secrets.USER }}
SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_KEY }}
SOURCE: "[部署内容路径(以项目目录为根目录)]"
TARGET: "[服务器部署位置的绝对路径]"
- name: Prepare For Django
uses: webfactory/ssh-agent@v0.5.0
with:
ssh-private-key: ${{ secrets.DEPLOY_KEY }}
- name: Restart Django
run: ssh ${{ secrets.USER }}@${{ secrets.HOST }} "kill -HUP [Django uwsgi 进程号]"
- 代码功能解释。
- 当 git push 到 master 分支时触发以下操作:1. github 虚拟机切换到 master 分支。2.
ssh deploy
:github 虚拟机通过 ssh 的方式部署项目内容到服务器相应目录。3.Prepare For Django
:github 虚拟机将可以访问服务器的私钥放入 ssh-agent 缓存。4.Restart Django
:github 虚拟机通过 ssh 的方式执行命令,重启 Django uwsgi 的进程。
- 当 git push 到 master 分支时触发以下操作:1. github 虚拟机切换到 master 分支。2.
查看日志
- git push 代码到 github。
- 在 github 项目的 Actions 页面中查看 Action 的运行日志。