11. 交付与运维
11.1 部署方案
部署架构
智能物流解决方案采用容器化部署,基于Kubernetes集群:
部署拓扑
容器化部署
Docker镜像构建
1. 应用镜像构建
# Dockerfile
FROM python:3.11-slim
WORKDIR /app
# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 设置环境变量
ENV PYTHONUNBUFFERED=1
# 启动应用
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
2. 镜像构建命令
docker build -t logistics-api:latest .
docker tag logistics-api:latest registry.example.com/logistics-api:v1.0.0
docker push registry.example.com/logistics-api:v1.0.0
Kubernetes部署
1. Deployment配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: logistics-api
namespace: logistics
spec:
replicas: 3
selector:
matchLabels:
app: logistics-api
template:
metadata:
labels:
app: logistics-api
spec:
containers:
- name: api
image: registry.example.com/logistics-api:v1.0.0
ports:
- containerPort: 8000
env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: logistics-config
key: db_host
- name: REDIS_HOST
valueFrom:
configMapKeyRef:
name: logistics-config
key: redis_host
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "2000m"
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: logistics-api-service
namespace: logistics
spec:
selector:
app: logistics-api
ports:
- protocol: TCP
port: 8000
targetPort: 8000
type: LoadBalancer
2. ConfigMap配置
apiVersion: v1
kind: ConfigMap
metadata:
name: logistics-config
namespace: logistics
data:
db_host: "mysql-service"
db_port: "3306"
db_name: "logistics"
redis_host: "redis-service"
redis_port: "6379"
milvus_host: "milvus-service"
milvus_port: "19530"
3. Secret配置
apiVersion: v1
kind: Secret
metadata:
name: logistics-secret
namespace: logistics
type: Opaque
data:
db_password: <base64-encoded-password>
api_key: <base64-encoded-api-key>
数据库部署
MySQL部署
1. MySQL主从部署
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql-master
namespace: logistics
spec:
serviceName: mysql-master
replicas: 1
selector:
matchLabels:
app: mysql-master
template:
metadata:
labels:
app: mysql-master
spec:
containers:
- name: mysql
image: mysql:8.0
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: root-password
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 100Gi
Redis部署
1. Redis集群部署
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
namespace: logistics
spec:
serviceName: redis
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:7-alpine
ports:
- containerPort: 6379
volumeMounts:
- name: redis-data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 50Gi