Initial_commit_SecMPS_v2
This commit is contained in:
188
owl_zlmediakit/README.md
Normal file
188
owl_zlmediakit/README.md
Normal file
@@ -0,0 +1,188 @@
|
||||
# GoWVP (Owl) + ZLMediaKit 离线部署包
|
||||
|
||||
> **生成时间**: 2026-04-29
|
||||
> **适用平台**: 飞腾S5000C (ARM64) + 统信UOS20
|
||||
> **部署方式**: Docker Compose 融合部署
|
||||
|
||||
---
|
||||
|
||||
## 📦 文件清单
|
||||
|
||||
### ✅ 已包含文件(可直接使用)
|
||||
|
||||
| 文件/目录 | 说明 |
|
||||
|-----------|------|
|
||||
| `部署手册.md` | 完整的离线部署手册,包含所有步骤和命令 |
|
||||
| `configs/docker-compose.yml` | Docker Compose 融合部署配置 |
|
||||
| `configs/zlm-config.ini` | ZLMediaKit 配置文件(已配置与GoWVP联动) |
|
||||
| `scripts/install-docker.sh` | Docker 离线安装脚本(ARM64) |
|
||||
| `scripts/setup.sh` | 一键部署脚本 |
|
||||
| `scripts/verify.sh` | 部署验证脚本 |
|
||||
| `source-packages/libsrtp-2.5.0.tar.gz` | WebRTC依赖库源码(版本必须严格2.5.0) |
|
||||
|
||||
### ⚠️ 需要手动下载的文件
|
||||
|
||||
由于当前网络环境限制,以下文件需要您在**可联网的笔记本/工作站**上手动下载:
|
||||
|
||||
#### 1. Docker 镜像文件(需通过 Docker 拉取后导出)
|
||||
|
||||
```bash
|
||||
# 创建目录
|
||||
mkdir -p docker-images
|
||||
|
||||
# 拉取 ZLMediaKit 官方镜像
|
||||
docker pull zlmediakit/zlmediakit:master
|
||||
|
||||
# 拉取 GoWVP 官方镜像
|
||||
docker pull gospace/gowvp:latest
|
||||
|
||||
# 导出镜像
|
||||
docker save -o docker-images/zlmediakit-master-arm64.tar zlmediakit/zlmediakit:master
|
||||
docker save -o docker-images/gowvp-latest-arm64.tar gospace/gowvp:latest
|
||||
```
|
||||
|
||||
**镜像说明**:
|
||||
- `zlmediakit-master-arm64.tar`: ZLMediaKit 流媒体服务器镜像,约 300-700MB
|
||||
- `gowvp-latest-arm64.tar`: GoWVP 管理平台镜像,约 200MB
|
||||
|
||||
#### 2. Docker 离线安装包
|
||||
|
||||
```bash
|
||||
# 下载目录: deb-packages/
|
||||
|
||||
# Docker CE ARM64 静态二进制包 (约 70MB)
|
||||
wget https://download.docker.com/linux/static/stable/aarch64/docker-27.5.1.tgz
|
||||
|
||||
# Docker Compose ARM64 二进制 (约 60MB)
|
||||
wget https://github.com/docker/compose/releases/download/v2.29.1/docker-compose-linux-aarch64
|
||||
```
|
||||
|
||||
#### 3. 源码包(备用方案)
|
||||
|
||||
```bash
|
||||
# 下载目录: source-packages/
|
||||
|
||||
# ZLMediaKit 最新源码
|
||||
wget https://github.com/ZLMediaKit/ZLMediaKit/archive/refs/heads/master.zip
|
||||
|
||||
# GoWVP v1.3.0 ARM64 预编译二进制
|
||||
wget https://github.com/gowvp/owl/releases/download/v1.3.0/owl_linux_arm64.tar.gz
|
||||
```
|
||||
|
||||
#### 4. 系统依赖包(根据包管理器类型选择)
|
||||
|
||||
**如果目标系统使用 `yum` (A/E版本 - 龙蜥/欧拉):**
|
||||
|
||||
在另一台联网的同版本 ARM64 机器上执行:
|
||||
|
||||
```bash
|
||||
mkdir -p deb-packages/yum-deps
|
||||
sudo yum install -y yum-utils
|
||||
|
||||
# 下载 Docker 及依赖
|
||||
yumdownloader --resolve --destdir=deb-packages/yum-deps \
|
||||
docker-ce docker-ce-cli containerd.io
|
||||
|
||||
# 下载常用工具
|
||||
yumdownloader --resolve --destdir=deb-packages/yum-deps \
|
||||
wget curl vim net-tools telnet
|
||||
```
|
||||
|
||||
**如果目标系统使用 `apt` (D版本 - Debian):**
|
||||
|
||||
在另一台联网的同版本 ARM64 机器上执行:
|
||||
|
||||
```bash
|
||||
mkdir -p deb-packages/apt-deps
|
||||
sudo apt-get update
|
||||
|
||||
# 下载 Docker
|
||||
apt-get download docker.io
|
||||
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests \
|
||||
--no-conflicts --no-breaks --no-replaces --no-enhances docker.io | grep "^\w")
|
||||
|
||||
# 下载常用工具
|
||||
apt-get download wget curl vim net-tools telnet
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📖 使用步骤
|
||||
|
||||
### 第一步:在联网笔记本上准备(有网络的环境)
|
||||
|
||||
1. 安装 Docker Desktop (Windows/Mac/Linux)
|
||||
2. 执行上述下载命令,获取所有需要的文件
|
||||
3. 将文件放入对应的目录中
|
||||
4. 打包整个文件夹,传输到生产服务器
|
||||
|
||||
```bash
|
||||
# 打包
|
||||
tar czf owl-zlmediakit-offline-package-arm64.tar.gz \
|
||||
docker-images/ deb-packages/ source-packages/ configs/ scripts/ 部署手册.md
|
||||
```
|
||||
|
||||
### 第二步:在生产服务器上部署(离线环境)
|
||||
|
||||
1. 确认系统版本和包管理器类型 (`yum` 或 `apt`)
|
||||
2. 安装 Docker(使用提供的脚本或手动安装)
|
||||
3. 加载 Docker 镜像
|
||||
4. 运行部署脚本
|
||||
5. 验证部署结果
|
||||
|
||||
详细步骤请参考 `部署手册.md` 第五章。
|
||||
|
||||
---
|
||||
|
||||
## 🔧 目录结构说明
|
||||
|
||||
```
|
||||
owl_zlmediakit/
|
||||
├── 部署手册.md # 完整部署手册
|
||||
├── README.md # 本文件
|
||||
├── docker-images/ # Docker镜像文件(需手动下载)
|
||||
│ ├── zlmediakit-master-arm64.tar
|
||||
│ └── gowvp-latest-arm64.tar
|
||||
├── deb-packages/ # 系统依赖包(需手动下载)
|
||||
│ ├── docker-27.5.1.tgz (推荐) / docker-28.5.2.tgz / docker-29.4.1.tgz
|
||||
│ ├── docker-compose-linux-aarch64
|
||||
│ ├── yum-deps/ # yum系统依赖(可选)
|
||||
│ └── apt-deps/ # apt系统依赖(可选)
|
||||
├── source-packages/ # 源码包
|
||||
│ ├── libsrtp-2.5.0.tar.gz # ✅ 已包含
|
||||
│ ├── ZLMediaKit-master.zip # 需手动下载
|
||||
│ └── owl_linux_arm64.tar.gz # 需手动下载
|
||||
├── configs/ # 配置文件
|
||||
│ ├── docker-compose.yml # ✅ 已包含
|
||||
│ └── zlm-config.ini # ✅ 已包含
|
||||
└── scripts/ # 部署脚本
|
||||
├── install-docker.sh # ✅ 已包含
|
||||
├── setup.sh # ✅ 已包含
|
||||
└── verify.sh # ✅ 已包含
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 重要提示
|
||||
|
||||
1. **架构兼容性**: 所有镜像和二进制文件必须选择 **ARM64 (aarch64)** 版本,x86_64 版本无法在飞腾S5000上运行
|
||||
2. **统信UOS版本**: 1070军事版通常基于龙蜥/欧拉,使用 `yum` 包管理器,但请以实际系统为准
|
||||
3. **Docker版本**: 建议 Docker >= 20.10,以支持多架构镜像
|
||||
4. **libsrtp版本**: 如需源码编译 ZLMediaKit 并启用 WebRTC,libsrtp 版本必须严格为 **2.5.0**,其他版本有兼容性问题
|
||||
5. **端口占用**: 确保生产服务器的 80, 443, 15123, 15060, 1935, 554, 8000, 9000, 10000, 20000-20100 端口未被占用
|
||||
|
||||
---
|
||||
|
||||
## 📚 参考链接
|
||||
|
||||
| 资源 | 地址 |
|
||||
|------|------|
|
||||
| ZLMediaKit GitHub | https://github.com/ZLMediaKit/ZLMediaKit |
|
||||
| ZLMediaKit 文档 | https://docs.zlmediakit.com/ |
|
||||
| GoWVP (Owl) GitHub | https://github.com/gowvp/owl |
|
||||
| Docker CE 下载 | https://download.docker.com/linux/static/stable/aarch64/ |
|
||||
| Docker Compose 下载 | https://github.com/docker/compose/releases |
|
||||
|
||||
---
|
||||
|
||||
> 如有问题,请参考 `部署手册.md` 中的常见问题排查章节。
|
||||
45
owl_zlmediakit/configs/docker-compose.yml
Normal file
45
owl_zlmediakit/configs/docker-compose.yml
Normal file
@@ -0,0 +1,45 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# ZLMediaKit 流媒体服务
|
||||
zlmediakit:
|
||||
image: zlmediakit/zlmediakit:master
|
||||
container_name: zlmediakit
|
||||
restart: always
|
||||
privileged: true
|
||||
network_mode: host
|
||||
volumes:
|
||||
- ./data/zlm-config.ini:/opt/media/conf/config.ini:ro
|
||||
- ./data/record:/opt/media/bin/www/record
|
||||
- ./data/log:/opt/media/bin/log
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "100m"
|
||||
max-file: "3"
|
||||
|
||||
# GoWVP (Owl) 管理平台
|
||||
gowvp:
|
||||
image: gospace/gowvp:latest
|
||||
container_name: gowvp
|
||||
restart: always
|
||||
network_mode: host
|
||||
depends_on:
|
||||
- zlmediakit
|
||||
volumes:
|
||||
- ./data/gowvp-configs:/opt/media/bin/configs
|
||||
- ./data/record:/opt/media/bin/www/record
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
# 注意:必须使用服务器实际IP,不能使用127.0.0.1
|
||||
# 原因:GoWVP向外部设备/浏览器返回流媒体播放地址时,需要返回可访问的IP
|
||||
- GOWVP_ZLM_HOST=192.168.3.108
|
||||
- GOWVP_ZLM_PORT=80
|
||||
- GOWVP_ZLM_SECRET=035c73f7-bb6b-4889-a715-d9eb2d1925cc
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "100m"
|
||||
max-file: "3"
|
||||
124
owl_zlmediakit/configs/zlm-config.ini
Normal file
124
owl_zlmediakit/configs/zlm-config.ini
Normal file
@@ -0,0 +1,124 @@
|
||||
; ZLMediaKit 配置文件
|
||||
; 针对 ARM64 + 联网环境优化
|
||||
; 与 GoWVP (Owl) 联动配置
|
||||
;
|
||||
; 重要配置说明:
|
||||
; 1. Hook回调地址(127.0.0.1): ZLMediaKit调用GoWVP的接口,两者在同一台服务器的host网络模式下,
|
||||
; 使用127.0.0.1是正确的(本机内部通信),无需修改。
|
||||
; 2. externIP(192.168.3.108): WebRTC需要设置服务器实际IP,否则外部设备无法访问。
|
||||
; 请根据实际网络环境修改此IP地址。
|
||||
|
||||
[api]
|
||||
apiDebug=1
|
||||
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
|
||||
snapRoot=./www/snap/
|
||||
defaultSnap=./www/logo.png
|
||||
downloadRoot=./www
|
||||
|
||||
[ffmpeg]
|
||||
bin=/usr/bin/ffmpeg
|
||||
cmd=%s -re -i %s -c copy -f flv %s
|
||||
snap=%s -i %s -y -f mjpeg -t 0.001 %s
|
||||
|
||||
[general]
|
||||
enableVhost=0
|
||||
flowThreshold=1024
|
||||
maxStreamWaitMS=15000
|
||||
streamNoneReaderDelayMS=20000
|
||||
resetWhenRePlay=1
|
||||
mergeWriteMS=0
|
||||
mediaServerId=owl-zlm-server-01
|
||||
wait_add_track_ms=3000
|
||||
wait_track_ready_ms=10000
|
||||
|
||||
[hls]
|
||||
fileBufSize=65536
|
||||
segDur=2
|
||||
segNum=3
|
||||
segRetain=5
|
||||
broadcastRecordTs=0
|
||||
fastRegister=0
|
||||
|
||||
[hook]
|
||||
enable=1
|
||||
on_publish=https://127.0.0.1:15123/api/v1/hook/on_publish
|
||||
on_play=https://127.0.0.1:15123/api/v1/hook/on_play
|
||||
on_stream_not_found=https://127.0.0.1:15123/api/v1/hook/on_stream_not_found
|
||||
on_server_started=https://127.0.0.1:15123/api/v1/hook/on_server_started
|
||||
on_server_keepalive=https://127.0.0.1:15123/api/v1/hook/on_server_keepalive
|
||||
on_send_rtp_stopped=https://127.0.0.1:15123/api/v1/hook/on_send_rtp_stopped
|
||||
on_rtp_server_timeout=https://127.0.0.1:15123/api/v1/hook/on_rtp_server_timeout
|
||||
admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
|
||||
timeoutSec=20
|
||||
|
||||
[http]
|
||||
charSet=utf-8
|
||||
keepAliveSecond=30
|
||||
maxReqSize=40960
|
||||
notFound=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>ZLMediaKit-4.0</center></body></html>
|
||||
port=80
|
||||
rootPath=./www
|
||||
sendBufSize=65536
|
||||
sslport=443
|
||||
virtualPath=
|
||||
|
||||
[multicast]
|
||||
addrMax=239.255.255.255
|
||||
addrMin=239.0.0.0
|
||||
udpTTL=64
|
||||
|
||||
[record]
|
||||
appName=record
|
||||
fastStart=0
|
||||
fileBufSize=65536
|
||||
fileSecond=3600
|
||||
sampleMS=500
|
||||
|
||||
[rtmp]
|
||||
directProxy=1
|
||||
enhanced=0
|
||||
handshakeSecond=15
|
||||
keepAliveSecond=15
|
||||
port=1935
|
||||
|
||||
[rtp]
|
||||
audioMtuSize=600
|
||||
h264_stap_a=1
|
||||
opus_rtp_ext=0
|
||||
rtpMaxSize=10
|
||||
videoMtuSize=1400
|
||||
|
||||
[rtp_proxy]
|
||||
dumpDir=
|
||||
port=10000
|
||||
port_range=30000-30500
|
||||
|
||||
[rtsp]
|
||||
authBasic=0
|
||||
directProxy=1
|
||||
handshakeSecond=15
|
||||
keepAliveSecond=15
|
||||
port=554
|
||||
sslport=332
|
||||
|
||||
[srt]
|
||||
latencyMul=4
|
||||
pktBufSize=8192
|
||||
port=9000
|
||||
timeoutSec=5
|
||||
|
||||
[rtc]
|
||||
# WebRTC外部IP,必须设置为服务器实际IP,否则外部无法播放
|
||||
externIP=192.168.3.108
|
||||
port=8000
|
||||
tcpPort=8000
|
||||
rembBitRate=0
|
||||
|
||||
[shell]
|
||||
maxReqSize=1024
|
||||
port=9000
|
||||
|
||||
[cluster]
|
||||
origin_url=
|
||||
retry_count=3
|
||||
timeout_sec=15
|
||||
107
owl_zlmediakit/scripts/install-docker.sh
Normal file
107
owl_zlmediakit/scripts/install-docker.sh
Normal file
@@ -0,0 +1,107 @@
|
||||
#!/bin/bash
|
||||
# Docker 离线安装脚本(ARM64)
|
||||
# 适用于统信UOS20 / 龙蜥 / 欧拉 / Debian ARM64
|
||||
|
||||
set -e
|
||||
|
||||
DOCKER_VERSION="27.5.1"
|
||||
COMPOSE_VERSION="2.29.1"
|
||||
INSTALL_DIR="/usr/bin"
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN} Docker CE 离线安装脚本 (ARM64) ${NC}"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
|
||||
# 检查架构
|
||||
ARCH=$(uname -m)
|
||||
if [ "$ARCH" != "aarch64" ]; then
|
||||
echo -e "${RED}错误: 当前架构为 $ARCH,本脚本仅支持 aarch64 (ARM64)${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查root权限
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo -e "${RED}错误: 请使用 root 用户运行本脚本${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查安装包是否存在
|
||||
if [ ! -f "docker-${DOCKER_VERSION}.tgz" ]; then
|
||||
echo -e "${RED}错误: 未找到 docker-${DOCKER_VERSION}.tgz${NC}"
|
||||
echo "请确保安装包位于当前目录"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}[1/6] 正在解压 Docker 安装包...${NC}"
|
||||
tar -xzf "docker-${DOCKER_VERSION}.tgz"
|
||||
|
||||
echo -e "${YELLOW}[2/6] 正在复制可执行文件...${NC}"
|
||||
cp -p docker/* "${INSTALL_DIR}/"
|
||||
|
||||
# 安装 docker-compose
|
||||
if [ -f "docker-compose-linux-aarch64" ]; then
|
||||
echo -e "${YELLOW}[3/6] 正在安装 Docker Compose...${NC}"
|
||||
cp -p docker-compose-linux-aarch64 "${INSTALL_DIR}/docker-compose"
|
||||
chmod +x "${INSTALL_DIR}/docker-compose"
|
||||
else
|
||||
echo -e "${YELLOW}[3/6] 跳过 Docker Compose (未找到安装包)${NC}"
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}[4/6] 正在创建 systemd 服务...${NC}"
|
||||
cat > /etc/systemd/system/docker.service << 'EOF'
|
||||
[Unit]
|
||||
Description=Docker Application Container Engine
|
||||
Documentation=https://docs.docker.com
|
||||
After=network-online.target firewalld.service
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
ExecStart=/usr/bin/dockerd
|
||||
ExecReload=/bin/kill -s HUP $MAINPID
|
||||
LimitNOFILE=infinity
|
||||
LimitNPROC=infinity
|
||||
TimeoutStartSec=0
|
||||
Delegate=yes
|
||||
KillMode=process
|
||||
Restart=on-failure
|
||||
StartLimitBurst=3
|
||||
StartLimitInterval=60s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
echo -e "${YELLOW}[5/6] 正在启动 Docker 服务...${NC}"
|
||||
systemctl daemon-reload
|
||||
systemctl start docker
|
||||
systemctl enable docker
|
||||
|
||||
# 创建 docker 组
|
||||
if ! getent group docker > /dev/null 2>&1; then
|
||||
groupadd docker
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}[6/6] 验证安装...${NC}"
|
||||
if docker --version; then
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN} Docker 安装成功! ${NC}"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
docker --version
|
||||
docker-compose --version 2>/dev/null || true
|
||||
else
|
||||
echo -e "${RED}Docker 安装可能失败,请检查日志${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 清理临时文件
|
||||
rm -rf docker/
|
||||
|
||||
echo -e "${GREEN}安装完成!${NC}"
|
||||
echo -e "${YELLOW}提示: 如需非root用户使用docker,请执行: usermod -aG docker <用户名>${NC}"
|
||||
101
owl_zlmediakit/scripts/setup.sh
Normal file
101
owl_zlmediakit/scripts/setup.sh
Normal file
@@ -0,0 +1,101 @@
|
||||
#!/bin/bash
|
||||
# GoWVP + ZLMediaKit 一键部署脚本
|
||||
# 适用于统信UOS20 ARM64 离线环境
|
||||
|
||||
set -e
|
||||
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
INSTALL_DIR="/opt/owl-zlmediakit"
|
||||
DATA_DIR="${INSTALL_DIR}/data"
|
||||
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN} GoWVP + ZLMediaKit 部署脚本 ${NC}"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
|
||||
# 检查root权限
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo -e "${RED}错误: 请使用 root 用户运行${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查架构
|
||||
ARCH=$(uname -m)
|
||||
if [ "$ARCH" != "aarch64" ]; then
|
||||
echo -e "${RED}错误: 当前架构为 $ARCH,本脚本仅支持 aarch64${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 创建目录
|
||||
echo -e "${YELLOW}[1/6] 创建数据目录...${NC}"
|
||||
mkdir -p "${DATA_DIR}"/record
|
||||
mkdir -p "${DATA_DIR}"/log
|
||||
mkdir -p "${DATA_DIR}"/gowvp-configs
|
||||
mkdir -p "${DATA_DIR}"/snap
|
||||
|
||||
# 复制配置文件
|
||||
echo -e "${YELLOW}[2/6] 复制配置文件...${NC}"
|
||||
cp configs/zlm-config.ini "${DATA_DIR}/"
|
||||
cp configs/docker-compose.yml "${INSTALL_DIR}/"
|
||||
|
||||
# 加载Docker镜像
|
||||
echo -e "${YELLOW}[3/6] 加载 Docker 镜像...${NC}"
|
||||
if [ -f "docker-images/zlmediakit-master-arm64.tar" ]; then
|
||||
docker load -i docker-images/zlmediakit-master-arm64.tar
|
||||
echo -e "${GREEN} ✓ ZLMediaKit 镜像已加载${NC}"
|
||||
else
|
||||
echo -e "${RED} ✗ 未找到 ZLMediaKit 镜像文件${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f "docker-images/gowvp-latest-arm64.tar" ]; then
|
||||
docker load -i docker-images/gowvp-latest-arm64.tar
|
||||
echo -e "${GREEN} ✓ GoWVP 镜像已加载${NC}"
|
||||
else
|
||||
echo -e "${RED} ✗ 未找到 GoWVP 镜像文件${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 启动服务
|
||||
echo -e "${YELLOW}[4/6] 启动服务...${NC}"
|
||||
cd "${INSTALL_DIR}"
|
||||
docker-compose up -d
|
||||
|
||||
# 等待服务启动
|
||||
echo -e "${YELLOW}[5/6] 等待服务启动 (约30秒)...${NC}"
|
||||
sleep 10
|
||||
echo -e "${YELLOW} 继续等待...${NC}"
|
||||
sleep 10
|
||||
echo -e "${YELLOW} 即将完成...${NC}"
|
||||
sleep 10
|
||||
|
||||
# 验证服务
|
||||
echo -e "${YELLOW}[6/6] 验证服务状态...${NC}"
|
||||
if docker ps | grep -q zlmediakit; then
|
||||
echo -e "${GREEN} ✓ ZLMediaKit 容器正在运行${NC}"
|
||||
else
|
||||
echo -e "${RED} ✗ ZLMediaKit 容器未运行${NC}"
|
||||
fi
|
||||
|
||||
if docker ps | grep -q gowvp; then
|
||||
echo -e "${GREEN} ✓ GoWVP 容器正在运行${NC}"
|
||||
else
|
||||
echo -e "${RED} ✗ GoWVP 容器未运行${NC}"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN} 部署完成! ${NC}"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}访问地址:${NC}"
|
||||
echo -e " ZLMediaKit: http://<服务器IP>"
|
||||
echo -e " GoWVP管理界面: http://<服务器IP>:15123"
|
||||
echo ""
|
||||
echo -e "${YELLOW}常用命令:${NC}"
|
||||
echo -e " 查看日志: docker logs -f zlmediakit"
|
||||
echo -e " 查看日志: docker logs -f gowvp"
|
||||
echo -e " 停止服务: docker-compose down"
|
||||
echo -e " 重启服务: docker-compose restart"
|
||||
104
owl_zlmediakit/scripts/verify.sh
Normal file
104
owl_zlmediakit/scripts/verify.sh
Normal file
@@ -0,0 +1,104 @@
|
||||
#!/bin/bash
|
||||
# 部署验证脚本
|
||||
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
SERVER_IP=$(hostname -I | awk '{print $1}')
|
||||
PASS=0
|
||||
FAIL=0
|
||||
|
||||
check_service() {
|
||||
local name=$1
|
||||
local url=$2
|
||||
echo -n "检查 ${name} ... "
|
||||
if curl -s -o /dev/null -w "%{http_code}" "${url}" | grep -q "200\|302\|401"; then
|
||||
echo -e "${GREEN}通过${NC}"
|
||||
((PASS++))
|
||||
else
|
||||
echo -e "${RED}失败${NC}"
|
||||
((FAIL++))
|
||||
fi
|
||||
}
|
||||
|
||||
echo -e "${YELLOW}========================================${NC}"
|
||||
echo -e "${YELLOW} GoWVP + ZLMediaKit 部署验证 ${NC}"
|
||||
echo -e "${YELLOW}========================================${NC}"
|
||||
echo "服务器IP: ${SERVER_IP}"
|
||||
echo ""
|
||||
|
||||
# 1. 检查 Docker 服务
|
||||
echo -n "检查 Docker 服务 ... "
|
||||
if systemctl is-active docker >/dev/null 2>&1; then
|
||||
echo -e "${GREEN}通过${NC}"
|
||||
((PASS++))
|
||||
else
|
||||
echo -e "${RED}失败${NC}"
|
||||
((FAIL++))
|
||||
fi
|
||||
|
||||
# 2. 检查容器运行状态
|
||||
echo -n "检查 ZLMediaKit 容器 ... "
|
||||
if docker ps | grep -q zlmediakit; then
|
||||
echo -e "${GREEN}通过${NC}"
|
||||
((PASS++))
|
||||
else
|
||||
echo -e "${RED}失败${NC}"
|
||||
((FAIL++))
|
||||
fi
|
||||
|
||||
echo -n "检查 GoWVP 容器 ... "
|
||||
if docker ps | grep -q gowvp; then
|
||||
echo -e "${GREEN}通过${NC}"
|
||||
((PASS++))
|
||||
else
|
||||
echo -e "${RED}失败${NC}"
|
||||
((FAIL++))
|
||||
fi
|
||||
|
||||
# 3. 检查端口监听
|
||||
echo -n "检查 HTTP 80 端口 ... "
|
||||
if netstat -tlnp 2>/dev/null | grep -q ":80 " || ss -tlnp 2>/dev/null | grep -q ":80 "; then
|
||||
echo -e "${GREEN}通过${NC}"
|
||||
((PASS++))
|
||||
else
|
||||
echo -e "${RED}失败${NC}"
|
||||
((FAIL++))
|
||||
fi
|
||||
|
||||
echo -n "检查 GoWVP 15123 端口 ... "
|
||||
if netstat -tlnp 2>/dev/null | grep -q ":15123 " || ss -tlnp 2>/dev/null | grep -q ":15123 "; then
|
||||
echo -e "${GREEN}通过${NC}"
|
||||
((PASS++))
|
||||
else
|
||||
echo -e "${RED}失败${NC}"
|
||||
((FAIL++))
|
||||
fi
|
||||
|
||||
# 4. HTTP API 测试
|
||||
check_service "ZLMediaKit API" "http://${SERVER_IP}/index/api/getApiList"
|
||||
check_service "GoWVP Web界面" "http://${SERVER_IP}:15123"
|
||||
|
||||
# 5. 检查日志是否有错误
|
||||
echo -n "检查 ZLMediaKit 日志错误 ... "
|
||||
if docker logs zlmediakit 2>&1 | grep -qi "error\|fatal"; then
|
||||
echo -e "${YELLOW}警告: 发现错误日志${NC}"
|
||||
else
|
||||
echo -e "${GREEN}通过${NC}"
|
||||
((PASS++))
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}========================================${NC}"
|
||||
echo -e "${GREEN} 验证完成: ${PASS} 通过, ${FAIL} 失败 ${NC}"
|
||||
echo -e "${YELLOW}========================================${NC}"
|
||||
|
||||
if [ $FAIL -eq 0 ]; then
|
||||
echo -e "${GREEN}所有检查通过!部署成功!${NC}"
|
||||
exit 0
|
||||
else
|
||||
echo -e "${RED}部分检查未通过,请查看上方详情${NC}"
|
||||
exit 1
|
||||
fi
|
||||
BIN
owl_zlmediakit/source-packages/libsrtp-2.5.0.tar.gz
Normal file
BIN
owl_zlmediakit/source-packages/libsrtp-2.5.0.tar.gz
Normal file
Binary file not shown.
420
owl_zlmediakit/排查手册-访问超时.md
Normal file
420
owl_zlmediakit/排查手册-访问超时.md
Normal file
@@ -0,0 +1,420 @@
|
||||
# GoWVP + ZLMediaKit 访问超时排查手册
|
||||
|
||||
> **适用场景**: 浏览器访问 `http://192.168.3.108` 超时 / 无法打开
|
||||
> **排查原则**: 从"服务层→端口层→防火墙层→网络层"逐层验证
|
||||
|
||||
---
|
||||
|
||||
## 第一步:确认容器是否正常运行
|
||||
|
||||
```bash
|
||||
# 1. 查看容器状态
|
||||
docker-compose -f /opt/owl-zlmediakit/docker-compose.yml ps
|
||||
|
||||
# 预期输出:两个容器都显示 Up
|
||||
# NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
|
||||
# gowvp gospace/gowvp:latest "/opt/owl/owl-server" gowvp 10 minutes ago Up 10 minutes
|
||||
# zlmediakit zlmediakit/zlmediakit:master "/bin/sh -c 'cd /op…'" zlmediakit 10 minutes ago Up 10 minutes
|
||||
```
|
||||
|
||||
**如果状态不是 `Up`,说明容器启动失败:**
|
||||
|
||||
```bash
|
||||
# 查看容器退出原因
|
||||
docker logs zlmediakit --tail 50
|
||||
docker logs gowvp --tail 50
|
||||
|
||||
# 常见错误:
|
||||
# - "port is already allocated" → 端口被占用(见第二步)
|
||||
# - "Permission denied" → SELinux限制(见第四步)
|
||||
# - "exec format error" → 镜像架构不对(x86_64镜像跑在ARM64上)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 第二步:确认端口是否在监听
|
||||
|
||||
```bash
|
||||
# 方法1: 使用 ss 命令(推荐)
|
||||
ss -tlnp | grep -E ':80|:15123'
|
||||
|
||||
# 方法2: 使用 netstat
|
||||
netstat -tlnp | grep -E ':80|:15123'
|
||||
|
||||
# 方法3: 直接测试端口连通性
|
||||
curl -I http://127.0.0.1:80
|
||||
curl -I http://127.0.0.1:15123
|
||||
|
||||
# 方法4: 查看ZLMediaKit实际监听的端口
|
||||
docker exec zlmediakit netstat -tlnp
|
||||
```
|
||||
|
||||
**预期输出示例:**
|
||||
```
|
||||
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
|
||||
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("MediaServer",pid=1,fd=25))
|
||||
LISTEN 0 128 0.0.0.0:15123 0.0.0.0:* users:(("owl-server",pid=1,fd=18))
|
||||
```
|
||||
|
||||
> **关键点**: `Local Address` 必须显示 `0.0.0.0:80` 或 `:::80`,如果显示 `127.0.0.1:80`,说明服务只监听了本地回环,外部无法访问。
|
||||
> 但在 `network_mode: host` 模式下,服务通常会自动监听 `0.0.0.0`,除非程序自身配置限制了。
|
||||
|
||||
**如果端口未监听:**
|
||||
|
||||
```bash
|
||||
# 检查端口是否被其他程序占用
|
||||
ss -tlnp | grep :80
|
||||
lsof -i :80
|
||||
|
||||
# 如果有其他程序占用了80端口(如nginx、apache)
|
||||
# 方案A: 停止占用程序
|
||||
sudo systemctl stop nginx
|
||||
|
||||
# 方案B: 修改ZLMediaKit端口(不推荐,很多配置依赖80端口)
|
||||
# 编辑 data/zlm-config.ini 将 [http] 下的 port=80 改为 port=8080
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 第三步:测试服务器本机访问
|
||||
|
||||
```bash
|
||||
# 在服务器上测试,确认服务本身是否正常
|
||||
curl -I http://127.0.0.1
|
||||
curl -I http://192.168.3.108
|
||||
curl http://192.168.3.108/index/api/getApiList
|
||||
|
||||
# 测试GoWVP
|
||||
curl -I http://127.0.0.1:15123
|
||||
curl -I http://192.168.3.108:15123
|
||||
```
|
||||
|
||||
**如果 `127.0.0.1` 能访问但 `192.168.3.108` 不能:**
|
||||
- 说明服务正常,但绑定在了 `127.0.0.1` 而不是 `0.0.0.0`
|
||||
- 需要检查程序启动参数或配置
|
||||
|
||||
**如果两者都不能访问:**
|
||||
- 服务本身有问题,查看容器日志
|
||||
|
||||
---
|
||||
|
||||
## 第四步:检查防火墙
|
||||
|
||||
统信UOS 1070军事版默认可能开启防火墙,这是超时最常见的原因!
|
||||
|
||||
```bash
|
||||
# ===== 检查 firewalld =====
|
||||
sudo firewall-cmd --state
|
||||
sudo firewall-cmd --list-all
|
||||
sudo firewall-cmd --list-ports
|
||||
|
||||
# 如果 firewalld 运行中,放行端口
|
||||
sudo firewall-cmd --permanent --add-port=80/tcp
|
||||
sudo firewall-cmd --permanent --add-port=15123/tcp
|
||||
sudo firewall-cmd --permanent --add-port=15060/tcp
|
||||
sudo firewall-cmd --permanent --add-port=15060/udp
|
||||
sudo firewall-cmd --reload
|
||||
|
||||
# ===== 检查 iptables =====
|
||||
sudo iptables -L -n | grep -E '80|15123'
|
||||
|
||||
# 如果 iptables 有DROP规则,添加ACCEPT
|
||||
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
|
||||
sudo iptables -I INPUT -p tcp --dport 15123 -j ACCEPT
|
||||
sudo iptables -I INPUT -p tcp --dport 15060 -j ACCEPT
|
||||
sudo iptables -I INPUT -p udp --dport 15060 -j ACCEPT
|
||||
|
||||
# ===== 检查 ufw (Debian/Ubuntu系列) =====
|
||||
sudo ufw status
|
||||
sudo ufw allow 80/tcp
|
||||
sudo ufw allow 15123/tcp
|
||||
|
||||
# ===== 统信UOS特有: 安全中心/安全加固 =====
|
||||
# 1070军事版可能启用了额外的安全策略
|
||||
# 检查是否有应用层防火墙或白名单机制
|
||||
sudo cat /etc/security/limits.conf
|
||||
cat /etc/hosts.allow
|
||||
cat /etc/hosts.deny
|
||||
```
|
||||
|
||||
> ⚠️ **统信UOS 1070军事版特殊提示**:
|
||||
> 军事版通常有更严格的默认安全策略,可能:
|
||||
> 1. 默认拒绝所有入站连接
|
||||
> 2. 开启了额外的安全审计/访问控制
|
||||
> 3. SELinux 处于 Enforcing 模式
|
||||
>
|
||||
> 如果上述防火墙命令执行后仍无法访问,请联系系统管理员确认是否有额外的网络安全策略。
|
||||
|
||||
---
|
||||
|
||||
## 第五步:检查 SELinux
|
||||
|
||||
```bash
|
||||
# 查看SELinux状态
|
||||
getenforce
|
||||
# 可能输出: Enforcing / Permissive / Disabled
|
||||
|
||||
# 如果为 Enforcing,尝试临时设置为 Permissive(仅用于测试)
|
||||
sudo setenforce 0
|
||||
|
||||
# 测试访问是否恢复
|
||||
# 如果恢复,说明是SELinux限制,需要添加策略而不是永久关闭
|
||||
|
||||
# 查看SELinux审计日志(确认是否是SELinux拦截)
|
||||
sudo cat /var/log/audit/audit.log | grep -i denied | tail -20
|
||||
sudo ausearch -m avc -ts recent
|
||||
|
||||
# 如果是SELinux问题,为Docker添加权限
|
||||
sudo setsebool -P container_manage_cgroup on
|
||||
```
|
||||
|
||||
> **注意**: 军事环境可能不允许关闭 SELinux,请先确认安全策略要求。
|
||||
|
||||
---
|
||||
|
||||
## 第六步:检查网络连通性
|
||||
|
||||
```bash
|
||||
# 1. 确认IP地址正确
|
||||
ip addr show | grep 192.168.3.108
|
||||
|
||||
# 2. 从服务器ping网关,确认网络正常
|
||||
ping 192.168.3.1
|
||||
|
||||
# 3. 从其他机器ping服务器
|
||||
# 在另一台电脑上执行:
|
||||
ping 192.168.3.108
|
||||
|
||||
# 如果ping不通,说明网络层有问题(网线、交换机、路由)
|
||||
# 如果ping通但HTTP超时,说明传输层/应用层有问题(防火墙、服务未启动)
|
||||
|
||||
# 4. 从其他机器测试端口连通性
|
||||
telnet 192.168.3.108 80
|
||||
# 或
|
||||
nc -vz 192.168.3.108 80
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 第七步:查看详细日志
|
||||
|
||||
```bash
|
||||
# ZLMediaKit 实时日志
|
||||
docker logs -f zlmediakit
|
||||
|
||||
# GoWVP 实时日志
|
||||
docker logs -f gowvp
|
||||
|
||||
# 系统日志(查看Docker、网络相关错误)
|
||||
sudo journalctl -u docker -n 100 --no-pager
|
||||
sudo journalctl -n 50 --no-pager | grep -i -E 'firewall|denied|reject'
|
||||
|
||||
# 查看ZLMediaKit配置文件是否被正确加载
|
||||
docker exec zlmediakit cat /opt/media/conf/config.ini | grep -E 'port|externIP'
|
||||
```
|
||||
|
||||
**重点关注的日志关键词:**
|
||||
- `bind failed` / `Address already in use` → 端口占用
|
||||
- `Permission denied` → 权限/SELinux问题
|
||||
- `listen failed` → 监听失败
|
||||
- `accept failed` → 连接被拒绝
|
||||
|
||||
---
|
||||
|
||||
## 第八步:一键排查脚本
|
||||
|
||||
在服务器上执行以下脚本,自动检测常见问题:
|
||||
|
||||
```bash
|
||||
cd /opt/owl-zlmediakit
|
||||
sudo tee scripts/diagnose.sh > /dev/null << 'EOF'
|
||||
#!/bin/bash
|
||||
# GoWVP + ZLMediaKit 访问超时一键排查脚本
|
||||
|
||||
SERVER_IP="192.168.3.108"
|
||||
|
||||
echo "=========================================="
|
||||
echo " 访问超时诊断脚本"
|
||||
echo " 服务器IP: ${SERVER_IP}"
|
||||
echo "=========================================="
|
||||
|
||||
# 1. 检查容器状态
|
||||
echo -e "\n[1/8] 检查容器状态..."
|
||||
if docker ps | grep -q zlmediakit; then
|
||||
echo " ✓ ZLMediaKit 容器运行中"
|
||||
else
|
||||
echo " ✗ ZLMediaKit 容器未运行"
|
||||
docker ps -a | grep zlmediakit
|
||||
fi
|
||||
|
||||
if docker ps | grep -q gowvp; then
|
||||
echo " ✓ GoWVP 容器运行中"
|
||||
else
|
||||
echo " ✗ GoWVP 容器未运行"
|
||||
docker ps -a | grep gowvp
|
||||
fi
|
||||
|
||||
# 2. 检查端口监听
|
||||
echo -e "\n[2/8] 检查端口监听..."
|
||||
for port in 80 15123; do
|
||||
if ss -tlnp 2>/dev/null | grep -q ":${port} "; then
|
||||
echo " ✓ 端口 ${port} 正在监听"
|
||||
ss -tlnp | grep ":${port} " | head -1
|
||||
else
|
||||
echo " ✗ 端口 ${port} 未监听"
|
||||
fi
|
||||
done
|
||||
|
||||
# 3. 本机访问测试
|
||||
echo -e "\n[3/8] 本机访问测试..."
|
||||
if curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1 | grep -q "200\|302\|404"; then
|
||||
echo " ✓ 127.0.0.1:80 可访问"
|
||||
else
|
||||
echo " ✗ 127.0.0.1:80 无法访问"
|
||||
fi
|
||||
|
||||
if curl -s -o /dev/null -w "%{http_code}" http://${SERVER_IP} | grep -q "200\|302\|404"; then
|
||||
echo " ✓ ${SERVER_IP}:80 可访问"
|
||||
else
|
||||
echo " ✗ ${SERVER_IP}:80 无法访问"
|
||||
fi
|
||||
|
||||
# 4. 防火墙检查
|
||||
echo -e "\n[4/8] 检查防火墙..."
|
||||
if command -v firewall-cmd &> /dev/null; then
|
||||
if firewall-cmd --state 2>/dev/null | grep -q "running"; then
|
||||
echo " firewalld 运行中,已开放端口:"
|
||||
firewall-cmd --list-ports | tr ' ' '\n' | grep -E '80|15123' | sed 's/^/ /'
|
||||
else
|
||||
echo " firewalld 未运行"
|
||||
fi
|
||||
fi
|
||||
|
||||
if command -v iptables &> /dev/null; then
|
||||
IPTABLES_COUNT=$(iptables -L INPUT -n --line-numbers 2>/dev/null | grep -c -E 'dpt:80|dpt:15123' || true)
|
||||
if [ "$IPTABLES_COUNT" -gt 0 ]; then
|
||||
echo " iptables 相关规则:"
|
||||
iptables -L INPUT -n --line-numbers | grep -E 'dpt:80|dpt:15123' | sed 's/^/ /'
|
||||
else
|
||||
echo " iptables 无80/15123相关规则"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 5. SELinux检查
|
||||
echo -e "\n[5/8] 检查SELinux..."
|
||||
if command -v getenforce &> /dev/null; then
|
||||
SELINUX_STATUS=$(getenforce)
|
||||
echo " SELinux 状态: ${SELINUX_STATUS}"
|
||||
if [ "${SELINUX_STATUS}" = "Enforcing" ]; then
|
||||
echo " ⚠ SELinux 处于强制模式,可能拦截访问"
|
||||
fi
|
||||
else
|
||||
echo " SELinux 未安装"
|
||||
fi
|
||||
|
||||
# 6. 网络接口检查
|
||||
echo -e "\n[6/8] 检查网络接口..."
|
||||
ip addr show | grep "${SERVER_IP}" > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo " ✓ IP ${SERVER_IP} 已绑定到网卡"
|
||||
ip addr show | grep "${SERVER_IP}" | sed 's/^/ /'
|
||||
else
|
||||
echo " ✗ IP ${SERVER_IP} 未绑定到任何网卡"
|
||||
echo " 可用IP地址:"
|
||||
ip addr show | grep "inet " | sed 's/^/ /'
|
||||
fi
|
||||
|
||||
# 7. 端口占用检查
|
||||
echo -e "\n[7/8] 检查80端口占用..."
|
||||
PORT_80_PID=$(ss -tlnp 2>/dev/null | grep ':80 ' | head -1)
|
||||
if [ -n "$PORT_80_PID" ]; then
|
||||
echo " 端口80被占用:"
|
||||
echo " ${PORT_80_PID}"
|
||||
else
|
||||
echo " 端口80未被监听"
|
||||
fi
|
||||
|
||||
# 8. Docker网络检查
|
||||
echo -e "\n[8/8] 检查Docker网络配置..."
|
||||
docker network ls | grep -q host
|
||||
if [ $? -eq 0 ]; then
|
||||
echo " ✓ host 网络模式可用"
|
||||
else
|
||||
echo " ✗ host 网络模式不可用"
|
||||
fi
|
||||
|
||||
echo -e "\n=========================================="
|
||||
echo " 诊断完成"
|
||||
echo "=========================================="
|
||||
EOF
|
||||
|
||||
sudo chmod +x scripts/diagnose.sh
|
||||
sudo ./scripts/diagnose.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常见原因速查表
|
||||
|
||||
| 现象 | 最可能原因 | 解决方案 |
|
||||
|------|-----------|----------|
|
||||
| 浏览器超时,但服务器上`curl 127.0.0.1`正常 | **防火墙拦截** | 执行`firewall-cmd --add-port=80/tcp`或`iptables -I INPUT -p tcp --dport 80 -j ACCEPT` |
|
||||
| 浏览器超时,`curl 127.0.0.1`也失败 | **服务未启动/端口未监听** | `docker logs zlmediakit`查看错误,可能是端口被占用 |
|
||||
| `docker-compose ps`显示Exit | **容器启动失败** | 查看`docker logs`,可能是SELinux或镜像架构问题 |
|
||||
| 能ping通但HTTP超时 | **防火墙或SELinux** | 检查防火墙规则 + `getenforce` |
|
||||
| 连ping都ping不通 | **网络层问题** | 检查网线、交换机、IP配置 |
|
||||
| `ss`显示端口监听在`127.0.0.1:80` | **服务绑定错误** | 检查程序配置,确保绑定到`0.0.0.0` |
|
||||
|
||||
---
|
||||
|
||||
## 统信UOS 1070军事版特有问题
|
||||
|
||||
### 1. 默认安全策略
|
||||
|
||||
1070军事版通常有严格的安全加固:
|
||||
|
||||
```bash
|
||||
# 检查是否有额外的安全模块
|
||||
lsmod | grep -E 'security|apparmor|selinux'
|
||||
cat /proc/1/attr/current
|
||||
|
||||
# 检查TCP Wrappers
|
||||
cat /etc/hosts.allow
|
||||
cat /etc/hosts.deny
|
||||
```
|
||||
|
||||
### 2. Docker在军事版上的特殊问题
|
||||
|
||||
```bash
|
||||
# 检查Docker是否被安全策略限制
|
||||
sudo auditctl -l | grep docker
|
||||
sudo cat /var/log/audit/audit.log | grep -i docker | tail -20
|
||||
|
||||
# 检查cgroup配置(统信UOS可能有特殊配置)
|
||||
cat /proc/self/cgroup
|
||||
mount | grep cgroup
|
||||
```
|
||||
|
||||
### 3. 如果所有排查都没问题
|
||||
|
||||
可能是军事版定制的内核或安全模块拦截了。尝试:
|
||||
|
||||
```bash
|
||||
# 临时关闭所有防火墙(仅测试用,测试后恢复)
|
||||
sudo systemctl stop firewalld
|
||||
sudo iptables -F
|
||||
sudo setenforce 0
|
||||
|
||||
# 测试访问
|
||||
# 如果此时可以访问,说明确实是防火墙/安全策略问题
|
||||
# 逐条恢复策略,定位具体是哪条规则导致的拦截
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
> 如果以上排查都未能解决问题,请提供以下信息以便进一步分析:
|
||||
> 1. `docker-compose ps` 的输出
|
||||
> 2. `ss -tlnp | grep -E ':80|:15123'` 的输出
|
||||
> 3. `sudo firewall-cmd --list-all` 或 `sudo iptables -L -n` 的输出
|
||||
> 4. `getenforce` 的输出
|
||||
> 5. `docker logs zlmediakit --tail 30` 的输出
|
||||
1635
owl_zlmediakit/联网部署手册.md
Normal file
1635
owl_zlmediakit/联网部署手册.md
Normal file
File diff suppressed because it is too large
Load Diff
1716
owl_zlmediakit/部署手册.md
Normal file
1716
owl_zlmediakit/部署手册.md
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user