基于群辉 + Docker + Flask 搭建企业内部自动化服务平台
记录一次使用群辉 NAS 搭建企业内部自动化服务平台的实践包括 Docker 容器部署、自动更新、远程访问以及局域网设备调度。前言随着团队内部自动化需求越来越多需要一个统一的平台来管理各种自动化流程。相比购买云服务器群辉 NAS 具有成本低、易维护、存储能力强等优势因此最终选择以群辉作为服务中心结合 Docker 与 Flask 搭建整个自动化平台。一、整体架构整个系统主要分为四部分主服务负责业务接口、定时任务、自动化调度。群辉副服务负责调用群辉系统能力。自动部署服务监听代码更新并自动部署。局域网设备运行自动化程序由主服务统一调度。开发机 │ Git Push │ 自动部署 │ Docker │ Flask 主服务 ├────────────┐ │ │ 副服务 局域网设备二、主服务设计主服务是整个系统的核心基于 Flask 开发对外统一提供 HTTP API。除了业务接口之外还承担了整个自动化平台的调度职责。1、统一接口管理所有业务能力均通过接口提供例如创建自动化任务查询任务执行状态获取设备列表调度局域网设备获取执行结果统一接口能够降低模块之间的耦合后续新增功能时也更加方便。2、定时任务除了响应外部请求之外主服务还维护了一系列定时任务例如定时同步业务数据定时扫描指定目录定时检测局域网设备是否在线定时触发自动化流程。相比依赖操作系统计划任务统一放在服务端管理更加直观也方便维护。3、自动化调度当收到业务请求后主服务会根据当前设备状态选择可用设备并发送执行指令。整个流程如下收到请求 │ 创建任务 │ 查找可用设备 │ 发送执行命令 │ 等待执行完成 │ 返回执行结果这样后续新增自动化程序时仅需增加新的接口即可不需要修改整体架构。三、副服务设计由于部分群辉能力无法直接在 Docker 容器中调用因此额外部署了一个副服务。副服务主要负责文件操作共享目录管理与群辉系统交互。主服务只需要调用对应接口即可无需关心底层实现从而降低系统耦合。四、自动部署为了减少人工部署采用 Git 推送触发自动部署。部署脚本主要完成以下工作防止重复部署拉取最新代码检查 requirements.txt 是否变化必要时重新构建 Docker 镜像停止旧容器并启动新容器清理无用镜像。通过比较 requirements 文件哈希值仅在依赖发生变化时重新构建镜像能够有效缩短部署时间。五、内外网访问内网访问局域网内设备可直接访问部署在群辉上的 Flask 服务。所有自动化设备均通过内网与主服务通信速度快且稳定。外网访问由于服务部署在企业内网外部网络默认无法直接访问因此需要借助远程访问工具。目前主要有两种方案方案一DDNS如果拥有公网 IP可以通过 DDNS 配置远程访问。这种方式访问速度快但依赖公网环境对网络要求较高。方案二向日葵 Docker 镜像实际项目中采用的是向日葵官方 Docker 镜像。部署流程如下拉取向日葵镜像 │ 启动 Docker 容器 │ 获取设备 SN 与验证码 │ 绑定向日葵账号 │ 远程访问群辉 │ 访问内部服务相比安装群辉套件Docker 部署更加灵活也方便后续升级。容器启动后可以从日志中获取设备 SN 和验证码登录向日葵后台完成绑定即可。绑定成功后无论身处公司还是外网都可以直接远程连接群辉进一步访问部署在群辉中的内部服务无需额外配置复杂的网络环境。对于没有公网 IP 的中小团队来说这种方案部署简单、维护成本低也是目前项目中长期采用的方式。六、局域网设备通信为了调度局域网中的自动化程序采用 UDP TCP 的组合方式。首先通过 UDP 广播发现在线设备。设备收到广播后返回自身信息包括IP 地址设备名称当前状态。随后建立 TCP 连接同步设备支持执行的自动化程序。当主服务收到执行请求后只需要选择目标设备并发送命令即可。客户端则通过本地文件触发器启动对应自动化流程实现整个调度过程。七、总结目前整个平台已经能够稳定运行。具备以下能力Flask 服务管理Docker 容器部署Git 自动部署定时任务管理局域网设备调度向日葵远程访问群辉文件管理。整体部署成本较低维护简单比较适合中小团队搭建企业内部自动化平台。附录 A自动部署脚本部署脚本主要流程如下获取部署锁 │ Git Pull │ 检查依赖 │ 按需构建镜像 │ 停止旧容器 │ 启动新容器 │ 清理镜像通过 requirements.txt 哈希检测实现镜像增量构建提高部署效率。