徐昫 江苏省广播电视总台
技术设备生命周期管理是江苏广电管理中的一个重要组成部分,如何有效提高固定资产使用效益,防止固定资产流失,已成为技术设备生命周期管理工作亟待解决的重要课题。当前普遍存在如下问题:
(1)账物不符、账实不符,管理不便;
(2)资产状态和流向无记录,无OA流程,统计不便。因此,技术设备生命周期管理平台的建设势在必行。技术设备生命周期管理系统的内容主要包括:轻松看到所有资产,被分配给了谁,以及它们的物理位置,以及详细的检录巡查记录。 安全功能方面包括最小用户密码长度执行、两步身份验证(使用Google身份验证器)以及预防暴力破解等。用户管理方面授予用户访问报告的权限,甚至允许用户申请可用的资产。 每个用户都有自己的使用记录,包括资产、配件、消耗品和许可证。
Docker 是一个开源的应用容器引擎,使用Google的Go语言进行开发,基于Linux内核的Control Group、Namespace以及AUFS类的UnionFS等技术,对进程进行封装隔离。 由于隔离的进程独立于宿主和其它隔离的进程,因此也称其为“容器”。容器参与的系统组织架构如图1所示。基于Docker容器部署使得整个系统松耦合、架构灵活、易于移植并且可以在线扩展和升级。
图1 系统组织架构拓扑模型示意图
Laravel是一套简洁、优雅的PHP Web开发框架,使代码模块化,可扩展性强,并提供多种扩展包。程序采用MVC的架构模式,视图层通过Blade模板引擎生成页面布局,并支持多语言的本地化。控制层内置广播、缓存、日志、事件、队列等服务。Model层通过Eloquent ORM 实现简洁美观的 ActiveRecord和数据库进行交互,典型Laravel架构的流程模型如图2所示。
图2 典型Laravel架构的流程模型
Laravel被称为“全栈”式框架,因为它能够处理从网络服务、数据库管理到HTML生成的一切事情,垂直集成的Web开发环境给开发者提供了更好的体验。在HTTP层,它通过“路由”机制将用户的请求转发给相应的程序处理,支持“GET”“POST”“PUT”“DELETE”等请求类型,建立URL和程序之间的映射。通过内置的中间件,包括身份验证、CSRF保护等过滤进入应用的HTTP请求。
微信小程序是一种随时可用,但又无需安装卸载的应用。微信小程序分为视图层和逻辑层,如图3所示。视图层包含WXML(类似HTML)和WXSS(类似CSS)代码,逻辑层包含Javascript文件。视图层通过事件通知逻辑层,逻辑层通过返回Data来更新视图。此外,微信还提供了API、组件、配置文件供开发者调用,如:界面、视图、内容、按钮、导航、多媒体、位置、数据、网络、重力感应、摄像头等。在这些组件和接口的帮助下,建立在微信上的小程序在运行能力和流畅度上可以保持和原生APP类似的体验。
图3 微信小程序的开发架构
技术设备生命周期管理系统为B/S架构,主要由服务端和微信小程序组成。服务端支持LAMP或IIS部署,基于PHP框架,使用Laravel开发,并开放Rest风格的API接口。微信小程序代码托管在微信公众平台上,与微信公众号绑定,通过API调用微信二维码识别服务和服务端的数据处理服务,并通过CrowdIn平台实现多语言化。系统架构设计如图4所示。
图4 技术设备生命周期管理系统总体技术架构
3.1.1 基于Docker部署服务端环境服务端目前运行在荔枝云上,基于Docker的容器化部署,由两个连接的容器组成,分别是Web服务容器和数据库容器,Web服务基于Apache镜像搭建,数据库采用MySQL镜
图5 服务端容器设计
像搭建,结构如图5所示。服务端容器环境部署的步骤如下:
(1)启动一个基于“mysql/mysql-server:5.7”镜像的数据库容器,代码如下:
docker run --name mysql -e MYSQL_ROOT_PASSWORD= xxxxxxxxx -p 3306:3306 -d mysql/mysqlserver:5.7
其中“--name”表示该容器的名称为“mysql”“-e”设置了该容器的环境变量,这里即MySQL的root密码,“-p”表示将容器的3306端口映射到宿主机的3306端口上。
为方便其他容器通过Docker内部网络访问数据库,需要进入容器中配置MySQL允许远程连接数据库。代码如下:
// 进入该容器的bash
docker exec -ti mysql bash
// 允许MySQL的root账户远程连接
mysql -p mysql
GRANT ALL ON ★.★ TO root@'%' IDENTIFIED BY‘xxxxxxxxx’;
FLUSH PRIVILEGES;
(2)启动一个phpmyadmin容器,并用“--link”命令连接到MySQL容器,代码如下:
docker run --rm --name phpmyadmin -d --link mysql:db -p 30001:80 phpmyadmin/phpmyadmin
其中“--rm”表示该容器每次使用后即销毁,“--link”表示将名称为“mysql”的容器以“db”的身份关联到该容器,“-p”表示将容器的80端口映射到宿主机的30001端口上。
(3)启动Web容器,并用“--link”命令连接到MySQL容器,代码如下:
docker run -d -p 30080:80 -p 30443:443--name=jsitdb_v4.2.0 --link mysql:mysql -v /code/path:/var/www/html -v /data/path:/var/lib/data --env-file=/home/my_env_file jsitdb /tini -- /entrypoint.sh
其中“--link”表示将名称为“mysql”的容器以“mysql”的身份关联到该容器,,“-v”表示将宿主机的文件夹映射到容器的web根目录下,“--envfile”表示了容器的环境变量配置文件的位置,“/tini-- /entrypoint.sh”为容器的启动命令。
最终使用“docker ps”命令可以看到建立的三个容器。
3.1.2 基于Restful API开发微信小程序
首先登录微信公众平台的网页,用任意未注册过个人微信号或微信公众号的邮箱申请一个小程序账号,然后用该账号登录后台,即可获取小程序APPID并设置小程序相关信息。为保证正常调用服务端的API,开发者需要事先在小程序“开发设置”中配置合法服务器域名。最后便可以下载腾讯提供的微信开发者工具进行小程序开发,其界面如图6所示。
(1)用户登录
图6 微信开发者工具的开发界面
由于本文所述的技术设备生命周期管理系统已经在服务端维护独立的一套用户系统,因此在小程序中对用户的身份采取两步认证:首先调用微信小程序提供的wx.login(Object) API,通过小程序的微信登录机制确认用户的微信身份。获取微信登录状态的一系列授权与加密协议的原理如图7所示。
图7 微信登录的时序图
然后在用户授权登录后跳转到API认证界面,用户需要事先在技术设备生命周期管理系统服务端的设置界面中申请token,该token为随机的字符串,其中包含用户在本系统中的权限信息,将token填写在小程序界面中保存后即可访问小程序的扫码界面,如图8所示。小程序、应用服务器和微信后台间的授权与安全机制较为严格,这样可以较好地保证数据的安全传输,同时也对代码的逻辑规范和优化提出了较高的要求。
图8 小程序的登录步骤
(2)扫描条形码
调用微信小程序提供的wx.scanCode(Object object)API,调用客户端扫码界面进行扫码,获得条码上的内容。唤起客户端的扫码界面后,扫描固定资产专用的条码标签即返回固定资产编号,然后通过该编号调用服务端API获取资产信息。
3.1.3 与OA系统对接
设备生命周期管理系统中存有所有固定资产的信息,江苏广播OA系统中保存了网络信息科值班人员运维日志,日志记录了相关设备的故障情况,将从设备生命周期管理系统中获得的设备信息同步到OA系统中,这样可以在OA系统中直接调用相关设备,同时能够保证后台数据的一致和准确。
配置ODBC,使得OA系统能够访问设备生命周期管理系统中的MySQL数据库,配置SQL Server中的链接服务器功能,建立ODBC与SQL查询语句OPENQUERY之间的关联。两个数据库的对接示意图如图9所示。在SQL Server代理中配置作业,即可定时将设备生命周期管理系统中的设备基础数据同步到OA数据库中。
图9 两套系统的数据对接示意图
(1)HTTPS加密传输
作为基于Web的系统,本项目支持全局SSL部署,SSL是一个URI scheme(抽象标识符体系),句法类同HTTP体系,但HTTPS协议则是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。这样的技术使得设备生命周期管理系统拥有了安全的基础。
(2)用户认证
用户使用用户名和密码登入系统,用户密码采用Bcrypt加密方式保存在数据库内,并且设定密码错误锁定机制来防止暴力破解。管理员可提高对用户密码强度的要求,并可选择开启 “两步验证”验证用户,从而避免反复尝试以及因口令泄露导致的入侵问题。
(3)API认证
考虑到微信小程序的接入需求,本项目通过OAuth 2.0协议实现API场景下的授权。在 API 场景里通常通过token令牌来实现用户授权,而非维护请求之间的Session 状态,通过Laravel内置的Passport服务部署OAuth 2.0服务端实现。每个用户可以自行在后台设置中申请令牌。
整个技术设备生命周期管理系统的客户端由Web界面和微信小程序两部分组成。Web界面需要授权才能登录,登录后的Web界面如图10所示。首页由功能主体、可隐藏的左侧导航栏和顶部的快捷方式组成。下面分别介绍Web后台和微信小程序的主要功能和使用方法。
图10 Web首页
(1)后台数据设置
系统在使用之初,应从管理的实际需求出发,首先完成数据模板、自定义字段、用户权限、使用界面等模块的设置。其中左侧导航栏的设置主要负责后台数据和计算逻辑,右上角的设置主要负责功能和权限的自定义。
数据和计算逻辑的设置主要包括自定义字段、资产相关属性、部门和地理位置、折旧计算方法等。只有设置好这方面的逻辑,系统才能更好地完成分类汇总、精确查询、导入导出匹配等相关功能。其中状态标签和地理位置的设置如图11所示,这些字段是贯穿固定资产生命周期管理过程中最不可或缺基础的属性之一。另外,可自定义字段的功能允许用户为常用的资产模型定义一组可重用的字段,可以根据不同技术设备的分类,分别汇总各类设备所需的基础信息,为固定资产的差异化管理提供了非常便捷的模块化设计。用户在使用的时候,根据设备类型选择对应的自定义模板,可以极大地提高工作效率,自定义字段的设置界面和使用场景如图12、13所示。
图11 状态标签、地理位置的设置示意图
图12 自定义字段集
图13 自定义字段集的使用
(2)系统功能设置
功能和权限的设置主要包括使用界面、登录安全、用户权限、标签生成规则等。 品牌功能在设置界面中的第一个,它支持自定义CSS,修改边栏的悬停状态,以及页眉页脚样式等。安全功能设置中开启了两步认证的机制,相关技术的原理和功能介绍在上文已做了详细的描述。系统还支持“LDAP便捷登录”,使得用户可以使用域账户登录,方便账户的快速搭建与使用。
用户权限管理也是安全设置部分的重要部分。系统支持登录、查看和操作权限的控制,支持通过权限组来分组管理用户。系统提供了两个特权用户账户级别,即管理员和超级管理员。
资产标签功能能够非常便捷地生成资产标签,标签的尺寸规格和编码可以在后台灵活设置。扫描二维码可以快速定位到系统内的资产,生成的条码如图14所示。
图14 系统生成的条码标签
(3)资产管理
系统将技术设备分成资产、软件许可证、附属品、消耗品和组件五大类,对应不同类型的管理模板也有细微的差别,精确的分类和管理也使得后台管理人员的效率得以提高。
对于现有的技术设备资产,可将数据整理成规范文档后,通过Web界面导入。系统支持的文档格式非常多,在文档导入时,建立好数据的对应关系即可。导入后的资产类管理界面如图15所示,在这里可以对资产进行汇总统计、导出数据、增加备注、打印条码、改派报废、维护更新记录等操作。
(4)报告管理
系统中自带的报告共有7种,还可以根据需要设置自定义报表。系统报表管理负责记录用户进行增删改查、修改权限等操作,以及对相关字段的汇总和导出。在网络安全对应用和法律层面都越来越被重视的今天,操作的记录和追溯都是保证网络安全的一个重要组成部分。
(5)手机扫码
图15 在Web页面中上传固定资产数据
通过微信小程序,手机摇身一变成了一个智能手持终端,方便了用户随时随地查询和管理分布范围极广的固定资产。例如,将巡检时发现的问题及时备注并同步到系统后台数据库中。进入微信小程序主界面之后,点击条形码按钮,将手机镜头对准条码,可以查询出该条码设备的相关信息,如图16所示。在该界面可以直接修改资产的相关信息,并可同步更新后台的数据, 完成检录等管理。
江苏广播技术部建立广播技术管理平台后,对于管理更加规范、服务更加便捷,得到了各广播部的一致好评,也为技术部在融合媒体态势下做好面向全台的技术服务打下了坚实的基础。
图16 通过微信小程序查询固定资产的相关信息