GitHub workflows 提交后自动部署windows服务器


前提条件:

github项目仓库中配置好应用需要的各种环境变量或参数

服务器安装 OpenSSH 服务

设置OpenSSH 服务开机自动启动

服务器放开SSH 22端口 (安全组可以设置)

1,在项目。github/workflows中,配置好deploy.yml 文件 我的是部署到windows服务器

name: Deploy to Windows Server


on:

push:

branches:

- main # 或者您的主分支名称

workflow_dispatch: # 允许手动触发


env:

NODE_VERSION: '18.x'


jobs:

build-and-deploy:

runs-on: ubuntu-latest

steps:

- name: Checkout Repository

uses: actions/checkout@v4


- name: Setup Node.js

uses: actions/setup-node@v4

with:

node-version: ${{ env.NODE_VERSION }}

cache: 'npm'


- name: Install Dependencies

run: npm ci


- name: Generate Prisma Client

run: npx prisma generate


- name: Generate .env file

run: |

echo DATABASE_URL='${{ secrets.DATABASE_URL }}' > .env

echo JWT_SECRET='${{ secrets.JWT_SECRET }}' >> .env

echo RESEND_API_KEY='${{ secrets.RESEND_API_KEY }}' >> .env

echo RESEND_DOMAIN='${{ secrets.RESEND_DOMAIN }}' >> .env

echo QINIU_ACCESS_KEY='${{ secrets.QINIU_ACCESS_KEY }}' >> .env

echo QINIU_SECRET_KEY='${{ secrets.QINIU_SECRET_KEY }}' >> .env

echo QINIU_BUCKET='${{ secrets.QINIU_BUCKET }}' >> .env

echo NEXT_PUBLIC_CDN_URL='${{ secrets.NEXT_PUBLIC_CDN_URL }}' >> .env


- name: Build Next.js App

run: npm run build

env:

DATABASE_URL: ${{ secrets.DATABASE_URL }}

JWT_SECRET: ${{ secrets.JWT_SECRET }}

RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }}

RESEND_DOMAIN: ${{ secrets.RESEND_DOMAIN }}

QINIU_ACCESS_KEY: ${{ secrets.QINIU_ACCESS_KEY }}

QINIU_SECRET_KEY: ${{ secrets.QINIU_SECRET_KEY }}

QINIU_BUCKET: ${{ secrets.QINIU_BUCKET }}

NEXT_PUBLIC_CDN_URL: ${{ secrets.NEXT_PUBLIC_CDN_URL }}


- name: Deploy to Windows Server

uses: appleboy/scp-action@master

with:

host: ${{ secrets.SERVER_HOST }}

username: ${{ secrets.SERVER_USERNAME }}

password: ${{ secrets.SERVER_PASSWORD }}

source: ".env,.next/,public/,package.json,package-lock.json,next.config.js,prisma/,ecosystem.config.js,deploy-remote.bat"

target: "C:/projects/imbox8-com"

strip_components: 0


- name: Execute Remote Commands

uses: appleboy/ssh-action@master

with:

host: ${{ secrets.SERVER_HOST }}

username: ${{ secrets.SERVER_USERNAME }}

password: ${{ secrets.SERVER_PASSWORD }}

request_pty: true

script: |

deploy-remote.bat


2,配置了一个deploy-remote.bat文件,github 构建完成,远程传输完成之后 执行远程的命令。

deploy-remote.bat文件就是一个项目启动顺序的脚步。包括 pm2 npm 监测 停止和pm2重启应用