You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求GitLab CI部署Turborepo中Next.js独立应用的成功案例

GitLab CI部署Turborepo中Next.js独立应用的实践示例

完全可以实现,下面是一套经过验证的配置示例,涵盖项目结构、Turbo配置、GitLab CI流水线配置全流程:

一、典型项目结构

.
├── apps/
│   └── web/          # 你的Next.js独立应用
│       ├── next.config.js
│       ├── package.json
│       └── ...
├── packages/
│   └── ui/           # 共享组件包(可选)
│       └── ...
├── turbo.json
├── package.json
└── .gitlab-ci.yml

二、Turbo构建配置(turbo.json)

指定依赖顺序和输出目录,确保只构建目标Next.js应用:

{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": [
        "apps/web/.next/**",
        "apps/web/out/**"
      ]
    },
    "lint": {
      "dependsOn": ["^lint"]
    }
  }
}

三、Next.js应用配置(apps/web/next.config.js)

开启独立部署模式,生成可直接运行的产物:

/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'standalone', // 生成独立部署包,无需全局安装Node依赖
  distDir: 'out', // 自定义输出目录,可根据需求调整
};

module.exports = nextConfig;

四、GitLab CI流水线配置(.gitlab-ci.yml)

实现依赖安装、构建、部署全自动化:

stages:
  - install
  - build
  - deploy

# 使用Node.js 18镜像(Next.js 13+推荐版本)
image: node:18-alpine

# 缓存依赖与构建缓存,加速后续流水线
cache:
  paths:
    - node_modules/
    - .turbo/
    - apps/web/.next/cache/

install_deps:
  stage: install
  script:
    - npm install

build_app:
  stage: build
  script:
    - npm run build -- --filter=web # 仅构建web应用,跳过其他包
  artifacts:
    paths:
      - apps/web/out/ # 对应Next.js配置的distDir
    expire_in: 1 week # 构建产物保留1周

# 示例:部署到自定义Linux服务器(需提前配置环境变量)
deploy_to_server:
  stage: deploy
  only:
    - main # 仅在主分支触发部署
  script:
    # 安装SSH客户端
    - apk add --no-cache openssh-client
    # 配置SSH密钥
    - mkdir -p ~/.ssh
    - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - ssh-keyscan -H $SERVER_IP >> ~/.ssh/known_hosts
    # 上传构建产物到服务器目标目录
    - scp -r apps/web/out/* $SERVER_USER@$SERVER_IP:/var/www/next-web-app/
    # 可选:用pm2重启应用(需服务器已安装pm2)
    - ssh $SERVER_USER@$SERVER_IP "pm2 restart next-web-app"

关键注意事项

  • 环境变量配置:在GitLab项目的「Settings > CI/CD > Variables」中添加SSH_PRIVATE_KEY(服务器私钥)、SERVER_IP、SERVER_USER等敏感信息
  • Turbo过滤命令:--filter=web是核心,确保只构建指定的Next.js应用,避免冗余构建
  • Next.js产物部署:如果使用standalone模式,除了out/standalone/,还需同步apps/web/public/和apps/web/out/static/目录到服务器
  • 缓存优化:缓存.turbo目录可复用Turbo的构建缓存,大幅缩短构建时间

内容的提问来源于stack exchange,提问作者Volnei Munhoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:50:24