Skip to content

部署 ​

TRAE 提供全面的部署功能,帮助您将应用程序部署到各种平台和环境。本指南涵盖部署功能、配置选项和最佳实践。

概述 ​

TRAE 的部署系统支持:

  • 多个部署平台(Vercel、Netlify、AWS 等)
  • 自动化 CI/CD 流水线
  • 环境管理
  • 构建优化
  • 部署监控

部署平台 ​

Vercel ​

TRAE 与 Vercel 内置集成,可无缝部署 Web 应用程序。

快速部署 ​

  1. 点击 AI 聊天面板中的部署按钮
  2. 或点击浏览器面板右上角的部署按钮
  3. 配置您的部署设置
  4. 开始部署过程

配置 ​

json
{
  "name": "my-app",
  "version": 2,
  "builds": [
    {
      "src": "package.json",
      "use": "@vercel/node"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "/"
    }
  ]
}

Netlify ​

将静态网站和无服务器函数部署到 Netlify。

设置 ​

  1. 连接您的代码仓库
  2. 配置构建设置
  3. 设置环境变量
  4. 在推送时自动部署

构建配置 ​

toml
[build]
  publish = "dist"
  command = "npm run build"

[build.environment]
  NODE_VERSION = "18"

[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

AWS ​

部署到各种 AWS 服务,包括 S3、EC2 和 Lambda。

S3 静态托管 ​

yaml
# .github/workflows/deploy-aws.yml
name: Deploy to AWS S3
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1
      - name: Build and deploy
        run: |
          npm install
          npm run build
          aws s3 sync dist/ s3://my-bucket --delete

CI/CD 集成 ​

GitHub Actions ​

使用 GitHub Actions 自动化您的部署。

yaml
# .github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
          cache: 'npm'
      - name: Install dependencies
        run: npm ci
      - name: Run tests
        run: npm test
      - name: Run linting
        run: npm run lint

  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v3
      - name: Deploy to Vercel
        uses: amondnet/vercel-action@v20
        with:
          vercel-token: ${{ secrets.VERCEL_TOKEN }}
          vercel-org-id: ${{ secrets.ORG_ID }}
          vercel-project-id: ${{ secrets.PROJECT_ID }}

GitLab CI/CD ​

yaml
# .gitlab-ci.yml
stages:
  - test
  - build
  - deploy

test:
  stage: test
  script:
    - npm install
    - npm test
    - npm run lint

build:
  stage: build
  script:
    - npm install
    - npm run build
  artifacts:
    paths:
      - dist/

deploy:
  stage: deploy
  script:
    - npm run deploy
  only:
    - main

环境管理 ​

环境变量 ​

使用环境变量管理不同的环境。

bash
# .env.local
NEXT_PUBLIC_API_URL=http://localhost:3000/api
DATABASE_URL=postgresql://localhost:5432/myapp_dev

# .env.production
NEXT_PUBLIC_API_URL=https://api.myapp.com
DATABASE_URL=postgresql://prod-server:5432/myapp_prod

环境配置 ​

javascript
// config/environment.js
const environments = {
  development: {
    apiUrl: 'http://localhost:3000',
    debug: true
  },
  staging: {
    apiUrl: 'https://staging-api.myapp.com',
    debug: false
  },
  production: {
    apiUrl: 'https://api.myapp.com',
    debug: false
  }
};

export default environments[process.env.NODE_ENV || 'development'];

构建优化 ​

包分析 ​

分析和优化您的构建包。

json
{
  "scripts": {
    "build": "next build",
    "build:analyze": "ANALYZE=true next build",
    "build:profile": "next build --profile"
  }
}

性能优化 ​

  1. 代码分割:实现动态导入
  2. Tree Shaking:移除未使用的代码
  3. 压缩:压缩 JavaScript 和 CSS
  4. 图片优化:为 Web 优化图片
  5. 缓存:实现适当的缓存策略

Docker 部署 ​

Dockerfile ​

dockerfile
# Dockerfile
FROM node:18-alpine AS base

# 仅在需要时安装依赖项
FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app

COPY package.json package-lock.json* ./
RUN npm ci --only=production

# 仅在需要时重新构建源代码
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .

RUN npm run build

# 生产镜像,复制所有文件并运行 next
FROM base AS runner
WORKDIR /app

ENV NODE_ENV production

RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs

COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

USER nextjs

EXPOSE 3000

ENV PORT 3000

CMD ["node", "server.js"]

Docker Compose ​

yaml
# docker-compose.yml
version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://postgres:password@db:5432/myapp
    depends_on:
      - db

  db:
    image: postgres:15
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

部署监控 ​

健康检查 ​

javascript
// pages/api/health.js
export default function handler(req, res) {
  const healthcheck = {
    uptime: process.uptime(),
    message: 'OK',
    timestamp: Date.now()
  };
  
  try {
    res.status(200).send(healthcheck);
  } catch (error) {
    healthcheck.message = error;
    res.status(503).send();
  }
}

错误跟踪 ​

集成错误跟踪服务,如 Sentry。

javascript
// sentry.config.js
import * as Sentry from '@sentry/nextjs';

Sentry.init({
  dsn: process.env.SENTRY_DSN,
  environment: process.env.NODE_ENV,
  tracesSampleRate: 1.0
});

部署策略 ​

蓝绿部署 ​

  1. 部署到新环境(绿色)
  2. 测试新环境
  3. 将流量从旧环境(蓝色)切换到新环境(绿色)
  4. 保留旧环境作为备份

滚动部署 ​

  1. 部署到服务器子集
  2. 逐渐增加新版本的流量
  3. 监控问题
  4. 完成推出或根据需要回滚

金丝雀部署 ​

  1. 部署到一小部分用户
  2. 监控指标和用户反馈
  3. 逐渐增加流量
  4. 根据结果进行完整推出或回滚

回滚策略 ​

自动回滚 ​

yaml
# .github/workflows/deploy-with-rollback.yml
- name: Deploy with rollback
  run: |
    # 部署新版本
    vercel --prod
    
    # 健康检查
    if ! curl -f https://myapp.com/api/health; then
      echo "健康检查失败,正在回滚"
      vercel rollback --prod
      exit 1
    fi

手动回滚 ​

bash
# 回滚到上一个版本
vercel rollback --prod

# 回滚到特定部署
vercel rollback [deployment-url] --prod

安全最佳实践 ​

环境变量 ​

  1. 永远不要将机密信息提交到版本控制
  2. 使用安全的机密管理服务
  3. 定期轮换机密信息
  4. 为不同环境使用不同的机密信息

HTTPS 配置 ​

javascript
// next.config.js
module.exports = {
  async headers() {
    return [
      {
        source: '/(.*)',
        headers: [
          {
            key: 'Strict-Transport-Security',
            value: 'max-age=31536000; includeSubDomains'
          },
          {
            key: 'X-Frame-Options',
            value: 'DENY'
          },
          {
            key: 'X-Content-Type-Options',
            value: 'nosniff'
          }
        ]
      }
    ];
  }
};

故障排除 ​

常见问题 ​

  1. 构建失败

    • 检查构建日志中的错误
    • 验证依赖项和版本
    • 确保设置了环境变量
  2. 部署超时

    • 优化构建过程
    • 增加超时限制
    • 使用构建缓存
  3. 运行时错误

    • 检查应用程序日志
    • 验证环境配置
    • 使用生产设置进行本地测试

调试工具 ​

bash
# 检查部署状态
vercel ls

# 查看部署日志
vercel logs [deployment-url]

# 检查部署
vercel inspect [deployment-url]

最佳实践 ​

  1. 自动化测试:在部署前运行全面测试
  2. 预发布环境:在类似生产的环境中测试
  3. 渐进式推出:使用金丝雀或蓝绿部署
  4. 监控:实施全面的监控和警报
  5. 文档:记录部署过程和配置
  6. 备份策略:维护备份和恢复程序
  7. 安全性:遵循部署的安全最佳实践
  8. 性能:监控和优化应用程序性能

相关文章 ​

您的终极 AI 驱动 IDE 学习指南