假设这样一个现场:配电室新加了一面柜,要求三天内看到电流、电压、温度、断路器状态的实时画面,还能在浏览器里打开。同一件事走商用组态软件的常规流程——采购、授权、加密狗、点位计费、现场调试——三天时间,多数情况下连前期商务流程都走不完。
frangoteam/FUXA 走的是另一条路。5,254 star、1,422 fork、430 个 open issues,后端 Node.js、前端 Angular,MIT 协议。README 对自己的定义是 "a web-based SCADA / HMI platform"(即组态软件与设备监控平台)——把工业设备的数据接进来,在浏览器画布上搭一张可交互的监控屏。最近一次提交在 2026-11-04,最新 release v1.3.5(2026-10-19),还在维护。
项目名片
| 项目 | 内容 |
|---|---|
| 仓库 | frangoteam/FUXA |
| 数据(2026-11-05 抓取) | 5,254 star / 1,422 fork / 430 open issues |
| 技术栈 | Node.js(后端)+ Angular(前端) |
| 许可证 | MIT;另有付费版 FUXA Pro,€100 一次性 |
| 最新版本 | v1.3.5,2026-10-19 |
| 默认端口 | 1881,认证默认关闭 |
| 镜像体积 | 211.8 MB |
| 文档 | https://frangoteam.github.io/FUXA/ |
它解决什么问题
工业现场的痛点是三件事同时发生:设备协议各不相同,画面要人一格格画,画完还得让不写代码的人改。
FUXA 把这三件事收进同一个浏览器页面。它替掉的是"为一个配电室买一套商用组态软件授权"的那部分场景——注意是部分,不是全部。
能替掉的是授权成本和交付速度,替不掉的是功能安全和确定性。
边界要说清:开源版是 MIT,另有付费版 FUXA Pro(€100 一次性,含白标、事件日志、不限安装数)。商用前先确认你要的功能落在哪一侧。
核心机制
- 一套协议驱动层,覆盖 Modbus RTU/TCP、Siemens S7(S7-200/300/400/1200/1500)、OPC UA 客户端、BACnet IP、MQTT、EtherNet/IP(Allen Bradley)、ODBC、Beckhoff ADS、MELSEC(三菱)、Redis、SNMP v1/v2c/v3(含 trap)、WebAPI、GPIO、WebCam。
- 编辑器三层结构:连接 → 标签 → 视图。控件通过「属性」里的「数据」页绑标签,从用法上看,这个分层让改画面的人不必碰协议配置。
- 内置 DAQ 历史库,可写 SQLite、InfluxDB 及其他时序库;外部数据经 ODBC 或 Redis 对接。
- 纯 Web 前端,画面在浏览器里渲染,不需要在工程师站装运行版——这也是它不按客户端数量收授权费的原因之一。
跑起来
下面两套选一套。第一套只为试跑,别在这里建工程——它没有卷。
docker pull frangoteam/fuxa:latest
docker run -d -p 1881:1881 \
frangoteam/fuxa:latest
带持久化,四个命名卷,这条才是能用的:
D=/usr/src/app/FUXA/server
docker run -d -p 1881:1881 \
-v fuxa_appdata:$D/_appdata \
-v fuxa_db:$D/_db \
-v fuxa_logs:$D/_logs \
-v fuxa_images:$D/_images \
frangoteam/fuxa:latest
容器里四个数据目录都在 $D 下面,抽成变量只是为了让每行短到手机上也看得全;Windows 下把 $D 换成完整路径。仓库根目录还有一份 compose.yml,想用 compose 就直接下那个文件,卷与上面一一对应。
浏览器打开 http://localhost:1881(或服务器 IP:1881)就是编辑器。
从零到一张屏
- 浏览器访问
http://你的服务器IP:1881,进首页点「新建项目」。 - 进编辑器左栏「连接(Connections)」,加设备。
- 关键前提:官方文档原文是 "To add a Modbus connection you have to install the driver in Plugins"——加 Modbus、S7、ADS 这些连接之前,得先去「插件(Plugins)」里把驱动装上。照 README 直接加连接,多半建不起来,报错还像接线或 IP 的问题,容易误判。
- 设备连上之后才能加标签(文档原文:To add OPCUA Tags the device have to be connected)。
- 切到「视图(View)」拖控件——开关、仪表、趋势图,在「属性(Properties)」的「数据」页把控件绑到标签上。
- 布局用「布局设置」,做完存盘。
进编辑器第一件事,把工程导出一份 JSON 备份。理由在下面第二条坑。
适合谁用,什么时候别用
适合:手上有一两个配电室、水泵房、小型产线,协议是 Modbus 或 S7,要求一周内出画面;需要一个能远程打开、能让非程序员改布局的监控画面;想先把数据接进来看一眼,再决定要不要上大系统。
别用:需要功能安全认证的回路;对确定性、冗余切换、毫秒级响应有硬要求的高可靠性场景;跨厂区上百套设备、要求统一运维和审计的场合。这些场合该上的是带认证、带冗余的方案,FUXA 不在这类清单里,硬套上去,责任和风险都由你自己承担。
另外两件事要先处理。其一,官方文档里那份 compose 用 network_mode: "host",只适用于 Linux,Docker Desktop(Windows / macOS)上跑不出预期效果,得改成 bridge 并映射端口。其二,认证默认关闭——1881 端口直接对外,就是一个无登录的监控画面;要开 secureEnabled,并把默认的 admin / 123456 改掉。
三条真实的坑
- README 里的
//不是合法 shell 注释。 README 用//给"persistent storage of application data…"那行做注释,整段粘进终端会直接报错。这是"跑不通"的第一大来源,上面给的命令是清过的。 - 不挂卷,工程会没。 基础
docker run -d -p 1881:1881没有 volume,容器一删工程就没了。而即使挂了四个卷,仍有 issue #2717(2026-11-03,Win11)报告从 1.3.4 升级到 1.3.5 后工程丢失。所以稳妥做法是导出工程 JSON。 - 锁版本号不等于更稳。
latest镜像内是 Node 22.23.4,而frangoteam/fuxa:1.3.5镜像内还是 Node 18.20.8——已 EOL,含未修 CVE-2026-111497(issue #2711)。直觉上锁版本更安全,这个项目恰好相反。
小结
FUXA 用两条 docker 命令,替掉了一部分"为一个配电室买套商用组态授权"的支出,把画面搬进浏览器。它省的是钱和时间,不是安全责任——上线前把认证打开、把工程导出,这两件事不做,省下来的会还回去。
参考资料
- 仓库:https://github.com/frangoteam/FUXA
- 文档站:https://frangoteam.github.io/FUXA/
- 设备与标签操作:https://frangoteam.github.io/FUXA/HowTo-Devices-and-Tags/
- Docker Hub:https://hub.docker.com/r/frangoteam/fuxa
- MIT LICENSE 直链:https://github.com/frangoteam/FUXA/blob/master/LICENSE
- issue #2717(升级后工程丢失):https://github.com/frangoteam/FUXA/issues/2717
- issue #2711(Node 18 EOL):https://github.com/frangoteam/FUXA/issues/2711
- release v1.3.5:https://github.com/frangoteam/FUXA/releases/tag/v1.3.5
默认评论
Halo系统提供的评论