前提条件:
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重启应用