尼采般地抒情

尼采般地抒情

尼采般地抒情

音乐盒

站点信息

文章总数目: 318
已运行时间: 1825

前言:项目部署至服务器,一般而言,只需要将打包后的静态代码上传到服务器指定位置,如果配置的是nginx web服务器,再执行刷新相关命令即可。本文记录1panel运维管理面板下,结合GitHub Action自动化部署项目打包代码至云服务器的脚本编写逻辑。

一、GitHub Actions环境准备

GitHub Actions脚本的执行涉及一些敏感变量,在GitHub仓库中可以设置隐形变量防止暴露在外,只有在 GitHub Actions 中才能使用到

环境变量含义:

  1. KEY(密钥)
  2. PASSPHRASE(加密私钥的密码)
  3. SERVER_IP(云服务器公网IP)
  4. USERNAME(云服务器登录用户名, 通常为root)

📌 KEYPASSPHRASE分别为下面截图中的2和1

二、GitHub Actions脚本编写

脚本需要做的事情有如下几点:

  1. 项目打包成静态文件
  2. 将打包后的静态文件上传至云服务器指定文件夹

打包成静态文件

执行项目打包命令

- name: Use Node.js ${{ matrix.node-version }}
  uses: actions/setup-node@v4
  with:
    node-version: ${{ matrix.node-version }}
    cache: 'pnpm'
- run: |
    pnpm install
    pnpm build
    mv apps/test-project/dist/ ./dist/

上传服务器

利用scp-action将指定文件夹上传至服务器目标文件夹

- name: Scp file to aliyun
  uses: appleboy/scp-action@v0.1.7
  with:
    host: ${{ secrets.SERVER_IP }}
    username: ${{ secrets.USERNAME }}
    key: ${{ secrets.KEY }}
    passphrase: ${{ secrets.PASSPHRASE }}
    tar_dereference: true
    rm: true
    source: 'dist/*'
    target: '/opt/1panel/apps/openresty/openresty/www/sites/test.com/index'

上述脚本代码只是上传,不能在服务器进行相关命令操作文件,还需要利用ssh-action添加如下脚本:

- name: executing remote ssh commands using key
  uses: appleboy/ssh-action@v1.0.3
  with:
    host: ${{ secrets.SERVER_IP }}
    username: ${{ secrets.USERNAME }}
    key: ${{ secrets.KEY }}
    passphrase: ${{ secrets.PASSPHRASE }}
    script: |
      mv /opt/1panel/apps/openresty/openresty/www/sites/test.com/index/dist/* /opt/1panel/apps/openresty/openresty/www/sites/test.com/index/

这个脚本主要作用是将文件内容层级提升

因为本文章记录的是基于集成环境前端项目部署,只是打包后静态文件的替换,所以不涉及重启相关命令操作。

如果你的环境不是继承运维面板(1panel/宝塔 等)的web服务器,而是手动搭建web服务器,则在这里可以写一些相关命令,比如nginx重启、node重启、docker重启指定容器……

eg:docker restart project-name

三、最终代码

  • 在GitHub仓库内添加文件.github/workflows/server.yml
  • 结合上述各个步骤的子代码,再添加部分GitHub Actions触发条件逻辑代码,整个脚本文件就完成了。
name: Aliyun Server Deploy
on:
  push:
    tags:
      - release-**

jobs:
  deploy_job:
    runs-on: ubuntu-latest
    name: build
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v2
        with:
          version: 8
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'pnpm'
      - run: |
          pnpm install
          pnpm build
          mv apps/test-project/dist/ ./dist/

      - name: Scp file to aliyun
        uses: appleboy/scp-action@v0.1.7
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.USERNAME }}
          key: ${{ secrets.KEY }}
          passphrase: ${{ secrets.PASSPHRASE }}
          tar_dereference: true
          rm: true
          source: 'dist/*'
          target: '/opt/1panel/apps/openresty/openresty/www/sites/test.com/index'

      - name: executing remote ssh commands using key
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.USERNAME }}
          key: ${{ secrets.KEY }}
          passphrase: ${{ secrets.PASSPHRASE }}
          script: |
            mv /opt/1panel/apps/openresty/openresty/www/sites/test.com/index/dist/* /opt/1panel/apps/openresty/openresty/www/sites/test.com/index/

四、参考

评论区

什么都不舍弃,什么也改变不了