# CMII Live Services - Merged 部署文档

## 概述

- **Media Suite**: WVP + ZLM + ZLM-OSS 三个容器合并部署在一个 Pod 中
- **网络模式**: HostNetwork (直接使用宿主机网络)
- **共享存储**: ZLM 和 ZLM-OSS 共享 HLS 数据卷
- **其他服务**: Live Operator、Live Proxy、Live Helper 独立部署 使用 NodePort 暴露

## 目录结构

```
merge/
├── Chart.yaml                      # Helm Chart 元数据
├── values.yaml                     # 配置文件
├── deploy.sh                       # 一键部署脚本
└── templates/
    ├── media-suite-deployment.yaml # Media Suite (WVP+ZLM+ZLM-OSS)
    ├── live-op-deployment.yaml     # Live Operator
    ├── live-proxy-deployment.yaml  # Live Proxy
    ├── live-helper-deployment.yaml # Live Helper
    ├── wvp-configmap.yaml          # WVP 配置
    ├── zlm-configmap.yaml          # ZLM 配置
    ├── zlm-oss-configmap.yaml      # ZLM-OSS 配置
    ├── live-op-configmap.yaml      # Live Operator 配置
    ├── live-proxy-configmap.yaml   # Live Proxy 配置
    ├── live-helper-configmap.yaml  # Live Helper 配置
    ├── pvc.yaml                    # 持久化存储
    ├── harborsecret.yaml           # 镜像拉取密钥
    └── NOTES.txt                   # 部署提示
```

## 当前服务前置

- Kubernetes 集群 (1.30.14)
- Helm (3.20.2)
- kubectl
- NFS StorageClass (用于 HLS 数据共享存储)
- 外部服务: MySQL、Redis、MinIO、RabbitMQ

## 快速开始

### 1. 修改配置

编辑 `values.yaml` 文件,根据实际情况修改:

```yaml
# 镜像配置
images:
  zlm:
    repository: your-registry/zlm
    tag: v2.7.5
  wvp:
    repository: your-registry/wvp
    tag: v2.7.4
  # ... 其他镜像配置

# 外部依赖配置
external:
  database:
    host: "your-mysql-host"
    port: "3306"
    username: "root"
    password: "your-password"
  redis:
    host: "your-redis-host"
    port: "6379"
    password: "your-password"
  minio:
    endpoint: "http://your-minio-host:9000"
    accessKey: "your-access-key"
    secretKey: "your-secret-key"
  rabbitmq:
    host: "your-rabbitmq-host"
    port: "5672"
    username: "admin"
    password: "your-password"

# 持久化存储
persistence:
  zlm:
    hls:
      storageClass: "your-nfs-storage-class"
```

### 2. 配置 Harbor 镜像密钥 (可选)

如果使用私有镜像仓库,需要配置镜像拉取密钥:

```bash
# 生成 Docker Config JSON 的 Base64 编码
cat ~/.docker/config.json | base64 -w 0

# 将输出粘贴到 values.yaml 中
images:
  dockerConfigJson: "eyJhdXRocyI6..."
```

### 3. 执行部署

```bash
# 赋予执行权限
chmod +x deploy.sh

# 执行部署
./deploy.sh
```

部署脚本会自动:

- 检查前置条件
- 验证配置文件
- 创建命名空间
- 安装/升级 Helm Release
- 等待 Pod 就绪
- 显示服务状态和访问地址

### 4. 验证部署

```bash
# 查看 Pod 状态
kubectl get pods -n uavcloud-live-test

# 查看服务状态
kubectl get svc -n uavcloud-live-test

# 查看 Media Suite 日志
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c zlm
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c wvp
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c zlm-oss
```

```text
下面的内容为运维内容，按需查看即可 =================================================================================
```

## 服务访问

### Media Suite (HostNetwork 模式)

使用宿主机 IP 直接访问:

| 服务         | 协议     | 端口   | 示例                      |
|------------|--------|------|-------------------------|
| WVP HTTP   | HTTP   | 7082 | http://<NODE_IP>:7082   |
| WVP SIP    | UDP    | 7060 | <NODE_IP>:7060          |
| ZLM HTTP   | HTTP   | 7088 | http://<NODE_IP>:7088   |
| ZLM HTTPS  | HTTPS  | 7089 | https://<NODE_IP>:7089  |
| ZLM RTMP   | RTMP   | 7935 | rtmp://<NODE_IP>:7935   |
| ZLM RTSP   | RTSP   | 7554 | rtsp://<NODE_IP>:7554   |
| ZLM WebRTC | WebRTC | 7090 | webrtc://<NODE_IP>:7090 |
| ZLM SRT    | SRT    | 7556 | srt://<NODE_IP>:7556    |
| ZLM-OSS    | HTTP   | 7084 | http://<NODE_IP>:7084   |

### 其他服务 (NodePort 模式)

| 服务            | 端口    | 示例                     |
|---------------|-------|------------------------|
| Live Operator | 37086 | http://<NODE_IP>:37086 |
| Live Proxy    | 37081 | http://<NODE_IP>:37081 |
| Live Helper   | 37080 | http://<NODE_IP>:37080 |

### 容器间通信

由于使用 HostNetwork 和同 Pod 部署,容器间通过 `127.0.0.1` 通信:

- WVP → ZLM: `http://127.0.0.1:7088`
- ZLM → WVP Hooks: `http://127.0.0.1:7082`
- ZLM → ZLM-OSS Hooks: `http://127.0.0.1:7084`

### 共享存储

ZLM 和 ZLM-OSS 挂载同一个 PVC:

- ZLM: `/home/koisi/zlm/www/zlm/hls`
- ZLM-OSS: `/cmii/share/hls`

## 运维操作

### 查看日志

```bash
# Media Suite - WVP
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c wvp

# Media Suite - ZLM
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c zlm

# Media Suite - ZLM-OSS
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c zlm-oss

# Live Operator
kubectl logs -f deployment/helm-live-live-op -n uavcloud-live-test
```

### 进入容器

```bash
# 进入 ZLM 容器
kubectl exec -it deployment/helm-live-media-suite -n uavcloud-live-test -c zlm -- bash

# 进入 WVP 容器
kubectl exec -it deployment/helm-live-media-suite -n uavcloud-live-test -c wvp -- bash
```

### 升级服务

```bash
# 修改 values.yaml 后执行升级
helm upgrade helm-live ./merge -n uavcloud-live-test -f values.yaml

# 或使用部署脚本
bash deploy.sh
```

### 回滚

```bash
# 查看历史版本
helm history helm-live -n uavcloud-live-test

# 回滚到指定版本
helm rollback helm-live <REVISION> -n uavcloud-live-test
```

### 卸载

```bash
helm uninstall helm-live -n uavcloud-live-test
```
