579 lines
11 KiB
Markdown
579 lines
11 KiB
Markdown
|
|
# AIEC-RAG 部署指南
|
|||
|
|
|
|||
|
|
## 目录
|
|||
|
|
|
|||
|
|
1. [部署架构](#部署架构)
|
|||
|
|
2. [单机部署](#单机部署)
|
|||
|
|
3. [Docker部署](#docker部署)
|
|||
|
|
4. [生产环境部署](#生产环境部署)
|
|||
|
|
5. [性能调优](#性能调优)
|
|||
|
|
6. [监控配置](#监控配置)
|
|||
|
|
7. [备份恢复](#备份恢复)
|
|||
|
|
|
|||
|
|
## 部署架构
|
|||
|
|
|
|||
|
|
### 推荐架构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
[负载均衡器]
|
|||
|
|
|
|
|||
|
|
┌────────────┼────────────┐
|
|||
|
|
↓ ↓ ↓
|
|||
|
|
[AIEC-RAG-1] [AIEC-RAG-2] [AIEC-RAG-3]
|
|||
|
|
↓ ↓ ↓
|
|||
|
|
└────────────┼────────────┘
|
|||
|
|
↓
|
|||
|
|
[Elasticsearch集群]
|
|||
|
|
↓
|
|||
|
|
[向量数据库]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 最小配置要求
|
|||
|
|
|
|||
|
|
| 组件 | CPU | 内存 | 存储 | 说明 |
|
|||
|
|
|-----|-----|------|------|------|
|
|||
|
|
| API服务 | 4核 | 8GB | 50GB | 单实例最小配置 |
|
|||
|
|
| Elasticsearch | 4核 | 16GB | 200GB | 推荐使用SSD |
|
|||
|
|
| 整体系统 | 8核 | 32GB | 500GB | 生产环境推荐 |
|
|||
|
|
|
|||
|
|
## 单机部署
|
|||
|
|
|
|||
|
|
### 1. 系统准备
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Ubuntu/Debian
|
|||
|
|
sudo apt update
|
|||
|
|
sudo apt install -y python3.8 python3-pip git curl wget
|
|||
|
|
|
|||
|
|
# CentOS/RHEL
|
|||
|
|
sudo yum update -y
|
|||
|
|
sudo yum install -y python38 python38-pip git curl wget
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 安装Elasticsearch
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 下载并安装Elasticsearch 8.x
|
|||
|
|
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.0-linux-x86_64.tar.gz
|
|||
|
|
tar -xzf elasticsearch-8.11.0-linux-x86_64.tar.gz
|
|||
|
|
cd elasticsearch-8.11.0
|
|||
|
|
|
|||
|
|
# 配置Elasticsearch
|
|||
|
|
cat >> config/elasticsearch.yml << EOF
|
|||
|
|
network.host: 0.0.0.0
|
|||
|
|
discovery.type: single-node
|
|||
|
|
xpack.security.enabled: true
|
|||
|
|
xpack.security.authc.api_key.enabled: true
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
# 启动Elasticsearch
|
|||
|
|
./bin/elasticsearch -d
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 部署AIEC-RAG
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 克隆项目
|
|||
|
|
git clone <repository_url>
|
|||
|
|
cd AIEC-RAG
|
|||
|
|
|
|||
|
|
# 创建虚拟环境
|
|||
|
|
python3 -m venv venv
|
|||
|
|
source venv/bin/activate
|
|||
|
|
|
|||
|
|
# 安装依赖
|
|||
|
|
pip install -r requirements.txt
|
|||
|
|
|
|||
|
|
# 配置环境变量
|
|||
|
|
cp .env.example .env
|
|||
|
|
# 编辑.env文件,填入实际配置
|
|||
|
|
|
|||
|
|
# 启动服务
|
|||
|
|
python rag_api_server_production.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 设置系统服务
|
|||
|
|
|
|||
|
|
创建 `/etc/systemd/system/aiec-rag.service`:
|
|||
|
|
|
|||
|
|
```ini
|
|||
|
|
[Unit]
|
|||
|
|
Description=AIEC-RAG Service
|
|||
|
|
After=network.target elasticsearch.service
|
|||
|
|
|
|||
|
|
[Service]
|
|||
|
|
Type=simple
|
|||
|
|
User=aiec
|
|||
|
|
WorkingDirectory=/opt/AIEC-RAG
|
|||
|
|
Environment="PATH=/opt/AIEC-RAG/venv/bin"
|
|||
|
|
ExecStart=/opt/AIEC-RAG/venv/bin/python /opt/AIEC-RAG/rag_api_server_production.py
|
|||
|
|
Restart=always
|
|||
|
|
RestartSec=10
|
|||
|
|
|
|||
|
|
[Install]
|
|||
|
|
WantedBy=multi-user.target
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
启用服务:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
sudo systemctl daemon-reload
|
|||
|
|
sudo systemctl enable aiec-rag
|
|||
|
|
sudo systemctl start aiec-rag
|
|||
|
|
sudo systemctl status aiec-rag
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Docker部署
|
|||
|
|
|
|||
|
|
### 1. 使用预构建镜像
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 拉取镜像(如果有私有仓库)
|
|||
|
|
docker pull your-registry/aiec-rag:latest
|
|||
|
|
|
|||
|
|
# 或构建本地镜像
|
|||
|
|
docker build -t aiec-rag:latest .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. Docker Compose部署
|
|||
|
|
|
|||
|
|
创建 `docker-compose.yml`:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
version: '3.8'
|
|||
|
|
|
|||
|
|
services:
|
|||
|
|
elasticsearch:
|
|||
|
|
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
|
|||
|
|
container_name: aiec-elasticsearch
|
|||
|
|
environment:
|
|||
|
|
- discovery.type=single-node
|
|||
|
|
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
|
|||
|
|
- xpack.security.enabled=true
|
|||
|
|
- ELASTIC_PASSWORD=your_password
|
|||
|
|
volumes:
|
|||
|
|
- es_data:/usr/share/elasticsearch/data
|
|||
|
|
ports:
|
|||
|
|
- "9200:9200"
|
|||
|
|
networks:
|
|||
|
|
- aiec_network
|
|||
|
|
healthcheck:
|
|||
|
|
test: ["CMD", "curl", "-f", "http://localhost:9200"]
|
|||
|
|
interval: 30s
|
|||
|
|
timeout: 10s
|
|||
|
|
retries: 5
|
|||
|
|
|
|||
|
|
aiec-rag:
|
|||
|
|
build: .
|
|||
|
|
container_name: aiec-rag
|
|||
|
|
depends_on:
|
|||
|
|
elasticsearch:
|
|||
|
|
condition: service_healthy
|
|||
|
|
environment:
|
|||
|
|
- ELASTICSEARCH_HOST=http://elasticsearch:9200
|
|||
|
|
- ELASTICSEARCH_USERNAME=elastic
|
|||
|
|
- ELASTICSEARCH_PASSWORD=your_password
|
|||
|
|
env_file:
|
|||
|
|
- .env
|
|||
|
|
ports:
|
|||
|
|
- "8100:8100"
|
|||
|
|
volumes:
|
|||
|
|
- ./rag_config_production.yaml:/app/rag_config_production.yaml
|
|||
|
|
- ./api_outputs:/app/api_outputs
|
|||
|
|
networks:
|
|||
|
|
- aiec_network
|
|||
|
|
restart: unless-stopped
|
|||
|
|
|
|||
|
|
volumes:
|
|||
|
|
es_data:
|
|||
|
|
driver: local
|
|||
|
|
|
|||
|
|
networks:
|
|||
|
|
aiec_network:
|
|||
|
|
driver: bridge
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
启动服务:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
docker-compose up -d
|
|||
|
|
docker-compose logs -f
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. Kubernetes部署
|
|||
|
|
|
|||
|
|
创建 `k8s-deployment.yaml`:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
apiVersion: apps/v1
|
|||
|
|
kind: Deployment
|
|||
|
|
metadata:
|
|||
|
|
name: aiec-rag
|
|||
|
|
labels:
|
|||
|
|
app: aiec-rag
|
|||
|
|
spec:
|
|||
|
|
replicas: 3
|
|||
|
|
selector:
|
|||
|
|
matchLabels:
|
|||
|
|
app: aiec-rag
|
|||
|
|
template:
|
|||
|
|
metadata:
|
|||
|
|
labels:
|
|||
|
|
app: aiec-rag
|
|||
|
|
spec:
|
|||
|
|
containers:
|
|||
|
|
- name: aiec-rag
|
|||
|
|
image: your-registry/aiec-rag:latest
|
|||
|
|
ports:
|
|||
|
|
- containerPort: 8100
|
|||
|
|
env:
|
|||
|
|
- name: ELASTICSEARCH_HOST
|
|||
|
|
value: "http://elasticsearch-service:9200"
|
|||
|
|
envFrom:
|
|||
|
|
- secretRef:
|
|||
|
|
name: aiec-secrets
|
|||
|
|
resources:
|
|||
|
|
requests:
|
|||
|
|
memory: "4Gi"
|
|||
|
|
cpu: "2"
|
|||
|
|
limits:
|
|||
|
|
memory: "8Gi"
|
|||
|
|
cpu: "4"
|
|||
|
|
livenessProbe:
|
|||
|
|
httpGet:
|
|||
|
|
path: /health
|
|||
|
|
port: 8100
|
|||
|
|
initialDelaySeconds: 30
|
|||
|
|
periodSeconds: 10
|
|||
|
|
readinessProbe:
|
|||
|
|
httpGet:
|
|||
|
|
path: /health
|
|||
|
|
port: 8100
|
|||
|
|
initialDelaySeconds: 5
|
|||
|
|
periodSeconds: 5
|
|||
|
|
---
|
|||
|
|
apiVersion: v1
|
|||
|
|
kind: Service
|
|||
|
|
metadata:
|
|||
|
|
name: aiec-rag-service
|
|||
|
|
spec:
|
|||
|
|
selector:
|
|||
|
|
app: aiec-rag
|
|||
|
|
ports:
|
|||
|
|
- protocol: TCP
|
|||
|
|
port: 80
|
|||
|
|
targetPort: 8100
|
|||
|
|
type: LoadBalancer
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
部署到Kubernetes:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 创建密钥
|
|||
|
|
kubectl create secret generic aiec-secrets --from-env-file=.env
|
|||
|
|
|
|||
|
|
# 部署应用
|
|||
|
|
kubectl apply -f k8s-deployment.yaml
|
|||
|
|
|
|||
|
|
# 查看状态
|
|||
|
|
kubectl get pods
|
|||
|
|
kubectl get services
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 生产环境部署
|
|||
|
|
|
|||
|
|
### 1. 负载均衡配置
|
|||
|
|
|
|||
|
|
使用Nginx作为负载均衡器:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
upstream aiec_backend {
|
|||
|
|
least_conn;
|
|||
|
|
server 10.0.1.10:8100 weight=1 max_fails=3 fail_timeout=30s;
|
|||
|
|
server 10.0.1.11:8100 weight=1 max_fails=3 fail_timeout=30s;
|
|||
|
|
server 10.0.1.12:8100 weight=1 max_fails=3 fail_timeout=30s;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server {
|
|||
|
|
listen 80;
|
|||
|
|
server_name api.aiec-rag.com;
|
|||
|
|
|
|||
|
|
location / {
|
|||
|
|
proxy_pass http://aiec_backend;
|
|||
|
|
proxy_http_version 1.1;
|
|||
|
|
proxy_set_header Upgrade $http_upgrade;
|
|||
|
|
proxy_set_header Connection 'upgrade';
|
|||
|
|
proxy_set_header Host $host;
|
|||
|
|
proxy_cache_bypass $http_upgrade;
|
|||
|
|
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;
|
|||
|
|
|
|||
|
|
# 超时设置
|
|||
|
|
proxy_connect_timeout 60s;
|
|||
|
|
proxy_send_timeout 120s;
|
|||
|
|
proxy_read_timeout 120s;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 健康检查端点
|
|||
|
|
location /health {
|
|||
|
|
proxy_pass http://aiec_backend/health;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. SSL/TLS配置
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
server {
|
|||
|
|
listen 443 ssl http2;
|
|||
|
|
server_name api.aiec-rag.com;
|
|||
|
|
|
|||
|
|
ssl_certificate /etc/nginx/ssl/aiec-rag.crt;
|
|||
|
|
ssl_certificate_key /etc/nginx/ssl/aiec-rag.key;
|
|||
|
|
|
|||
|
|
ssl_protocols TLSv1.2 TLSv1.3;
|
|||
|
|
ssl_ciphers HIGH:!aNULL:!MD5;
|
|||
|
|
ssl_prefer_server_ciphers on;
|
|||
|
|
|
|||
|
|
# ... 其他配置同上
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 数据库优化
|
|||
|
|
|
|||
|
|
Elasticsearch优化配置:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# elasticsearch.yml
|
|||
|
|
cluster.name: aiec-rag-cluster
|
|||
|
|
node.name: node-1
|
|||
|
|
|
|||
|
|
# 内存设置
|
|||
|
|
bootstrap.memory_lock: true
|
|||
|
|
|
|||
|
|
# 线程池
|
|||
|
|
thread_pool:
|
|||
|
|
write:
|
|||
|
|
size: 8
|
|||
|
|
queue_size: 1000
|
|||
|
|
search:
|
|||
|
|
size: 16
|
|||
|
|
queue_size: 1000
|
|||
|
|
|
|||
|
|
# 索引设置
|
|||
|
|
index:
|
|||
|
|
number_of_shards: 3
|
|||
|
|
number_of_replicas: 1
|
|||
|
|
refresh_interval: 30s
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 性能调优
|
|||
|
|
|
|||
|
|
### 1. Python应用优化
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 使用Gunicorn作为WSGI服务器(Linux)
|
|||
|
|
gunicorn -w 4 -k uvicorn.workers.UvicornWorker \
|
|||
|
|
--bind 0.0.0.0:8100 \
|
|||
|
|
--timeout 120 \
|
|||
|
|
--keep-alive 5 \
|
|||
|
|
--max-requests 1000 \
|
|||
|
|
--max-requests-jitter 50 \
|
|||
|
|
rag_api_server_production:app
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 系统参数优化
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# /etc/sysctl.conf
|
|||
|
|
net.ipv4.tcp_fin_timeout = 30
|
|||
|
|
net.ipv4.tcp_tw_reuse = 1
|
|||
|
|
net.ipv4.tcp_tw_recycle = 1
|
|||
|
|
net.ipv4.tcp_max_syn_backlog = 8192
|
|||
|
|
net.ipv4.tcp_max_tw_buckets = 10000
|
|||
|
|
net.core.somaxconn = 65535
|
|||
|
|
net.core.netdev_max_backlog = 65535
|
|||
|
|
|
|||
|
|
# 应用配置
|
|||
|
|
sudo sysctl -p
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 缓存策略
|
|||
|
|
|
|||
|
|
配置Redis缓存:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 在代码中添加缓存支持
|
|||
|
|
import redis
|
|||
|
|
from functools import lru_cache
|
|||
|
|
|
|||
|
|
redis_client = redis.Redis(
|
|||
|
|
host='localhost',
|
|||
|
|
port=6379,
|
|||
|
|
decode_responses=True,
|
|||
|
|
max_connections=50
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
@lru_cache(maxsize=128)
|
|||
|
|
def get_cached_embedding(text: str):
|
|||
|
|
# 缓存嵌入向量
|
|||
|
|
pass
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 监控配置
|
|||
|
|
|
|||
|
|
### 1. Prometheus监控
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# prometheus.yml
|
|||
|
|
scrape_configs:
|
|||
|
|
- job_name: 'aiec-rag'
|
|||
|
|
static_configs:
|
|||
|
|
- targets: ['localhost:8100']
|
|||
|
|
metrics_path: '/metrics'
|
|||
|
|
scrape_interval: 15s
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 日志管理
|
|||
|
|
|
|||
|
|
配置日志轮转:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# /etc/logrotate.d/aiec-rag
|
|||
|
|
/opt/AIEC-RAG/logs/*.log {
|
|||
|
|
daily
|
|||
|
|
rotate 30
|
|||
|
|
compress
|
|||
|
|
delaycompress
|
|||
|
|
missingok
|
|||
|
|
notifempty
|
|||
|
|
create 644 aiec aiec
|
|||
|
|
sharedscripts
|
|||
|
|
postrotate
|
|||
|
|
systemctl reload aiec-rag
|
|||
|
|
endscript
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 告警配置
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# alerting_rules.yml
|
|||
|
|
groups:
|
|||
|
|
- name: aiec_alerts
|
|||
|
|
rules:
|
|||
|
|
- alert: HighResponseTime
|
|||
|
|
expr: http_request_duration_seconds{quantile="0.99"} > 5
|
|||
|
|
for: 5m
|
|||
|
|
labels:
|
|||
|
|
severity: warning
|
|||
|
|
annotations:
|
|||
|
|
summary: "High response time on {{ $labels.instance }}"
|
|||
|
|
|
|||
|
|
- alert: ServiceDown
|
|||
|
|
expr: up{job="aiec-rag"} == 0
|
|||
|
|
for: 1m
|
|||
|
|
labels:
|
|||
|
|
severity: critical
|
|||
|
|
annotations:
|
|||
|
|
summary: "AIEC-RAG service is down"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 备份恢复
|
|||
|
|
|
|||
|
|
### 1. 数据备份
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
#!/bin/bash
|
|||
|
|
# backup.sh
|
|||
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|||
|
|
BACKUP_DIR="/backup/aiec-rag"
|
|||
|
|
|
|||
|
|
# 备份Elasticsearch数据
|
|||
|
|
curl -X PUT "localhost:9200/_snapshot/backup_repo" -H 'Content-Type: application/json' -d'
|
|||
|
|
{
|
|||
|
|
"type": "fs",
|
|||
|
|
"settings": {
|
|||
|
|
"location": "'$BACKUP_DIR'/elasticsearch"
|
|||
|
|
}
|
|||
|
|
}'
|
|||
|
|
|
|||
|
|
curl -X PUT "localhost:9200/_snapshot/backup_repo/snapshot_$DATE?wait_for_completion=true"
|
|||
|
|
|
|||
|
|
# 备份配置文件
|
|||
|
|
tar -czf $BACKUP_DIR/config_$DATE.tar.gz \
|
|||
|
|
/opt/AIEC-RAG/.env \
|
|||
|
|
/opt/AIEC-RAG/rag_config_production.yaml
|
|||
|
|
|
|||
|
|
echo "Backup completed: $DATE"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 恢复流程
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
#!/bin/bash
|
|||
|
|
# restore.sh
|
|||
|
|
SNAPSHOT_NAME=$1
|
|||
|
|
|
|||
|
|
# 恢复Elasticsearch数据
|
|||
|
|
curl -X POST "localhost:9200/_snapshot/backup_repo/$SNAPSHOT_NAME/_restore"
|
|||
|
|
|
|||
|
|
# 恢复配置文件
|
|||
|
|
tar -xzf /backup/aiec-rag/config_latest.tar.gz -C /
|
|||
|
|
|
|||
|
|
# 重启服务
|
|||
|
|
systemctl restart aiec-rag
|
|||
|
|
|
|||
|
|
echo "Restore completed from: $SNAPSHOT_NAME"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 故障处理
|
|||
|
|
|
|||
|
|
### 常见问题处理
|
|||
|
|
|
|||
|
|
1. **服务无响应**
|
|||
|
|
```bash
|
|||
|
|
# 检查服务状态
|
|||
|
|
systemctl status aiec-rag
|
|||
|
|
# 查看日志
|
|||
|
|
journalctl -u aiec-rag -n 100
|
|||
|
|
# 重启服务
|
|||
|
|
systemctl restart aiec-rag
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **Elasticsearch连接失败**
|
|||
|
|
```bash
|
|||
|
|
# 检查ES状态
|
|||
|
|
curl -X GET "localhost:9200/_cluster/health?pretty"
|
|||
|
|
# 检查网络连接
|
|||
|
|
telnet localhost 9200
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **内存溢出**
|
|||
|
|
```bash
|
|||
|
|
# 增加内存限制
|
|||
|
|
export PYTHONUNBUFFERED=1
|
|||
|
|
export OMP_NUM_THREADS=4
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 安全建议
|
|||
|
|
|
|||
|
|
1. **API密钥管理**
|
|||
|
|
- 使用密钥管理服务(如HashiCorp Vault)
|
|||
|
|
- 定期轮换API密钥
|
|||
|
|
- 不要在代码中硬编码密钥
|
|||
|
|
|
|||
|
|
2. **网络安全**
|
|||
|
|
- 使用防火墙限制访问
|
|||
|
|
- 配置SSL/TLS加密
|
|||
|
|
- 实施速率限制
|
|||
|
|
|
|||
|
|
3. **数据安全**
|
|||
|
|
- 加密敏感数据
|
|||
|
|
- 定期备份
|
|||
|
|
- 实施访问控制
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
*更多部署问题,请参考项目Wiki或联系技术支持。*
|