使用阿里云进行nextjs项目CI/CD的完整流程

使用阿里云进行nextjs项目CI/CD的完整流程
最新回答
纠心地疼。

2026-06-14 11:55:03

使用阿里云进行Next.js项目的CI/CD流程可分为以下核心步骤,结合Github Actions实现自动化部署,涵盖环境准备、流程配置及关键注意事项:

一、环境准备1. 阿里云ECS服务器配置
  • SSH密钥生成与配置在ECS服务器生成SSH密钥对,用于Github Actions安全连接:

    cd /root/.sshssh-keygen -m PEM -t rsa -b 4096 -C "your_email@example.com"cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    公钥需添加至Github仓库的Settings > Deploy keys,私钥通过Github Secrets存储(见下文)。

  • Node.js环境安装使用NVM管理Node.js版本(推荐国内用户通过Gitee镜像安装):

    curl -o-
    https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh
    | bashsource ~/.bashrcnvm install 20node -v # 验证版本(如v20.17.0)
  • Docker环境配置安装Docker并配置国内镜像源加速:

    # 添加阿里云GPG密钥与APT源curl -fsSL
    https://mirrors.aliyun.com/docker-ce/linux/debian/gpg
    | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]
    https://mirrors.aliyun.com/docker-ce/linux/debian
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.listsudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io# 配置镜像加速(编辑/etc/docker/daemon.json){ "registry-mirrors": ["
    https://5jyv9qf7.mirror.aliyuncs.com"
    ]}sudo systemctl restart docker
  • 数据库与进程管理

    PostgreSQL容器化部署:

    docker pull postgresdocker run --name postgres -e POSTGRES_PASSWORD=your_password -p 5432:5432 -d postgres

    PM2进程管理:

    npm install -g pm2pm2 start npm -- run start # 启动Next.js应用
二、Github Actions配置1. 存储敏感信息

在Github仓库的Settings > Secrets and variables > Actions中添加以下变量:

  • ALIYUN_SERVER_PRIVATE_KEY:ECS服务器的SSH私钥(id_rsa内容)。
  • ALIYUN_SERVER_HOST:ECS服务器IP地址。
  • ALIYUN_ECS_USER:SSH登录用户名(如root)。

(图:Github Secrets配置界面)2. 创建CI/CD工作流

在项目根目录创建.github/workflows/deploy.yml,内容如下:

name: Deploy Next.js App to Aliyun ECSon: push: branches: [master] # 主分支触发部署jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Install dependencies & build run: | npm install --legacy-peer-deps npm run build - name: Archive artifacts run: tar -czf build_artifacts.tar.gz .next public node_modules package.json - name: Deploy to ECS env: SSH_PRIVATE_KEY: ${{ secrets.ALIYUN_SERVER_PRIVATE_KEY }} ECS_HOST: ${{ secrets.ALIYUN_SERVER_HOST }} ECS_USER: ${{ secrets.ALIYUN_ECS_USER }} run: | echo "$SSH_PRIVATE_KEY" > id_rsa chmod 600 id_rsa scp -i id_rsa build_artifacts.tar.gz $ECS_USER@$ECS_HOST:/projects/deploy ssh -i id_rsa $ECS_USER@$ECS_HOST << 'EOF' cd /projects/deploy tar -xzf build_artifacts.tar.gz cp -rf .next public node_modules /projects/webapp cd /projects/webapp pm2 restart all # 重启应用 EOF

关键逻辑说明:

  1. 代码检出:使用actions/checkout@v3拉取最新代码。
  2. 依赖安装与构建:在Github Actions环境中执行npm install和npm run build。
  3. 文件打包:将构建产物(.next、public等)打包为tar.gz文件。
  4. 传输与部署:

    通过scp将压缩包上传至ECS服务器的/projects/deploy目录。

    使用ssh远程执行解压、覆盖文件,并通过pm2重启应用。

三、流程优化与注意事项
  1. 分离编译与部署

    若ECS服务器性能不足,建议在Github Actions中完成编译,仅传输构建产物(如上述流程)。

    若需在ECS本地编译,需确保服务器已安装完整依赖(如Node.js、Python等)。

  2. 数据库迁移(Migration)

    手动执行:在部署脚本中添加迁移命令(如npx prisma migrate deploy),但需谨慎操作以避免数据丢失。

    自动化方案:通过SSH在部署后执行迁移脚本,或使用数据库管理工具(如Flyway)。

  3. 环境变量管理

    Next.js项目的环境变量(如数据库连接字符串)需通过pm2启动时注入,或通过.env文件传输。

  4. 回滚机制

    在ECS服务器保留历史版本构建包,或通过Git标签管理版本,便于快速回滚。

  5. 安全性增强

    限制Github Secrets的访问权限,避免泄露私钥。

    使用SSH密钥而非密码登录,并定期轮换密钥。

四、完整流程示意图graph TD A[代码提交至Github master分支] --> B[Github Actions触发部署] B --> C[安装依赖并构建] C --> D[打包构建产物] D --> E[上传至阿里云ECS] E --> F[远程解压并覆盖文件] F --> G[PM2重启应用]

通过上述步骤,可实现Next.js项目在阿里云ECS上的自动化CI/CD,兼顾效率与安全性。根据实际项目需求,可进一步扩展功能(如自动化测试、多环境部署等)。