最后更新: 2024年1月15日

部署指南

本指南将帮助您了解如何将应用部署到 UnlimitBytes 云平台。我们支持多种部署方式,满足不同场景的需求。

部署方式

1. Git 推送部署

最简单的部署方式,只需将代码推送到 Git 仓库即可自动触发部署。

# 添加远程仓库
git remote add unlimitbytes https://git.unlimitbytes.com/your-project.git

# 推送代码触发部署
git push unlimitbytes main

工作流程:

  1. 推送代码到指定分支
  2. 自动构建 Docker 镜像
  3. 运行测试(如果配置)
  4. 部署到生产环境
  5. 健康检查验证

2. CLI 部署

使用 UnlimitBytes CLI 工具进行本地部署控制。

# 安装 CLI
npm install -g @unlimitbytes/cli

# 登录账户
ub login

# 部署应用
ub deploy --env production

# 查看部署状态
ub status

# 查看部署日志
ub logs --follow

3. Docker 镜像部署

直接推送 Docker 镜像到我们的容器仓库。

# 构建镜像
docker build -t registry.unlimitbytes.com/your-app:v1.0.0 .

# 登录仓库
docker login registry.unlimitbytes.com

# 推送镜像
docker push registry.unlimitbytes.com/your-app:v1.0.0

# 使用 CLI 部署
ub deploy --image registry.unlimitbytes.com/your-app:v1.0.0

4. API 部署

通过 API 实现自定义部署流程集成。

const response = await fetch('https://api.unlimitbytes.com/v1/deployments', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${API_TOKEN}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    project_id: 'your-project-id',
    image: 'registry.unlimitbytes.com/your-app:v1.0.0',
    environment: 'production',
    replicas: 3
  })
});

const deployment = await response.json();
console.log('Deployment ID:', deployment.id);

部署配置

unlimitbytes.yaml

在项目根目录创建 unlimitbytes.yaml 配置文件:

# 应用基本信息
app:
  name: my-awesome-app
  region: cn-shanghai
  runtime: nodejs18

# 构建配置
build:
  dockerfile: Dockerfile
  context: .
  args:
    NODE_ENV: production
  cache: true

# 部署配置
deploy:
  replicas: 3
  strategy: rolling-update
  max_surge: 1
  max_unavailable: 0
  
# 资源限制
resources:
  cpu: 1000m
  memory: 512Mi
  
# 环境变量
env:
  NODE_ENV: production
  PORT: 3000
  
# 健康检查
health_check:
  http:
    path: /health
    port: 3000
    interval: 10s
    timeout: 5s
    retries: 3

# 自动扩缩容
autoscaling:
  enabled: true
  min_replicas: 2
  max_replicas: 10
  target_cpu: 70
  target_memory: 80

环境管理

多环境部署

支持开发、测试、生产等多个环境:

# 部署到开发环境
ub deploy --env development

# 部署到测试环境
ub deploy --env staging

# 部署到生产环境
ub deploy --env production

环境变量

通过 Web 控制台或 CLI 管理环境变量:

# 设置环境变量
ub env:set DATABASE_URL=postgres://... --env production

# 查看环境变量
ub env:get --env production

# 删除环境变量
ub env:unset DATABASE_URL --env production

部署策略

滚动更新(默认)

逐步替换旧版本实例,零停机时间:

deploy:
  strategy: rolling-update
  max_surge: 1          # 最多新增1个实例
  max_unavailable: 0    # 保证所有实例可用

蓝绿部署

同时运行新旧两个版本,一键切换:

deploy:
  strategy: blue-green
  auto_switch: false    # 手动切换流量
# 切换流量到新版本
ub traffic:switch --version v2.0.0

# 回滚到旧版本
ub traffic:rollback

金丝雀发布

逐步将流量切换到新版本:

deploy:
  strategy: canary
  steps:
    - weight: 10    # 10% 流量
      pause: 300s   # 暂停5分钟
    - weight: 50    # 50% 流量
      pause: 300s
    - weight: 100   # 100% 流量

回滚操作

快速回滚

# 查看部署历史
ub deployments:list

# 回滚到上一个版本
ub rollback

# 回滚到指定版本
ub rollback --version v1.2.0

自动回滚

配置自动回滚条件:

deploy:
  auto_rollback:
    enabled: true
    conditions:
      - error_rate > 5%
      - response_time > 2000ms
      - health_check_failures > 3

CI/CD 集成

GitHub Actions

name: Deploy to UnlimitBytes

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Install UnlimitBytes CLI
        run: npm install -g @unlimitbytes/cli
      
      - name: Deploy
        env:
          UB_API_TOKEN: ${{ secrets.UB_API_TOKEN }}
        run: |
          ub login --token $UB_API_TOKEN
          ub deploy --env production --wait

GitLab CI

deploy:
  stage: deploy
  image: node:18
  script:
    - npm install -g @unlimitbytes/cli
    - ub login --token $UB_API_TOKEN
    - ub deploy --env production --wait
  only:
    - main

监控部署

实时日志

# 查看部署日志
ub logs --follow

# 查看特定实例日志
ub logs --instance pod-abc123 --follow

# 搜索日志
ub logs --search "error" --since 1h

部署状态

# 查看当前状态
ub status

# 查看详细信息
ub describe

# 查看实例列表
ub instances:list

最佳实践

1. 使用健康检查

确保应用提供健康检查端点:

// Express 示例
app.get('/health', (req, res) => {
  // 检查数据库连接
  if (!db.isConnected()) {
    return res.status(503).json({ status: 'unhealthy' });
  }
  
  res.json({ status: 'healthy' });
});

2. 优化构建时间

使用 Docker 多阶段构建和缓存:

FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build

FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]

3. 环境隔离

不同环境使用不同的配置和资源:

# development
resources:
  cpu: 500m
  memory: 256Mi

# production
resources:
  cpu: 2000m
  memory: 1Gi

4. 版本标签

使用语义化版本标签:

# 打标签
git tag -a v1.2.0 -m "Release version 1.2.0"
git push origin v1.2.0

# 部署指定版本
ub deploy --tag v1.2.0

故障排查

部署失败

# 查看部署日志
ub logs --deployment latest

# 查看事件
ub events --follow

# 验证配置
ub config:validate

性能问题

# 查看资源使用
ub metrics

# 增加实例数量
ub scale --replicas 5

# 垂直扩展
ub resources:update --cpu 2000m --memory 1Gi

下一步