Docker 部署 FUXA:轻松搭建 Web SCADA / HMI 过程可视化平台

本文基于 frangoteam/fuxa:1.3.4,实测引擎 FUXA V.1.3.4-2890,测试平台 Ubuntu 24.04 Linux。

产线画面还锁在工控机专用组态里:改一个阀门图标要装客户端、拷工程包,手机和访客电脑根本打不开。机房里温湿度、UPS、门禁又各有一套小网页,想拼成一张总览,只能翻 Excel 对点位,或者再买一套按站授权的商业 SCADA。

更现实的约束往往是:工程和历史数据要留在自己的盘上,浏览器就能改画面、看实时数。商业套件贵、绑定硬件;Grafana 一类仪表盘接指标很顺,却常接不上车间里的 Modbus、西门子 S7、OPC-UA。家里或机房已经有一台跑 Docker 的 Ubuntu,缺的只是镜像拉起来、1881 能打开、项目落在挂载目录里。

FUXAGitHub · frangoteam/FUXA)是开源的 Web SCADA / HMI 平台:后端 Node.js,前端 Angular + SVG,组态与运行都在浏览器完成。官方镜像 frangoteam/fuxa镜像页)默认监听 1881,许可证 MIT。另有可选商业 FUXA Pro(白标等),本文只跟做社区版容器。

部署跑通之后,你实际能做这些事:

场景部署后怎么用
打开样例画面http://服务器IP:1881,先看自带 FUXA sample
进编辑器改 HMI拖控件、绑点位,工程写入 ./appdata
接工业协议连接里加设备;缺驱动时在 Server Plugins 安装 Modbus / OPC-UA / Snap7 等
备份搬家停容器后打包 ./appdata./db./images(日志按需)

本文用 轩辕镜像 加速拉取 frangoteam/fuxa:1.3.4Docker Compose 映射 1881→1881。局域网以 192.168.1.35 为例,请换成你的 IP。无 Compose 见第八节。文内附 8 张实测截图。

上手要点

  • 部署:第五节 Compose;临时试玩见第八节
  • 访问:宿主机 1881 → 容器 1881http://192.168.1.35:1881);推荐 Chrome
  • 数据./appdata_appdata./db_db./logs_logs./images_images
  • 认证:实测默认不强制登录;生产请启用令牌认证并改掉默认 admin / 123456
  • 标签:钉死 1.3.4(日志 V.1.3.4-2890),勿写 latest
  • 网络:跟做用 bridge + 端口映射;容器要直连车间 PLC 时再考虑 host 网络(仅 Linux,见 FAQ)

官方说明:Installing and Running · 文档站 · Live Demo


一、FUXA 是什么?

FUXA 把设备连接、标签(点位)、画面编辑、运行视图、报警与历史放在同一套 Web 应用里:工程师在浏览器里做组态,操作员用同一端口看运行画面。

FUXA(本文)商业 SCADA / 组态Grafana 类仪表盘
入口浏览器 :1881厂商客户端 / 授权站浏览器
工程Web 编辑器 + SVG专有工程格式Dashboard JSON
协议Modbus / S7 / OPC-UA / MQTT 等因产品而异多依赖已有时序库
数据宿主机四卷目录厂商或本机工程外部数据源
适合中小产线、实验室、机房总览、IoT 看板大型产线、强认证与集成已有指标、偏运维可视化
浏览器(编辑器 / 运行视图)
   │  :1881
   ▼
frangoteam/fuxa
   ├── _appdata  ← ./appdata   项目与设置
   ├── _db       ← ./db        标签历史(DAQ)
   ├── _logs     ← ./logs
   └── _images   ← ./images    图片资源

本文只跟 frangoteam/fuxa/r//zh/r/ 是同一镜像的不同页面,不是两个仓库。标签选型见第三节。


二、环境要求

项目建议
系统Linux,建议 Ubuntu 24.04
DockerEngine + Compose V2
架构amd64 / arm64(另有 arm/v7;以 tags 为准)
内存评估 ≥ 1 GB;画面多、历史长时再加
磁盘实测镜像 CONTENT 210 MB / DISK 899 MB;工程与 DAQ 另算
端口宿主机 1881(占用时改左侧,如 "11881:1881"
docker --version
docker compose version

Linux 未装 Docker 可使用轩辕镜像一键安装脚本:

bash <(wget -qO- https://get.xuanyuan.cloud/docker.sh)

备用地址:

bash <(wget -qO- https://get.xuanyuan.me/docker.sh)

更多见 轩辕镜像使用手册

ss -tlnp | grep 1881

被占用时把 Compose 改成 "11881:1881",浏览器改访新的左侧端口。


三、标签怎么选

跟做只写 1.3.4,与 GitHub Release v1.3.4(约 2026-08-12)及 Docker Hub 同名标签一致。完整列表:tags

标签含义推荐
1.3.4当前跟做稳定版(实测日志 V.1.3.4-2890本文跟做
1.3.3 / 1.2.x更早稳定版回滚
snap7-*旧版带 Snap7 的镜像变体一般不必;S7 可在容器内用 Server Pluginsnode-snap7
latest / 1.3浮动勿写入跟做命令

升级时先备份四卷,再改 pull / Compose / docker run 三处标签,并核对 Releases


四、拉取镜像

轩辕镜像 加速拉取:

docker pull docker.xuanyuan.run/frangoteam/fuxa:1.3.4

Ubuntu 24.04 实测(ikuai-ubuntu2404):

1.3.4: Pulling from frangoteam/fuxa
Digest: sha256:3778da3377e7685842495497d13157d1548ccad8708c434dc5d4b99fb5cb25bf
Status: Downloaded newer image for docker.xuanyuan.run/frangoteam/fuxa:1.3.4
docker.xuanyuan.run/frangoteam/fuxa:1.3.4
docker images docker.xuanyuan.run/frangoteam/fuxa:1.3.4
IMAGE                                       ID             DISK USAGE   CONTENT SIZE
docker.xuanyuan.run/frangoteam/fuxa:1.3.4   3778da3377e7        899MB          210MB

401 / 402 见 常见问题


五、Docker Compose 部署(推荐)

平台工作目录
Linux(正文默认)/www/wwwroot/fuxa
macOS~/docker/fuxa
Windows(Docker Desktop)C:\docker\fuxa

5.1 准备目录

mkdir -p /www/wwwroot/fuxa/{appdata,db,logs,images}
cd /www/wwwroot/fuxa

# macOS:mkdir -p ~/docker/fuxa/{appdata,db,logs,images} && cd ~/docker/fuxa

非 root 给 mkdirsudo

5.2 编写 docker-compose.yml

对齐官方 compose.yml:镜像换成轩辕坐标并钉死版本。

cat > docker-compose.yml <<'EOF'
services:
  fuxa:
    image: docker.xuanyuan.run/frangoteam/fuxa:1.3.4
    container_name: fuxa
    restart: unless-stopped
    ports:
      - "1881:1881"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./appdata:/usr/src/app/FUXA/server/_appdata
      - ./db:/usr/src/app/FUXA/server/_db
      - ./logs:/usr/src/app/FUXA/server/_logs
      - ./images:/usr/src/app/FUXA/server/_images
EOF
说明
ports宿主机 1881 → 容器 1881
./appdata项目与设置(含 settings.js
./dbDAQ / 标签历史
./logs日志
./images图片等资源
TZ跟做 Asia/Shanghai

反向代理子路径可用环境变量 BASE_PATH(须带前导斜杠,如 /fuxa),见 FAQ。官方另可挂载 SVG shapes 目录,评估阶段一般不必。

5.3 启动并验证

docker compose up -d
docker compose ps
docker compose logs --tail 80

Ubuntu 24.04 实测:

[+] up 2/2
 ✔ Network fuxa_default Created
 ✔ Container fuxa       Started
NAME      IMAGE                                       COMMAND                  SERVICE   CREATED         STATUS         PORTS
fuxa      docker.xuanyuan.run/frangoteam/fuxa:1.3.4   "docker-entrypoint.s…"   fuxa      5 seconds ago   Up 3 seconds   0.0.0.0:1881->1881/tcp, [::]:1881->1881/tcp
fuxa  | 2026-08-31T14:27:32.368Z [DBG]          settings.js default created successful!
fuxa  | 2026-08-31T14:27:32.390Z [INF]  FUXA V.1.3.4-2890

看到 0.0.0.0:1881->1881/tcpFUXA V.1.3.4-2890 即可。请用宿主机 IP 访问,不要用 172.x 容器地址。

curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:1881
200

浏览器打开(换成你的 IP):

http://192.168.1.35:1881

六、浏览器首次进入

推荐 Chrome

6.1 加载页

首次打开会短暂出现 「FUXA Loading…」powered by frangoteam,等前端资源加载即可。

picture.image

6.2 样例运行画面

加载完成后进入自带样例 FUXA sample:罐体液位、阀门 / 泵示意、滑块、开关、仪表,以及 My chart 趋势。左下角蓝色菜单按钮可开导航。能看到这页,说明服务与前端已经跑通。

picture.image

6.3 进入编辑器与设置总览

从运行画面进入 编辑模式(界面顶部或菜单中的编辑 / 进入编辑器入口,以当前语言 UI 为准),再打开右上角 设置(齿轮)。弹出面板按块划分:

  • 用户接口:视图、布局、图表…
  • 杂项连接(加 PLC / MQTT 等)、用户角色、插件、API Keys、设置…
  • 逻辑:警报、脚本、Node-RED、报告、语言…
  • 系统:日志

配设备、装协议、开认证,都从这里进。

picture.image

6.4 布局:为何首次不用登录

设置 → 布局,看「常规」页实测默认:

实测
启动视图MainView
启动时显示登录已禁用
显示连接错误 (Toast)已启用
导航菜单按钮显示按钮 打开

因此浏览器能直接进样例。公网或多人共用时,把「启动时显示登录」打开,并在系统设置里启用令牌认证(下一节与 §7.3)。

picture.image

右侧可预览左下角汉堡导航按钮,并开关「显示按钮」:

picture.image

6.5 启用认证时的默认账号

启用「使用令牌进行认证」(或改 appdatasettings.jssecureEnabled 后重启)才会强制登录。官方默认:

用户默认密码
admin123456

上线立刻修改,并为 JWT 设置足够随机的 secretCode(见 Settings · Authentication)。不要把未加固的 1881 直接暴露到公网。


七、插件、脚本 API 与系统设置

7.1 Server Plugins(协议扩展)

设置 → 插件。列表里可见 modbus-serialnode-opcuanode-snap7node-bacnetodbcredisnode-red 等,按卡片 Install / Remove 即可。页面也提示可用 npm install 包名@version 手动装到服务端。

需要连车间 PLC 时:先装对应插件,再在 连接 里建设备;同时确认容器网络能到达目标网段(FAQ)。

picture.image

7.2 连接、画面与客户端脚本

连接 里添加协议与点位,回到编辑器画布拖控件、绑标签。工程在 ./appdata,DAQ 历史在 ./db

API Keys 页可开关前端脚本能调用的系统函数($setTag$getTag$setView 等,对应 window.fuxaScriptAPI)。只打开现场真正需要的项,避免把写点能力暴露给不可信页面。

picture.image

7.3 系统设置(语言、端口、认证)

设置 → 设置 → 系统,实测:

实测
语言中文
服务器正在监听端口1881
Node-RED / Swagger已禁用
使用令牌进行认证已禁用(生产请改为启用)

改认证等项后保存,必要时 docker compose restart。SMTP、DAQ 存储、警报、Logs 等页签按现场再配。

picture.image

容器时区已由 TZ=Asia/Shanghai 对齐;界面语言以本页为准。


八、备选:docker run

无 Compose 或临时试跑:

mkdir -p /www/wwwroot/fuxa/{appdata,db,logs,images}
cd /www/wwwroot/fuxa

docker run -d \
  --name fuxa \
  --restart unless-stopped \
  -p 1881:1881 \
  -e TZ=Asia/Shanghai \
  -v /www/wwwroot/fuxa/appdata:/usr/src/app/FUXA/server/_appdata \
  -v /www/wwwroot/fuxa/db:/usr/src/app/FUXA/server/_db \
  -v /www/wwwroot/fuxa/logs:/usr/src/app/FUXA/server/_logs \
  -v /www/wwwroot/fuxa/images:/usr/src/app/FUXA/server/_images \
  docker.xuanyuan.run/frangoteam/fuxa:1.3.4
docker ps --filter name=fuxa
docker logs --tail 80 fuxa

日常仍建议用第五节 Compose,改端口、备份和升级更省事。


九、迁移与升级

  1. docker compose down
  2. 备份 appdatadbimageslogs 按需)
  3. 把 Compose(及 run)里的标签改成目标版本号,不要改回 latest
  4. docker pull docker.xuanyuan.run/frangoteam/fuxa:<新标签>
  5. docker compose up -d,核对日志版本串与浏览器工程是否正常

跨大版本先读 Releases。不要在未备份时用 snap7-* 镜像直接覆盖现有四卷。


十、常见问题 FAQ

Q:为什么不推荐 latest
A:标签会静默漂移,界面与插件步骤可能和文档对不上。跟做钉死 1.3.4

Q:默认要不要登录?账号是什么?
A:实测布局里「启动时显示登录」与系统里「令牌认证」均为禁用,可直接进样例。启用认证后默认 admin / 123456,必须立刻修改。

Q:连不上车间 PLC?
A:bridge 下容器走 Docker 网关,可能到不了只挂在宿主机物理网卡上的网段。Linux 可评估 network_mode: host(此时不要再写 ports,直接占用宿主机 1881)。先确认插件已安装、设备地址与防火墙放行。

Q:端口 1881 被占用?
A:改 "11881:1881",访问 http://IP:11881

Q:删容器会丢工程吗?
A:工程在 ./appdata,历史在 ./db,图片在 ./images。卷还在就不丢;没挂卷的试跑数据会随容器消失。

Q:反向代理子路径怎么配?
A:设 BASE_PATH(如 /fuxa,带前导斜杠),并按官方说明转发 WebSocket 与静态资源。

Q:和 FUXA Pro 什么关系?
A:本文是社区开源镜像。Pro 提供白标等增值能力,见 frangoteam.org


十一、命令速查

# 拉取
docker pull docker.xuanyuan.run/frangoteam/fuxa:1.3.4

# Compose(目录 /www/wwwroot/fuxa)
docker compose up -d
docker compose ps
docker compose logs -f --tail 100
docker compose down

# 备选 run
docker run -d --name fuxa --restart unless-stopped -p 1881:1881 \
  -e TZ=Asia/Shanghai \
  -v /www/wwwroot/fuxa/appdata:/usr/src/app/FUXA/server/_appdata \
  -v /www/wwwroot/fuxa/db:/usr/src/app/FUXA/server/_db \
  -v /www/wwwroot/fuxa/logs:/usr/src/app/FUXA/server/_logs \
  -v /www/wwwroot/fuxa/images:/usr/src/app/FUXA/server/_images \
  docker.xuanyuan.run/frangoteam/fuxa:1.3.4

docker logs -f --tail 100 fuxa
docker rm -f fuxa

十二、延伸阅读

资源链接
frangoteam/fuxa 镜像页https://xuanyuan.cloud/zh/r/frangoteam/fuxa
frangoteam/fuxa 概览https://xuanyuan.cloud/r/frangoteam/fuxa
frangoteam/fuxa 标签列表https://xuanyuan.cloud/r/frangoteam/fuxa/tags
GitHub · frangoteam/FUXAhttps://github.com/frangoteam/FUXA
官方文档 · Installing and Runninghttps://frangoteam.github.io/FUXA/Installing-and-Running/
官方文档 · Settingshttps://frangoteam.github.io/FUXA/Settings/
Live Demohttps://frangoteam.github.io
Docker Hub · frangoteam/fuxahttps://hub.docker.com/r/frangoteam/fuxa
轩辕镜像使用手册https://xuanyuan.cloud/usage

总结

  • 钉死 frangoteam/fuxa:1.3.4,轩辕镜像加速拉取,Compose 映射 1881 并挂四卷
  • 实测日志 V.1.3.4-2890curl 返回 200,浏览器先见 Loading 再进样例画面
  • 默认可不登录;生产启用认证并改掉 admin / 123456
  • 协议走 连接 + Server Plugins;PLC 网络不通时再评估 host 模式

阅读原文

0
0
0
0
评论
未登录
暂无评论