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-Docker环境配置安装Docker并配置国内镜像源加速:
# 添加阿里云GPG密钥与APT源curl -fsSL数据库与进程管理
PostgreSQL容器化部署:
docker pull postgresdocker run --name postgres -e POSTGRES_PASSWORD=your_password -p 5432:5432 -d postgresPM2进程管理:
npm install -g pm2pm2 start npm -- run start # 启动Next.js应用在Github仓库的Settings > Secrets and variables > Actions中添加以下变量:

在项目根目录创建.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关键逻辑说明:
通过scp将压缩包上传至ECS服务器的/projects/deploy目录。
使用ssh远程执行解压、覆盖文件,并通过pm2重启应用。
分离编译与部署
若ECS服务器性能不足,建议在Github Actions中完成编译,仅传输构建产物(如上述流程)。
若需在ECS本地编译,需确保服务器已安装完整依赖(如Node.js、Python等)。
数据库迁移(Migration)
手动执行:在部署脚本中添加迁移命令(如npx prisma migrate deploy),但需谨慎操作以避免数据丢失。
自动化方案:通过SSH在部署后执行迁移脚本,或使用数据库管理工具(如Flyway)。
环境变量管理
Next.js项目的环境变量(如数据库连接字符串)需通过pm2启动时注入,或通过.env文件传输。
回滚机制
在ECS服务器保留历史版本构建包,或通过Git标签管理版本,便于快速回滚。
安全性增强
限制Github Secrets的访问权限,避免泄露私钥。
使用SSH密钥而非密码登录,并定期轮换密钥。
通过上述步骤,可实现Next.js项目在阿里云ECS上的自动化CI/CD,兼顾效率与安全性。根据实际项目需求,可进一步扩展功能(如自动化测试、多环境部署等)。