fmo-gateway-linux-v2
FMO Gateway Linux V2 是一个轻量级的 FMO WebSocket 网关,适用于 Linux、NAS 和 Docker 环境。
它可用于转发以下 FMO 通道:
audio 音频通道events 事件通道ws 命令通道同时提供:
当前镜像支持:
linux/amd64linux/arm64linux/arm/v7docker run -d \
--name fmo-gateway \
--restart unless-stopped \
-p 8089:8089 \
-v "$PWD/config:/app/config" \
-e CONFIG_PATH=/app/config/config.json \
zhaozhengde/fmo-gateway-linux-v2:latest
启动后访问:
http://localhost:8089/
默认登录信息:
用户名:admin
密码:admin888
Important
请在首次部署后立即修改默认密码。
创建配置文件:
config/config.json
默认内容如下:
{
"version": 1,
"display_callsign": "NOCALL",
"fmo": {
"host": "192.168.3.165",
"scheme": "ws",
"audio_url": "",
"events_url": "",
"cmd_url": ""
},
"web": {
"listen": "0.0.0.0:8089",
"user": "admin",
"password": "admin888",
"auth_websocket": false
},
"upstream": {
"reconnect_interval_ms": 3000,
"network_timeout_ms": 10000,
"write_timeout_ms": 5000
},
"gateway": {
"max_clients_per_channel": 1024,
"client_send_queue": 128,
"broadcast_queue": 1024,
"drop_slow_client": true
}
}
通常只需要修改 FMO 上游服务地址:
"host": "192.168.3.165"
将它改成你的 FMO 服务地址,例如:
"host": "192.168.1.100"
程序会自动生成以下上游 WebSocket 地址:
ws://192.168.1.100/audio
ws://192.168.1.100/events
ws://192.168.1.100/ws
version配置文件版本:
"version": 1
通常保持默认即可。
display_callsignWeb 页面中显示的呼号或标识:
"display_callsign": "NOCALL"
可根据需要改成自己的呼号。
fmo.hostFMO 上游服务地址:
"host": "192.168.3.165"
当 audio_url、events_url 和 cmd_url 留空时,程序会根据 host 自动生成:
ws://host/audio
ws://host/events
ws://host/ws
fmo.scheme上游 WebSocket 协议:
"scheme": "ws"
可选值:
ws
wss
局域网普通部署通常使用:
"scheme": "ws"
通过 HTTPS 或安全 WebSocket 连接上游时,可以使用:
"scheme": "wss"
fmo.audio_url音频通道完整地址:
"audio_url": ""
留空时自动生成:
ws://host/audio
也可以手动指定:
"audio_url": "ws://192.168.1.100/audio"
fmo.events_url事件通道完整地址:
"events_url": ""
留空时自动生成:
ws://host/events
也可以手动指定:
"events_url": "ws://192.168.1.100/events"
fmo.cmd_url命令通道完整地址:
"cmd_url": ""
留空时自动生成:
ws://host/ws
也可以手动指定:
"cmd_url": "ws://192.168.1.100/ws"
手动指定全部地址的示例:
{
"fmo": {
"host": "192.168.1.100",
"scheme": "ws",
"audio_url": "ws://192.168.1.100/audio",
"events_url": "ws://192.168.1.100/events",
"cmd_url": "ws://192.168.1.100/ws"
}
}
web.listenWeb 服务监听地址:
"listen": "0.0.0.0:8089"
建议保持默认。
0.0.0.0 表示监听容器内所有网络接口,端口为 8089。
不要改成:
"listen": "127.0.0.1:8089"
否则 Docker 容器外部可能无法访问 Web 页面和 WebSocket 服务。
web.userWeb 管理页面用户名:
"user": "admin"
web.passwordWeb 管理页面密码:
"password": "admin888"
默认登录信息:
admin / admin888
建议部署后立即修改默认密码。
web.auth_websocket是否为下游 WebSocket 启用认证:
"auth_websocket": false
默认值为 false,表示下游客户端连接以下地址时不需要认证:
ws://网关IP:8089/audio
ws://网关IP:8089/events
ws://网关IP:8089/ws
启用认证:
"auth_websocket": true
启用后,下游 WebSocket 客户端需要提供 Basic Auth 认证信息。
Note
如果下游客户端不支持 WebSocket Basic Auth,请保持为 `false`。
upstream.reconnect_interval_ms上游断线后的重连间隔,单位为毫秒:
"reconnect_interval_ms": 3000
表示断线后等待 3 秒重新连接。
upstream.network_timeout_ms上游连接超时时间,单位为毫秒:
"network_timeout_ms": 10000
表示连接上游时,10 秒未成功则判定超时。
upstream.write_timeout_ms命令通道写入超时时间,单位为毫秒:
"write_timeout_ms": 5000
gateway.max_clients_per_channel每个 WebSocket 通道允许的最大下游客户端数量:
"max_clients_per_channel": 1024
gateway.client_send_queue每个下游客户端的发送队列长度:
"client_send_queue": 128
gateway.broadcast_queue内部广播队列长度:
"broadcast_queue": 1024
gateway.drop_slow_client是否断开接收速度过慢的客户端:
"drop_slow_client": true
建议保持为 true。
当某个客户端接收速度过慢、队列持续堆积时,程序会主动断开该客户端,避免影响整体音频流和其他连接。
mkdir -p fmo-gateway/config
cd fmo-gateway
使用 nano:
nano config/config.json
也可以使用其他文本编辑器。
粘贴默认配置后,至少修改:
"host": "你的 FMO 服务器 IP"
例如:
"host": "192.168.1.100"
docker run -d \
--name fmo-gateway \
--restart unless-stopped \
-p 8089:8089 \
-v "$PWD/config:/app/config" \
-e CONFIG_PATH=/app/config/config.json \
zhaozhengde/fmo-gateway-linux-v2:latest
需要管理员权限时:
sudo docker run -d \
--name fmo-gateway \
--restart unless-stopped \
-p 8089:8089 \
-v "$PWD/config:/app/config" \
-e CONFIG_PATH=/app/config/config.json \
zhaozhengde/fmo-gateway-linux-v2:latest
docker ps
docker logs -f fmo-gateway
docker stop fmo-gateway
docker restart fmo-gateway
docker rm -f fmo-gateway
配置文件保存在宿主机的 config 目录中,删除容器不会删除配置。
docker pull zhaozhengde/fmo-gateway-linux-v2:latest
docker rm -f fmo-gateway
然后重新执行启动命令。
创建文件:
docker-compose.yml
内容如下:
services:
fmo-gateway:
image: zhaozhengde/fmo-gateway-linux-v2:latest
container_name: fmo-gateway
restart: unless-stopped
ports:
- "8089:8089"
volumes:
- ./config:/app/config
environment:
CONFIG_PATH: /app/config/config.json
推荐目录结构:
fmo-gateway/
├── docker-compose.yml
└── config/
└── config.json
启动:
docker compose up -d
旧版 Docker Compose:
docker-compose up -d
查看日志:
docker compose logs -f
或者:
docker logs -f fmo-gateway
停止并删除容器:
docker compose down
更新镜像并重新创建容器:
docker compose pull
docker compose up -d
假设部署机器的局域网 IP 是:
192.168.3.50
http://192.168.3.50:8089/
默认账号密码:
admin / admin888
curl http://192.168.3.50:8089/healthz
curl -u admin:admin888 \
http://192.168.3.50:8089/api/state
音频通道:
ws://192.168.3.50:8089/audio
事件通道:
ws://192.168.3.50:8089/events
命令通道:
ws://192.168.3.50:8089/ws
通过 Web 管理页面修改 FMO 地址后,上游连接会立即重新连接,通常不需要重启容器。
如果手动修改了:
config/config.json
可以重启容器使配置生效:
docker restart fmo-gateway
也可以调用重新加载接口:
curl -u admin:admin888 \
-X POST \
http://127.0.0.1:8089/api/reload
远程调用时,将 127.0.0.1 替换为部署机器的 IP:
curl -u admin:admin888 \
-X POST \
http://192.168.3.50:8089/api/reload
如果只需要最基本的功能,可以使用以下配置:
{
"fmo": {
"host": "192.168.3.165",
"scheme": "ws"
},
"web": {
"listen": "0.0.0.0:8089",
"user": "admin",
"password": "admin888",
"auth_websocket": false
}
}
程序会自动补齐其他默认值。
Warning
HTTPS 页面不能连接 `ws://` 地址,否则浏览器会报 Mixed Content 错误。 当页面通过 HTTPS 访问时,WebSocket 必须使用 `wss://`。
检查容器是否运行:
docker ps
检查日志:
docker logs -f fmo-gateway
确认端口映射存在:
8089:8089
确认配置中的监听地址为:
"listen": "0.0.0.0:8089"
检查配置文件是否存在:
ls -l config/config.json
检查 JSON 格式是否正确:
python3 -m json.tool config/config.json
查看错误日志:
docker logs fmo-gateway
确认 fmo.host 地址正确:
"host": "192.168.1.100"
确认部署机器能够访问上游 FMO:
ping 192.168.1.100
确认上游 WebSocket 路径为:
/audio
/events
/ws
错误示例:
HTTPS 页面尝试连接不安全的 ws:// WebSocket
将:
ws://fmo.example.com/ws
改为:
wss://fmo.example.com/ws
更推荐前端根据页面协议自动选择:
const protocol = window.location.protocol === "https:" ? "wss:" : "ws:";
const socket = new WebSocket(`${protocol}//${window.location.host}/ws`);
如果日志提示客户端发送队列过慢,可能是客户端处理速度不足。
可以检查:
"client_send_queue": 128,
"drop_slow_client": true
不建议轻易关闭 drop_slow_client,否则慢客户端可能影响整体转发性能。
config.json 提交到公开仓库。8089 端口的访问来源。auth_websocket 前,请确认下游客户端支持 Basic Auth。Content type
Image
Digest
sha256:cae923d7e…
Size
5.9 MB
Last updated
4 days ago
docker pull zhaozhengde/fmo-gateway-linux-v2:main