配合之前的Github Actions入门实操和Hyperf项目使用Supervisor部署两篇文章,填一下自动部署的坑。
因为是自己项目的部署推送,非公司项目所以一切以简单快速方便为主。
如果你的服务器上还没生成过SSH公钥则通过以下命令生成
ssh-keygen
一路回车即可,生成完毕后则在执行命令的当前用户下的目录查看.ssh
目录里面的文件:
接下来执行命令,复制一份公钥到这个文件:
cat id_rsa.pub >> authorized_keys
并且修改一下文件权限:
chmod -R 700 ~/.ssh
chmod -R 640 authorized_keys
接下来还是在.ssh目录下执行cat id_rsa
获得私钥内容,结构大概如下:
-----BEGIN OPENSSH PRIVATE KEY-----
...内容
-----END OPENSSH PRIVATE KEY-----
复制完整的内容,将在配置上会使用上;接下来我们去Github的项目地址去配置密钥文件:
进入到该页面后,点击右边的New repository secret
创建密钥,分别创建下面几个密钥
- SERVER_HOST:为服务器地址
- SERVER_KEY:就是刚才我们复制的私钥
- SERVER_USERNAME:是创建私钥的用户名
- SERVER_WORKDIR:是项目的路径
都创建完毕后,我们则开始写流水线作业了。
因为Hyperf原先就有一个Build的作业用于判断程序是否能正常运行,那么我们在这个文件接下来的位置继续写这个作业:
name: Build Docker
on:
push:
branches:
- master #只在master推送时执行
jobs:
build: # 原本Hyperf自带的作业
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build
run: cp -rf .github/workflows/Dockerfile . && docker build -t hyperf .
deploy:
runs-on: ubuntu-latest
needs: build # 要求上一个作业完成
steps:
- uses: actions/checkout@v2
- name: pull code
uses: appleboy/ssh-action@master
env:
SERVER_WORKDIR: ${{ secrets.SERVER_WORKDIR }} #传递工作目录变量
with:
host: ${{ secrets.SERVER_HOST }} #服务器地址
username: ${{ secrets.SERVER_USERNAME }} #用户名
key: ${{ secrets.SERVER_KEY }} #私钥 安全问题一定都以变量的方式传递!!!
envs: SERVER_WORKDIR #使用工作目录变量
# 进入到项目目录,执行依赖更新
script: |
cd $SERVER_WORKDIR #进入到工作目录
git checkout . #丢弃修改
git pull #拉取代码
composer update #更新依赖
sudo supervisorctl restart emo #重启项目
文件修改好后推送上去,就可以看到流水线结果了:
那么之后修改完毕后就可以直接推送到master就会自动到服务器上更新代码,不用再手动部署了。
那么另外一个Nuxt的项目,只要修改后面的脚本就可以,Nuxt的项目完整工作流:
name: Deploy Project
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v2
- name: pull code
uses: appleboy/ssh-action@master
env:
SERVER_WORKDIR: ${{ secrets.SERVER_WORKDIR }}
with:
host: ${{ secrets.SERVER_HOST }} # 下面三个配置与上面一样
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SERVER_KEY }}
envs: SERVER_WORKDIR
# 进入到项目目录,执行依赖更新
script: |
cd $SERVER_WORKDIR
git checkout .
git pull
npm update
npm run build
pm2 restart emo