基于GitHub Actions+SSH+PM2的Node.js自动化部署全流程指南

基于GitHub Actions+SSH+PM2的Node.js自动化部署全流程指南

一、前期环境准备

1. 基础设施准备

  • 云服务器:推荐Ubuntu 20.04+(开放22端口)
  • GitHub仓库:存放Node.js项目代码(需包含package.json)
  • 本地开发环境:Node.js 16+环境

2. 安装必要组件

bash 复制代码
# 在服务器执行
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install pm2 -g

二、GitHub配置关键步骤

1. 配置仓库Secrets

在仓库Settings → Secrets → Actions中添加:

  • SERVER_IP: 服务器公网IP
  • SSH_PRIVATE_KEY: 服务器的SSH私钥(通过cat ~/.ssh/id_rsa获取)
  • DEPLOY_PATH: 项目部署路径(如/var/www/express-app

2. 生成SSH密钥对(如未生成)

bash 复制代码
ssh-keygen -t rsa -b 4096 -C "github_actions"
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

三、创建GitHub Actions工作流

在项目.github/workflows/deploy.yml中配置

yaml 复制代码
name: Node.js CI/CD Pipeline

on:
  push:
    branches: [ main ]

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

    - name: Install dependencies
      uses: actions/setup-node@v3
      with:
        node-version: 16
        
    - name: SSH Deploy
      uses: appleboy/ssh-action@v0.1.10
      with:
        host: ${{ secrets.SERVER_IP }}
        username: root
        key: ${{ secrets.SSH_PRIVATE_KEY }}
        script: |
          cd ${{ secrets.DEPLOY_PATH }}
          git pull origin main
          npm install --production
          pm2 reload ecosystem.config.js --env production
          pm2 save

四、PM2配置与监控

1. 创建ecosystem配置文件

javascript 复制代码
// ecosystem.config.js
module.exports = {
  apps: [{
    name: "express-app",
    script: "app.js",
    instances: "max",
    autorestart: true,
    watch: false,
    env: {
      NODE_ENV: "production",
      PORT: 3000
    }
  }]
}

2. 常用PM2监控命令

bash 复制代码
pm2 monit        # 实时监控面板
pm2 logs         # 查看实时日志
pm2 list         # 查看进程状态
pm2 save         # 保存当前进程列表

五、典型问题排查

1. 部署失败:权限不足

bash 复制代码
# 服务器执行
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

2. PM2进程未启动

检查服务器防火墙设置:

bash 复制代码
sudo ufw allow 3000/tcp  # 开放应用端口
sudo ufw allow 22/tcp    # 确保SSH端口开放

3. GitHub Action报错"Host key verification failed"

在SSH步骤前添加:

yaml 复制代码
 1. name: Add known hosts
  run: |
    mkdir -p ~/.ssh
    ssh-keyscan ${{ secrets.SERVER_IP }} >> ~/.ssh/known_hosts

六、进阶优化方向

  1. 多环境部署:通过Git分支管理dev/stage/prod环境
  2. Webhook通知:集成Slack/Discord发送部署结果通知
  3. 回滚机制:结合PM2的日志快照功能实现快速回滚
  4. 健康检查:在workflow中添加curl健康检查步骤
相关推荐
陈猪的杰咪2 小时前
GitHub Copilot 2026计费新规:AI Credits消耗解析与节省策略
人工智能·ai·架构·github·copilot
comcoo2 小时前
电脑自动干活不用值守!OpenClaw 本地部署完整实操流程
windows·开源·github·open claw部署·open claw部署包
海兰3 小时前
【web应用】Excel 项目数据自动化分析系统(AI 驱动分析)详细设计与部署指南(附源代码)
前端·人工智能·自动化·excel
Rain5094 小时前
2.1 Nest.js 项目初始化与模块化架构
开发语言·前端·javascript·后端·架构·数据分析·node.js
Urbano5 小时前
工装 T 恤、Polo 衫全生产工序、痛点解析及多品牌自动化设备应用方案
运维·自动化
苏州邦恩精密5 小时前
2026江苏GOM三维扫描仪定制厂家找哪家?企业数字化转型视角
人工智能·机器学习·3d·自动化·制造
Hommy886 小时前
【开源剪映小助手】添加特效接口(Add Effects)
开源·github·剪映小助手·视频剪辑自动化
2501_912784087 小时前
Taocarts深度解析:1688自动代采模块的Puppeteer自动化实战
运维·自动化
Dola_Zou7 小时前
边缘智能的“黑暗森林”:工业 AI 模型下沉的资产防护与变现密码
人工智能·安全·自动化·软件工程·软件加密
MXsoft6187 小时前
**断网续传与本地缓存:弱网环境下的监控数据保障方案**
运维·缓存·自动化