# Live 离线 Docker 部署 目标域名: ```text https://oa.live.educlouddata.com/ ``` SFU WebSocket 入口: ```text wss://oa.live.educlouddata.com/ws_webrtc_sfu_api_test/?roomId=xxx&peerId=xxx ``` ## 1. 本地打包并保存镜像 在 Windows 本地执行: ```powershell cd D:\work\yzx_oa_sfu .\scripts\docker-build-save.ps1 ``` 默认生成: ```text D:\work\yzx_oa_sfu\yzx-oa-sfu_0.1.0-live_linux-amd64.tar ``` 如果要手动执行,等价命令是: ```powershell 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 ``` ## 2. 上传到服务器 上传以下文件到服务器同一个目录,例如 `/opt/yzx_oa_sfu`: ```text yzx-oa-sfu_0.1.0-live_linux-amd64.tar docker-compose.image.yml .env scripts/docker-load-run.sh(可选) ``` `.env` 使用本仓库的 `.env.live` 内容即可。服务器上可以这样放: ```bash mkdir -p /opt/yzx_oa_sfu cd /opt/yzx_oa_sfu ``` 如果上传的是 `.env.live`,服务器上改名: ```bash cp .env.live .env ``` ## 3. 服务器 load 并启动 先确认服务器是否支持 Compose v2: ```bash docker compose version ``` 如果提示 `docker: 'compose' is not a docker command` 或类似 `unknown shorthand flag: 'f' in -f`,说明这台服务器没有 Docker Compose v2 插件。可以直接看本节后面的“不使用 compose 启动”。 ```bash 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 ``` 也可以使用脚本: ```bash cd /opt/yzx_oa_sfu bash scripts/docker-load-run.sh ``` 脚本会自动判断当前服务器是否支持 `docker compose` / `docker-compose`。如果都没有,会退回到下面的 `docker run` 启动方式。 不使用 compose 启动: ```bash 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 运行时不兼容。请确认启动命令中包含: ```bash --security-opt seccomp=unconfined ``` 如果服务器安装的是旧版 `docker-compose` 命令,也可以用: ```bash SFU_IMAGE=yzx-oa-sfu:0.1.0-live docker-compose -f docker-compose.image.yml up -d ``` ## 4. Nginx 反代 在 `oa.live.educlouddata.com` 的 HTTPS server block 中加入: ```nginx 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: ```bash nginx -t && nginx -s reload ``` ## 5. 防火墙和安全组 需要放行: ```text 4443/tcp 40000-40100/udp 40000-40100/tcp ``` 如果 `.env` 中修改了 `MEDIASOUP_RTC_MIN_PORT` / `MEDIASOUP_RTC_MAX_PORT`,防火墙和 `docker-compose.image.yml` 映射范围要跟随 `.env`。 ## 6. 检查命令 ```bash 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 ``` ## 7. OA 前端配置 `oa/.env.live` 已配置: ```text VITE_SFU_WS_URL = 'wss://oa.live.educlouddata.com/ws_webrtc_sfu_api_test' ``` 如果使用其他 `.env.*` 构建 OA,也需要加同样的 `VITE_SFU_WS_URL`。