デプロイメント
TRAEは、様々なプラットフォームや環境にアプリケーションをデプロイするための包括的なデプロイメント機能を提供します。このガイドでは、デプロイメント機能、設定オプション、ベストプラクティスについて説明します。
概要
TRAEのデプロイメントシステムは以下をサポートします:
- 複数のデプロイメントプラットフォーム(Vercel、Netlify、AWSなど)
- 自動化されたCI/CDパイプライン
- 環境管理
- ビルド最適化
- デプロイメント監視
デプロイメントプラットフォーム
Vercel
TRAEはVercelとの組み込み統合により、シームレスなWebアプリケーションデプロイメントを提供します。
クイックデプロイ
- AIチャットパネルのデプロイボタンをクリック
- またはブラウザパネルの右上角のデプロイボタンをクリック
- デプロイメント設定を構成
- デプロイメントプロセスを開始
設定
json
{
"name": "my-app",
"version": 2,
"builds": [
{
"src": "package.json",
"use": "@vercel/node"
}
],
"routes": [
{
"src": "/(.*)",
"dest": "/"
}
]
}Netlify
静的サイトとサーバーレス関数をNetlifyにデプロイします。
セットアップ
- リポジトリを接続
- ビルド設定を構成
- 環境変数を設定
- プッシュ時に自動デプロイ
ビルド設定
toml
[build]
publish = "dist"
command = "npm run build"
[build.environment]
NODE_VERSION = "18"
[[redirects]]
from = "/*"
to = "/index.html"
status = 200AWS
S3、EC2、Lambdaなど、様々なAWSサービスにデプロイします。
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 --deleteCI/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"
}
}パフォーマンス最適化
- コード分割: 動的インポートを実装
- ツリーシェイキング: 未使用コードを削除
- ミニフィケーション: JavaScriptとCSSを圧縮
- 画像最適化: Web用に画像を最適化
- キャッシュ: 適切なキャッシュ戦略を実装
Dockerデプロイメント
Dockerfile
dockerfile
# Dockerfile
FROM node:18-alpine AS base
# Install dependencies only when needed
FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm ci --only=production
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build
# Production image, copy all the files and run 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
});デプロイメント戦略
ブルーグリーンデプロイメント
- 新しい環境(グリーン)にデプロイ
- 新しい環境をテスト
- 古い環境(ブルー)から新しい環境(グリーン)にトラフィックを切り替え
- 古い環境をバックアップとして保持
ローリングデプロイメント
- サーバーのサブセットにデプロイ
- 新しいバージョンへのトラフィックを徐々に増加
- 問題を監視
- 完全なロールアウトまたは問題があればロールバック
カナリアデプロイメント
- 少数のユーザーにデプロイ
- メトリクスとユーザーフィードバックを監視
- トラフィックを徐々に増加
- 結果に基づいて完全なロールアウトまたはロールバック
ロールバック戦略
自動ロールバック
yaml
# .github/workflows/deploy-with-rollback.yml
- name: Deploy with rollback
run: |
# Deploy new version
vercel --prod
# Health check
if ! curl -f https://myapp.com/api/health; then
echo "Health check failed, rolling back"
vercel rollback --prod
exit 1
fi手動ロールバック
bash
# 前のバージョンにロールバック
vercel rollback --prod
# 特定のデプロイメントにロールバック
vercel rollback [deployment-url] --prodセキュリティベストプラクティス
環境変数
- シークレットをバージョン管理にコミットしない
- 安全なシークレット管理サービスを使用
- シークレットを定期的にローテーション
- 異なる環境で異なるシークレットを使用
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'
}
]
}
];
}
};トラブルシューティング
一般的な問題
ビルド失敗
- エラーのビルドログを確認
- 依存関係とバージョンを確認
- 環境変数が設定されていることを確認
デプロイメントタイムアウト
- ビルドプロセスを最適化
- タイムアウト制限を増加
- ビルドキャッシュを使用
ランタイムエラー
- アプリケーションログを確認
- 環境設定を確認
- 本番設定でローカルテスト
デバッグツール
bash
# デプロイメント状態を確認
vercel ls
# デプロイメントログを表示
vercel logs [deployment-url]
# デプロイメントを検査
vercel inspect [deployment-url]ベストプラクティス
- 自動テスト: デプロイメント前に包括的なテストを実行
- ステージング環境: 本番環境に似た環境でテスト
- 段階的ロールアウト: カナリアまたはブルーグリーンデプロイメントを使用
- 監視: 包括的な監視とアラートを実装
- ドキュメント: デプロイメントプロセスと設定を文書化
- バックアップ戦略: バックアップと復旧手順を維持
- セキュリティ: デプロイメントのセキュリティベストプラクティスに従う
- パフォーマンス: アプリケーションパフォーマンスを監視・最適化