12 KiB
12 KiB
低預算部署指南
概述
為Drama Ling應用設計的超低預算部署方案,滿足開發階段NT$2,000/月、生產階段NT$5,000/月的預算限制。
部署策略總覽
成本控制原則
- 開發階段: 完全本地化開發,最小化雲端服務使用
- 生產階段: VPS單機部署,優化AI服務用量
- 擴展準備: 架構設計考慮未來遷移至雲端服務的可能性
開發階段部署 (NT$ 2,000/月預算)
本地開發環境設置
Docker Compose配置
# docker-compose.dev.yml
version: '3.8'
services:
# 後端API服務
api:
build:
context: ./backend
dockerfile: Dockerfile.dev
ports:
- "3001:3001"
environment:
- NODE_ENV=development
- DATABASE_URL=postgresql://dev:dev123@postgres:5432/dramaling_dev
- REDIS_URL=redis://redis:6379
- OPENAI_API_KEY=${OPENAI_API_KEY}
volumes:
- ./backend:/app
- /app/node_modules
depends_on:
- postgres
- redis
# PostgreSQL資料庫
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: dramaling_dev
POSTGRES_USER: dev
POSTGRES_PASSWORD: dev123
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./database/init:/docker-entrypoint-initdb.d
# Redis快取
redis:
image: redis:7-alpine
ports:
- "6379:6379"
command: redis-server --appendonly yes
volumes:
- redis_data:/data
# 前端開發服務器
web:
build:
context: ./frontend
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
volumes:
- ./frontend:/app
- /app/node_modules
environment:
- REACT_APP_API_URL=http://localhost:3001
volumes:
postgres_data:
redis_data:
開發成本明細
development_costs:
infrastructure:
local_docker: "免費"
domain_testing: "免費 (ngrok或localhost)"
services:
openai_api: "NT$ 300-600/月"
# 基於低用量GPT-4o-mini,約1000-2000次API呼叫
database: "免費 (本地PostgreSQL)"
storage: "免費 (本地檔案系統)"
tools:
monitoring: "免費 (Docker logs)"
version_control: "免費 (GitHub)"
total: "NT$ 300-600/月"
remaining_budget: "NT$ 1,400-1,700/月"
開發工作流程
1. 環境啟動
# 啟動開發環境
docker-compose -f docker-compose.dev.yml up -d
# 檢查服務狀態
docker-compose -f docker-compose.dev.yml ps
# 查看日誌
docker-compose -f docker-compose.dev.yml logs -f api
2. 資料庫遷移
# 執行資料庫遷移
docker-compose -f docker-compose.dev.yml exec api npm run migrate
# 填充測試資料
docker-compose -f docker-compose.dev.yml exec api npm run seed
3. AI服務成本控制
// AI服務配置
const aiConfig = {
provider: 'openai',
model: 'gpt-4o-mini', // 比GPT-4便宜10倍
maxTokens: 500, // 限制回應長度
cache: {
enabled: true,
ttl: 3600, // 1小時快取
hitRateTarget: 0.9 // 目標90%命中率
},
rateLimiting: {
requestsPerMinute: 10,
tokensPerMinute: 5000
}
}
生產階段部署 (NT$ 5,000/月預算)
VPS服務商選擇
推薦VPS配置
recommended_vps:
provider_options:
- name: "DigitalOcean"
specs: "4GB RAM, 2 vCPU, 80GB SSD"
monthly_cost: "NT$ 320 ($10 USD)"
location: "Singapore"
- name: "Vultr"
specs: "4GB RAM, 2 vCPU, 80GB SSD"
monthly_cost: "NT$ 384 ($12 USD)"
location: "Tokyo"
- name: "Linode"
specs: "4GB RAM, 2 vCPU, 80GB SSD"
monthly_cost: "NT$ 320 ($10 USD)"
location: "Tokyo"
selection_criteria:
- 亞洲機房降低延遲
- 穩定的網路連線
- 良好的技術支援
- 彈性的計費方式
生產環境配置
Docker Compose生產配置
# docker-compose.prod.yml
version: '3.8'
services:
# Nginx反向代理
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/ssl:/etc/nginx/ssl
- ./frontend/build:/usr/share/nginx/html
depends_on:
- api
restart: unless-stopped
# 後端API服務
api:
build:
context: ./backend
dockerfile: Dockerfile.prod
environment:
- NODE_ENV=production
- DATABASE_URL=${DATABASE_URL}
- REDIS_URL=${REDIS_URL}
- OPENAI_API_KEY=${OPENAI_API_KEY}
- JWT_SECRET=${JWT_SECRET}
depends_on:
- postgres
- redis
restart: unless-stopped
# PostgreSQL資料庫
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./database/init:/docker-entrypoint-initdb.d
restart: unless-stopped
# Redis快取
redis:
image: redis:7-alpine
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
volumes:
- redis_data:/data
restart: unless-stopped
# 監控服務
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
restart: unless-stopped
grafana:
image: grafana/grafana:latest
ports:
- "3001:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
volumes:
- grafana_data:/var/lib/grafana
restart: unless-stopped
volumes:
postgres_data:
redis_data:
grafana_data:
Nginx配置
# nginx/nginx.conf
events {
worker_connections 1024;
}
http {
upstream api {
server api:3001;
}
# 啟用gzip壓縮
gzip on;
gzip_vary on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript;
# SSL配置
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
# 前端靜態檔案
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
}
# API代理
location /api/ {
proxy_pass http://api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# HTTP重定向至HTTPS
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
}
生產成本明細
production_costs:
infrastructure:
vps_server: "NT$ 320-480/月" # 4GB VPS
domain_ssl: "NT$ 400-600/月" # 域名 + Cloudflare Pro
backup_storage: "NT$ 160-240/月" # 備份儲存
services:
openai_api: "NT$ 1,500-3,000/月" # 優化使用GPT-4o-mini
payment_stripe: "3% 交易手續費"
monitoring: "NT$ 0-480/月" # 基本免費或便宜方案
total_fixed: "NT$ 2,380-4,800/月"
remaining_budget: "NT$ 200-2,620/月"
AI服務成本優化策略
1. 快取策略
// 多層快取系統
const cacheStrategy = {
// L1: 記憶體快取 (最快)
memory: {
provider: 'node-cache',
ttl: 300, // 5分鐘
checkperiod: 60
},
// L2: Redis快取 (跨實例)
redis: {
provider: 'redis',
ttl: 3600, // 1小時
keyPrefix: 'ai_cache:'
},
// L3: 資料庫快取 (持久化)
database: {
table: 'ai_responses',
ttl: 86400 * 7 // 7天
}
}
2. 批次處理
// 批次AI請求降低成本
const batchProcessor = {
queueSize: 10, // 累積10個請求
timeout: 5000, // 或等待5秒
async processBatch(requests) {
// 合併類似請求
const grouped = groupSimilarRequests(requests);
// 批次發送
const results = await Promise.all(
grouped.map(group => this.sendBatchRequest(group))
);
return results.flat();
}
}
3. 智慧降級
// 根據複雜度選擇模型
const modelSelector = {
simple: 'gpt-4o-mini', // 簡單任務
complex: 'gpt-4o', // 複雜任務(限量)
selectModel(task) {
const complexity = this.analyzeComplexity(task);
return complexity < 0.5 ? this.simple : this.complex;
}
}
部署自動化
部署腳本
#!/bin/bash
# deploy.sh
set -e
echo "🚀 開始部署 Drama Ling 生產環境..."
# 1. 拉取最新代碼
git pull origin main
# 2. 構建前端
echo "📦 構建前端應用..."
cd frontend
npm run build
cd ..
# 3. 停止現有服務
echo "⏹️ 停止現有服務..."
docker-compose -f docker-compose.prod.yml down
# 4. 備份資料庫
echo "💾 備份資料庫..."
./scripts/backup-database.sh
# 5. 啟動新服務
echo "▶️ 啟動新服務..."
docker-compose -f docker-compose.prod.yml up -d
# 6. 健康檢查
echo "🏥 執行健康檢查..."
./scripts/health-check.sh
# 7. 清理舊映像
echo "🧹 清理舊Docker映像..."
docker image prune -f
echo "✅ 部署完成!"
健康檢查腳本
#!/bin/bash
# scripts/health-check.sh
echo "檢查服務健康狀態..."
# 檢查API服務
if curl -f http://localhost/api/health; then
echo "✅ API服務正常"
else
echo "❌ API服務異常"
exit 1
fi
# 檢查資料庫連線
if docker-compose -f docker-compose.prod.yml exec -T postgres pg_isready; then
echo "✅ 資料庫連線正常"
else
echo "❌ 資料庫連線異常"
exit 1
fi
# 檢查Redis服務
if docker-compose -f docker-compose.prod.yml exec -T redis redis-cli ping; then
echo "✅ Redis服務正常"
else
echo "❌ Redis服務異常"
exit 1
fi
echo "🎉 所有服務健康檢查通過!"
監控與維護
免費監控方案
monitoring_stack:
uptime_monitoring:
provider: "UptimeRobot"
cost: "免費"
features:
- 5分鐘間隔檢查
- 50個監控點
- email/SMS通知
error_tracking:
provider: "Sentry"
cost: "免費 (5000 errors/月)"
features:
- 錯誤追蹤
- 性能監控
- 釋出追蹤
log_analysis:
provider: "Docker logs + Grafana"
cost: "免費"
features:
- 集中化日誌
- 基本儀表板
- 警報通知
備份策略
#!/bin/bash
# scripts/backup-database.sh
BACKUP_DIR="/var/backups/dramaling"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="dramaling_backup_${TIMESTAMP}.sql"
# 創建備份目錄
mkdir -p $BACKUP_DIR
# 執行資料庫備份
docker-compose -f docker-compose.prod.yml exec -T postgres \
pg_dump -U $POSTGRES_USER $POSTGRES_DB > "$BACKUP_DIR/$BACKUP_FILE"
# 壓縮備份檔案
gzip "$BACKUP_DIR/$BACKUP_FILE"
# 保留最近7天的備份
find $BACKUP_DIR -name "*.gz" -mtime +7 -delete
# 上傳至雲端存儲(可選)
# aws s3 cp "$BACKUP_DIR/${BACKUP_FILE}.gz" s3://your-backup-bucket/
echo "✅ 資料庫備份完成: ${BACKUP_FILE}.gz"
擴展計劃
當預算增加時的升級路徑
第一階段:服務優化 (NT$ 10,000/月)
- 升級至更大規格VPS
- 啟用專業版監控工具
- 增加AI API使用量
第二階段:高可用性 (NT$ 20,000/月)
- 多VPS負載均衡
- 資料庫主從複製
- CDN服務啟用
第三階段:雲端遷移 (NT$ 50,000/月)
- 遷移至AWS/GCP
- 容器編排 (Kubernetes)
- 微服務架構改造
總結
這個低預算部署方案能夠:
✅ 滿足預算限制: 開發階段NT$300-600/月,生產階段NT$2,380-4,800/月
✅ 保持功能完整: 支援所有核心功能,包括AI服務
✅ 確保可擴展性: 架構設計考慮未來升級需求
✅ 維護便利性: 自動化部署和監控
✅ 風險可控: 多層備份和健康檢查
文件版本: v1.0
最後更新: 2024年9月7日
適用場景: 預算受限的初期部署階段
下次檢討: 生產環境運行3個月後評估升級需求