目标域名:
https://oa.live.educlouddata.com/
SFU WebSocket 入口:
wss://oa.live.educlouddata.com/ws_webrtc_sfu_api_test/?roomId=xxx&peerId=xxx
在 Windows 本地执行:
cd D:\work\yzx_oa_sfu
.\scripts\docker-build-save.ps1
默认生成:
D:\work\yzx_oa_sfu\yzx-oa-sfu_0.1.0-live_linux-amd64.tar
如果要手动执行,等价命令是:
cd D:\work\yzx_oa_sfu
docker build --platform linux/amd64 -t yzx-oa-sfu:0.1.0-live .
docker save -o yzx-oa-sfu_0.1.0-live_linux-amd64.tar yzx-oa-sfu:0.1.0-live
上传以下文件到服务器同一个目录,例如 /opt/yzx_oa_sfu:
yzx-oa-sfu_0.1.0-live_linux-amd64.tar
docker-compose.image.yml
.env
scripts/docker-load-run.sh(可选)
.env 使用本仓库的 .env.live 内容即可。服务器上可以这样放:
mkdir -p /opt/yzx_oa_sfu
cd /opt/yzx_oa_sfu
如果上传的是 .env.live,服务器上改名:
cp .env.live .env
先确认服务器是否支持 Compose v2:
docker compose version
如果提示 docker: 'compose' is not a docker command 或类似 unknown shorthand flag: 'f' in -f,说明这台服务器没有 Docker Compose v2 插件。可以直接看本节后面的“不使用 compose 启动”。
cd /opt/yzx_oa_sfu
docker load -i yzx-oa-sfu_0.1.0-live_linux-amd64.tar
SFU_IMAGE=yzx-oa-sfu:0.1.0-live docker compose -f docker-compose.image.yml up -d
也可以使用脚本:
cd /opt/yzx_oa_sfu
bash scripts/docker-load-run.sh
脚本会自动判断当前服务器是否支持 docker compose / docker-compose。如果都没有,会退回到下面的 docker run 启动方式。
不使用 compose 启动:
cd /opt/yzx_oa_sfu
docker load -i yzx-oa-sfu_0.1.0-live_linux-amd64.tar
docker rm -f yzx-oa-sfu 2>/dev/null || true
docker run -d \
--name yzx-oa-sfu \
--restart unless-stopped \
--security-opt seccomp=unconfined \
--env-file .env \
-p 4443:4443/tcp \
-p 40000-40100:40000-40100/udp \
-p 40000-40100:40000-40100/tcp \
yzx-oa-sfu:0.1.0-live
如果容器反复 Restarting (139),并且 docker logs yzx-oa-sfu 中出现 uv_thread_create / WorkerThreadsTaskRunner 相关断言,通常是旧 CentOS 7 + Docker 1.13 的默认 seccomp 与新 Node 运行时不兼容。请确认启动命令中包含:
--security-opt seccomp=unconfined
如果服务器安装的是旧版 docker-compose 命令,也可以用:
SFU_IMAGE=yzx-oa-sfu:0.1.0-live docker-compose -f docker-compose.image.yml up -d
在 oa.live.educlouddata.com 的 HTTPS server block 中加入:
location /ws_webrtc_sfu_api_test/ {
proxy_pass http://127.0.0.1:4443/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
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_read_timeout 86400;
proxy_send_timeout 86400;
}
location /sfu-healthz {
proxy_pass http://127.0.0.1:4443/healthz;
}
重载 Nginx:
nginx -t && nginx -s reload
需要放行:
4443/tcp
40000-40100/udp
40000-40100/tcp
如果 .env 中修改了 MEDIASOUP_RTC_MIN_PORT / MEDIASOUP_RTC_MAX_PORT,防火墙和 docker-compose.image.yml 映射范围要跟随 .env。
docker ps | grep yzx-oa-sfu
docker logs -f yzx-oa-sfu
curl http://127.0.0.1:4443/healthz
curl https://oa.live.educlouddata.com/sfu-healthz
oa/.env.live 已配置:
VITE_SFU_WS_URL = 'wss://oa.live.educlouddata.com/ws_webrtc_sfu_api_test'
如果使用其他 .env.* 构建 OA,也需要加同样的 VITE_SFU_WS_URL。