Skip to main content

部署指南

本指南将帮助您在不同环境中部署雷驼智能引擎,包括 Docker、Kubernetes 和云平台部署。

部署前准备

1. 环境检查

确保您的部署环境满足以下要求:

  • 操作系统:Linux (推荐 Ubuntu 20.04+), macOS, Windows
  • 内存:最低 2GB,推荐 4GB+
  • 存储:最低 10GB 可用空间
  • 网络:稳定的互联网连接

2. 依赖服务

  • Docker:20.10 或更高版本
  • Docker Compose:2.0 或更高版本
  • PostgreSQL:16.0 或更高版本(通过 Docker 提供)+ pgvector

3. 配置文件准备

准备以下配置文件:

  • docker-compose.yml - Docker Compose 配置
  • k8s-deployment.yaml - Kubernetes 配置(如使用)

Docker 部署

使用 Docker Compose(推荐)

1. 准备配置文件

# 创建项目目录
mkdir dathor-deployment
cd dathor-deployment

# 创建 docker-compose.yml 文件
touch docker-compose.yml

2. 编辑 docker-compose.yml

services:
# PostgreSQL 数据库服务;如使用自建数据库,请删除此服务
postgres:
image: pgvector/pgvector:pg16
container_name: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres # Postgres 管理员用户名
- POSTGRES_PASSWORD=dathor123456 # Postgres 管理员密码
- POSTGRES_DB=dathor # 初始化数据库名
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
networks:
- dathor-network

# 初始化数据库服务,如果使用自己的数据库服务,请删除此服务
db-init:
image: postgres:16
depends_on:
postgres:
condition: service_healthy
environment:
- POSTGRES_USER=postgres # 与 postgres 服务一致的用户名
- POSTGRES_PASSWORD=dathor123456 # 与 postgres 服务一致的密码
- POSTGRES_DB=dathor # 连接的数据库名(将启用 pgvector 扩展)
command: >
bash -c "
PGPASSWORD=$$POSTGRES_PASSWORD psql -h postgres -U $$POSTGRES_USER -d postgres -c 'CREATE DATABASE \"$$POSTGRES_DB\";' || true;
PGPASSWORD=$$POSTGRES_PASSWORD psql -h postgres -U $$POSTGRES_USER -d $$POSTGRES_DB -c 'CREATE EXTENSION IF NOT EXISTS vector;'
"
networks:
- dathor-network
restart: "no"

# 雷驼智能引擎服务
app:
image: qihangnet/dathor:v1.0.38 # 使用 v1.0.38 版本
container_name: dathor
ports:
- "8000:8000"
environment:
- LANG=zh_CN.UTF-8 # 容器默认语言与编码
- LANGUAGE=zh_CN:zh # 语言优先顺序
- DB_HOST=postgres # 数据库主机(Compose 服务名)
- DB_PORT=5432 # 数据库端口
- DB_USER=postgres # 数据库用户名
- DB_PASSWORD=dathor123456 # 数据库密码
- DB_NAME=dathor # 数据库名称
depends_on:
postgres:
condition: service_healthy
db-init:
condition: service_completed_successfully
networks:
- dathor-network
restart: unless-stopped

volumes:
postgres_data:

networks:
dathor-network:
driver: bridge

3. 启动服务

# 拉取最新镜像
docker-compose pull

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f app

4. 验证部署

# 检查服务健康状态
curl http://localhost:8000/health

# 访问管理界面
open http://localhost:8000

手动 Docker 部署

1. 运行数据库容器

# 运行 PostgreSQL 数据库容器
docker run -d \
--name postgres \
-p 5432:5432 \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=dathor123456 \
-e POSTGRES_DB=dathor \
-v postgres_data:/var/lib/postgresql/data \
pgvector/pgvector:pg16

# 等待数据库启动
sleep 10

# 初始化 pgvector 扩展
docker exec postgres psql -U postgres -d dathor -c "CREATE EXTENSION IF NOT EXISTS vector;"

2. 运行应用容器

# 运行雷驼智能引擎容器
docker run -d \
--name dathor \
-p 8000:8000 \
--link postgres:postgres \
-e LANG=zh_CN.UTF-8 \
-e LANGUAGE=zh_CN:zh \
-e DB_HOST=postgres \
-e DB_PORT=5432 \
-e DB_USER=postgres \
-e DB_PASSWORD=dathor123456 \
-e DB_NAME=dathor \
qihangnet/dathor:v1.0.38

# 查看容器状态
docker ps | grep dathor

# 查看容器日志
docker logs -f dathor

Kubernetes 部署

1. 准备配置文件

# 创建项目目录
mkdir dathor-k8s
cd dathor-k8s

# 创建配置文件
touch k8s-deployment.yaml

2. 创建 ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
name: dathor-config
data:
LANG: "zh_CN.UTF-8"
LANGUAGE: "zh_CN:zh"
DB_HOST: "postgres-service"
DB_PORT: "5432"
DB_USER: "postgres"
DB_NAME: "dathor"

3. 创建 Secret

apiVersion: v1
kind: Secret
metadata:
name: dathor-secrets
type: Opaque
data:
DB_PASSWORD: ZGF0aG9yMTIzNDU2 # base64 编码的 dathor123456

4. 创建 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
name: dathor
spec:
replicas: 3
selector:
matchLabels:
app: dathor
template:
metadata:
labels:
app: dathor
spec:
containers:
- name: dathor
image: qihangnet/dathor:v1.0.38
ports:
- containerPort: 8000
envFrom:
- configMapRef:
name: dathor-config
- secretRef:
name: dathor-secrets
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 5
periodSeconds: 5

5. 创建 Service

apiVersion: v1
kind: Service
metadata:
name: dathor-service
spec:
selector:
app: dathor
ports:
- port: 80
targetPort: 8000
type: LoadBalancer

6. 部署到 Kubernetes

# 应用配置
kubectl apply -f k8s-deployment.yaml

# 查看部署状态
kubectl get deployments
kubectl get pods
kubectl get services

# 查看日志
kubectl logs -f deployment/dathor

云平台部署

AWS ECS 部署

1. 创建 ECS 集群

# 创建集群
aws ecs create-cluster --cluster-name dathor-cluster

# 创建任务定义
aws ecs register-task-definition --cli-input-json file://task-definition.json

2. 配置任务定义

{
"family": "dathor",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "512",
"memory": "1024",
"executionRoleArn": "arn:aws:iam::account:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"name": "dathor",
"image": "your-account.dkr.ecr.region.amazonaws.com/dathor:latest",
"portMappings": [
{
"containerPort": 8000,
"protocol": "tcp"
}
],
"environment": [
{
"name": "DB_HOST",
"value": "your-rds-endpoint"
},
{
"name": "APP_PORT",
"value": "8000"
}
],
"secrets": [
{
"name": "DB_PASSWORD",
"valueFrom": "arn:aws:secretsmanager:region:account:secret:db-password"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/dathor",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
}
}
]
}

3. 创建服务

# 创建服务
aws ecs create-service \
--cluster dathor-cluster \
--service-name dathor-service \
--task-definition dathor:1 \
--desired-count 2 \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[subnet-12345],securityGroups=[sg-12345],assignPublicIp=ENABLED}"

Google Cloud Run 部署

1. 构建并推送镜像

# 构建镜像
docker build -t gcr.io/your-project/dathor:latest .

# 推送镜像
docker push gcr.io/your-project/dathor:latest

2. 部署到 Cloud Run

# 部署服务
gcloud run deploy dathor \
--image gcr.io/your-project/dathor:latest \
--platform managed \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars="DB_HOST=your-cloud-sql-ip,APP_PORT=8000" \
--set-secrets="DB_PASSWORD=db-password:latest"

Azure Container Instances 部署

1. 创建资源组

# 创建资源组
az group create --name dathor-rg --location eastus

2. 部署容器实例

# 部署容器实例
az container create \
--resource-group dathor-rg \
--name dathor \
--image dathor:latest \
--dns-name-label dathor-app \
--ports 8000 \
--environment-variables \
DB_HOST=your-sql-server.database.windows.net \
APP_PORT=8000 \
--secure-environment-variables \
DB_PASSWORD=your-password

生产环境优化

1. 性能优化

资源配置

# Kubernetes 资源配置示例
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "1000m"

缓存配置

# 生产环境缓存配置
CACHE_MODE=redis
REDIS_HOST=redis-cluster
REDIS_PORT=6379
MEMORY_CACHE_MAX_SIZE=100000
MEMORY_CACHE_TTL=600

2. 安全配置

HTTPS 配置

# 安全配置
COOKIE_SECURE=true
COOKIE_SAME_SITE=Strict
SESSION_TIMEOUT=3600

网络安全

# Kubernetes NetworkPolicy 示例
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: dathor-network-policy
spec:
podSelector:
matchLabels:
app: dathor
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: ingress-nginx
ports:
- protocol: TCP
port: 8000

3. 监控配置

健康检查

# Kubernetes 健康检查配置
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3

readinessProbe:
httpGet:
path: /ready
port: 8000
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3

日志配置

# 日志配置
LOG_LEVEL=info
METRICS_ENABLED=true
TRACING_ENABLED=true

备份与恢复

1. 数据库备份

# PostgreSQL 备份
pg_dump -h localhost -U postgres -d dathor > dathor_backup.sql

# 恢复数据库
psql -h localhost -U postgres -d dathor < dathor_backup.sql

2. 配置文件备份

# 备份配置文件
tar -czf dathor-config-backup.tar.gz .env config.toml docker-compose.yml

故障排除

1. 常见问题

服务无法启动

# 检查日志
docker logs dathor
kubectl logs deployment/dathor

# 检查配置
docker exec dathor env | grep DB_

数据库连接失败

# 测试数据库连接
docker exec dathor psql -h $DB_HOST -U $DB_USER -d $DB_NAME -c "SELECT 1;"

内存不足

# 检查内存使用
docker stats dathor
kubectl top pods

2. 性能调优

数据库优化

-- 创建索引
CREATE INDEX idx_requests_created_at ON requests(created_at);
CREATE INDEX idx_users_email ON users(email);

-- 分析查询性能
EXPLAIN ANALYZE SELECT * FROM requests WHERE created_at > NOW() - INTERVAL '1 day';

缓存优化

# 调整缓存配置
MEMORY_CACHE_MAX_SIZE=200000
MEMORY_CACHE_TTL=900
HYBRID_L1_TTL=120
HYBRID_L2_TTL=600

升级指南

1. 滚动升级

# Kubernetes 滚动升级
kubectl set image deployment/dathor dathor=dathor:v1.0.38
kubectl rollout status deployment/dathor

2. 蓝绿部署

# 创建新版本服务
kubectl apply -f dathor-v2-deployment.yaml

# 切换流量
kubectl patch service dathor-service -p '{"spec":{"selector":{"version":"v2"}}}'

下一步