步骤一:配置服务器登录密钥

目的:让Github Action可以使用配置的密钥登录服务器,执行构建和部署等操作。

建立SSH密钥对

ssh

授信

ssh-copy-id -i $SSH_PUBLIC/xxx.pub user@address

步骤二:创建secret

目的:将服务器连接信息和部署参数加密放入secret中,保证配置信息的的安全

步骤

  • 第一步:create_secret_step1
  • 第二步:create_secret_step2

需要创建的secret

  • SSH_DEPLOY_KEY:服务器链接密钥
  • SSH_PORT:ssh服务端口
  • SSH_HOST:服务器IP或者域名
  • SSH_USERNAME:登录服务器的用户名
  • SERVER_DESTINATION:同步的目录

步骤三: 配置Github ActionWorkflow

Workflow配置的主要步骤

  1. 拉取代码
  2. 安装Hugo
  3. 使用Hugo命令行编译Hugo静态文件
  4. 将静态文件同步到服务器
  5. 部署tech服务

具体Workflow配置

name: Deploy tech site files

on:
  push:
    branches:
      - main
    paths: #只对特定目录下的文件或者特定文件的变更触发workflow
      - 'content/**' # content/** 监听content目录下的文件的变更
      - 'archetypes/**'
      - 'static/**'
      - 'config.toml'

jobs:
  deploy:
    runs-on: ubuntu-latest # 使用ubuntu系统镜像运行自动化脚本

    steps: # 自动化步骤
      - name: Checkout # 第一步,下载代码仓库
        uses: actions/checkout@v2
        with:
          ssh-key: ${{ secrets.GIT_SSH_KEY }}
          submodules: recursive  # Fetch Hugo themes (true OR recursive)
          #fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod
      - name: Setup Hugo #安装Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: '0.83.1'
          extended: true
      - name: Build static file
        run: hugo -D # 编译hugo静态文件
      - name: Sync static file to Server # 第二步,rsync同步文件到服务器
        uses: AEnterprise/rsync-deploy@v1.0 # 同步文件
        env:
          DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }} # 引用配置,服务器登录密钥
          ARGS: "-e -c -r --delete"
          SERVER_PORT: "${{ secrets.SSH_PORT }}" # 引用配置,SSH端口
          FOLDER: public # 推送的目录
          SERVER_IP: ${{ secrets.SSH_HOST }} # 引用配置,服务器的host名(IP或者域名domain.com)
          USERNAME: ${{ secrets.SSH_USERNAME }} # 引用配置,服务器登录名
          SERVER_DESTINATION: ${{ secrets.SERVER_DESTINATION }} # 部署到目标文件夹
      - name: Deploy server # 第三步,重启服务
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }} # # 引用配置,服务器的host名(IP或者域名domain.com)
          username: ${{ secrets.SSH_USERNAME }} # 引用配置,服务器登录名
          key: ${{ secrets.SSH_DEPLOY_KEY }} # 引用配置,服务器登录密钥
          # 部署脚本
          script: |
            cd ${{ secrets.SERVER_DESTINATION }}
            docker stop tech
            docker rm tech
            docker run \
              --name tech \
              -p 80:80 \
              -p 443:443 \
              -d \
              -v ${PWD}/Caddyfile:/etc/caddy/Caddyfile \
              -v ${PWD}/public:/var/www \
              -v ${PWD}/config:/config \
              -v ${PWD}/data:/data \
              -e TZ=Asia/Shanghai \
              caddy:2.4.1-alpine