11. 交付与运维
11.1 一键部署
部署方案
智能客服系统采用容器化部署,支持一键部署到各种环境:
Docker Compose部署
docker-compose.yml配置:
version: '3.8'
services:
customer-service:
image: customer-service:latest
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/dbname
- REDIS_URL=redis://redis:6379
- OPENAI_API_KEY=${OPENAI_API_KEY}
depends_on:
- db
- redis
volumes:
- ./logs:/app/logs
restart: unless-stopped
db:
image: postgres:14
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=dbname
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
restart: unless-stopped
volumes:
postgres_data:
redis_data:
Kubernetes部署
deployment.yaml配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: customer-service
spec:
replicas: 3
selector:
matchLabels:
app: customer-service
template:
metadata:
labels:
app: customer-service
spec:
containers:
- name: customer-service
image: customer-service:latest
ports:
- containerPort: 8000
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: db-secret
key: url
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 2000m
memory: 4Gi
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8000
initialDelaySeconds: 10
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: customer-service
spec:
selector:
app: customer-service
ports:
- port: 80
targetPort: 8000
type: LoadBalancer
部署脚本
自动化部署脚本
deploy.sh脚本:
#!/bin/bash
set -e
# 配置变量
ENVIRONMENT=${1:-production}
IMAGE_TAG=${2:-latest}
NAMESPACE=customer-service
echo "开始部署到 $ENVIRONMENT 环境..."
# 构建镜像
echo "构建Docker镜像..."
docker build -t customer-service:$IMAGE_TAG .
# 推送镜像
echo "推送镜像到镜像仓库..."
docker push customer-service:$IMAGE_TAG
# 部署到Kubernetes
echo "部署到Kubernetes..."
kubectl set image deployment/customer-service \
customer-service=customer-service:$IMAGE_TAG \
-n $NAMESPACE
# 等待部署完成
echo "等待部署完成..."
kubectl rollout status deployment/customer-service -n $NAMESPACE
# 健康检查
echo "执行健康检查..."
sleep 10
curl -f http://customer-service.$NAMESPACE.svc.cluster.local/health || exit 1
echo "部署完成!"
部署流程
1. 代码构建
- 拉取最新代码
- 运行测试
- 构建Docker镜像
2. 镜像推送
- 推送到镜像仓库
- 打标签
- 版本管理
3. 部署执行
- 更新Kubernetes配置
- 执行滚动更新
- 验证部署结果
4. 健康检查
- 检查服务健康状态
- 检查关键指标
- 验证功能正常
环境配置
环境变量配置
开发环境:
ENVIRONMENT=development
DATABASE_URL=postgresql://localhost:5432/customer_service_dev
REDIS_URL=redis://localhost:6379
LOG_LEVEL=DEBUG
OPENAI_API_KEY=sk-dev-key
测试环境:
ENVIRONMENT=testing
DATABASE_URL=postgresql://test-db:5432/customer_service_test
REDIS_URL=redis://test-redis:6379
LOG_LEVEL=INFO
OPENAI_API_KEY=sk-test-key
生产环境:
ENVIRONMENT=production
DATABASE_URL=postgresql://prod-db:5432/customer_service_prod
REDIS_URL=redis://prod-redis:6379
LOG_LEVEL=WARNING
OPENAI_API_KEY=sk-prod-key
配置管理
使用ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: customer-service-config
data:
environment: production
log_level: INFO
max_concurrent_requests: "100"
使用Secret:
apiVersion: v1
kind: Secret
metadata:
name: customer-service-secret
type: Opaque
data:
database_url: <base64-encoded>
api_key: <base64-encoded>
11.2 灾备与回滚
灾备方案
备份策略
1. 数据备份
- 全量备份:每天凌晨2点执行
- 增量备份:每小时执行
- 备份保留:全量备份保留30天,增量备份 保留7天
2. 应用备份
- 代码备份:Git版本控制
- 配置备份:配置文件版本管理
- 镜像备份:镜像仓库备份
3. 数据库备份
#!/bin/bash
# 数据库备份脚本
BACKUP_DIR="/backup/postgres"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="customer_service"
# 全量备份
pg_dump -h $DB_HOST -U $DB_USER -d $DB_NAME \
-F c -f "$BACKUP_DIR/full_$DATE.dump"
# 清理旧备份(保留30天)
find $BACKUP_DIR -name "full_*.dump" -mtime +30 -delete
灾备演练
演练频率:每季度一次 演练内容:
- 模拟数据库故障
- 模拟服务器故障
- 模拟网络故障
- 验证恢复流程
演练步骤:
- 创建测试环境
- 模拟故障场景
- 执行恢复流程
- 验证恢复结果
- 总结改进措施