先说下我之前怎么上线的,说出来有点丢人。

代码改完了,本地跑一下,然后Xshell连服务器,cd到目录,git pull,npm install,pm2 restart。一套下来顺的话十分钟,不顺的话——比如忘记切分支了,或者node_modules抽风了——半小时就没了。

最烦的是有时候就改一行字,也得来一遍。后来实在受不了,抽了一天把GitHub Actions配好了。现在git push完就不用管了,服务器自己更新。

记录一下配的过程,省得以后忘了。

准备工作

三样东西:一个GitHub仓库、一台服务器、服务器上已经跑起来的项目。

我用的Node.js加PM2,服务器是之前ztopcloud开的阿里云ECS,注册就邮箱不用实名,充钱就能用。

第一步,服务器上搞个密钥

GitHub Actions要登服务器,用密钥对免密。

服务器上跑:

bash

ssh-keygen -t ed25519 -C "github-actions" -f ~/.ssh/github-actions

出来两个文件,公钥加到authorized_keys:

bash

cat ~/.ssh/github-actions.pub >> ~/.ssh/authorized_keys

拿私钥试一下能不能登:

bash

ssh -i ~/.ssh/github-actions 用户名@服务器IP

通了就行。

第二步,私钥塞GitHub Secrets里

私钥不能放代码里。去仓库Settings → Secrets and variables → Actions,新建三个:

  • SERVER_SSH_KEY,值就是刚才那个私钥文件内容(cat一下全复制)

  • SERVER_HOST,服务器IP

  • SERVER_USER,登录用户名

第三步,写那个yml文件

项目根目录建.github/workflows/deploy.yml

yaml

name: Deploy to Server

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test   # 没写测试就删掉

      - name: Deploy to server
        uses: appleboy/ssh-action@v0.1.5
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SERVER_SSH_KEY }}
          script: |
            cd /path/to/your/project
            git pull origin main
            npm ci --only=production
            pm2 restart your-app-name

路径换成自己服务器上的实际路径。注意服务器上项目得先clone好。

第四步,推上去看跑不跑得通

bash

git add .github/workflows/deploy.yml
git commit -m "add deploy"
git push origin main

然后去Actions标签页看,绿了就是成了。

踩过的几个坑

服务器上git pull要密码。解决:服务器上用SSH方式clone,公钥加到GitHub的Deploy keys里。

pm2找不到。script里写全路径,which pm2查一下。

npm ci慢。个人项目几十秒,懒得折腾。

多环境的话

develop分支推测试服,main分支推正式服,改一下branches和脚本里路径就行。

配完感受

现在上线就是git push然后不管了。一年省不少时间,而且不会有本地行服务器不行的情况了。

还在手动的可以花一两个小时配一下。服务器我用的ztopcloud,开机器快,不用实名绑卡,微信支付宝都行,装好环境按上面来就行。

有问题留言。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐