徐昫 江蘇省廣播電視總臺(tái)
技術(shù)設(shè)備生命周期管理是江蘇廣電管理中的一個(gè)重要組成部分,如何有效提高固定資產(chǎn)使用效益,防止固定資產(chǎn)流失,已成為技術(shù)設(shè)備生命周期管理工作亟待解決的重要課題。當(dāng)前普遍存在如下問題:
(1)賬物不符、賬實(shí)不符,管理不便;
(2)資產(chǎn)狀態(tài)和流向無記錄,無OA流程,統(tǒng)計(jì)不便。因此,技術(shù)設(shè)備生命周期管理平臺(tái)的建設(shè)勢在必行。技術(shù)設(shè)備生命周期管理系統(tǒng)的內(nèi)容主要包括:輕松看到所有資產(chǎn),被分配給了誰,以及它們的物理位置,以及詳細(xì)的檢錄巡查記錄。 安全功能方面包括最小用戶密碼長度執(zhí)行、兩步身份驗(yàn)證(使用Google身份驗(yàn)證器)以及預(yù)防暴力破解等。用戶管理方面授予用戶訪問報(bào)告的權(quán)限,甚至允許用戶申請(qǐng)可用的資產(chǎn)。 每個(gè)用戶都有自己的使用記錄,包括資產(chǎn)、配件、消耗品和許可證。
Docker 是一個(gè)開源的應(yīng)用容器引擎,使用Google的Go語言進(jìn)行開發(fā),基于Linux內(nèi)核的Control Group、Namespace以及AUFS類的UnionFS等技術(shù),對(duì)進(jìn)程進(jìn)行封裝隔離。 由于隔離的進(jìn)程獨(dú)立于宿主和其它隔離的進(jìn)程,因此也稱其為“容器”。容器參與的系統(tǒng)組織架構(gòu)如圖1所示?;贒ocker容器部署使得整個(gè)系統(tǒng)松耦合、架構(gòu)靈活、易于移植并且可以在線擴(kuò)展和升級(jí)。
圖1 系統(tǒng)組織架構(gòu)拓?fù)淠P褪疽鈭D
Laravel是一套簡潔、優(yōu)雅的PHP Web開發(fā)框架,使代碼模塊化,可擴(kuò)展性強(qiáng),并提供多種擴(kuò)展包。程序采用MVC的架構(gòu)模式,視圖層通過Blade模板引擎生成頁面布局,并支持多語言的本地化??刂茖觾?nèi)置廣播、緩存、日志、事件、隊(duì)列等服務(wù)。Model層通過Eloquent ORM 實(shí)現(xiàn)簡潔美觀的 ActiveRecord和數(shù)據(jù)庫進(jìn)行交互,典型Laravel架構(gòu)的流程模型如圖2所示。
圖2 典型Laravel架構(gòu)的流程模型
Laravel被稱為“全?!笔娇蚣?,因?yàn)樗軌蛱幚韽木W(wǎng)絡(luò)服務(wù)、數(shù)據(jù)庫管理到HTML生成的一切事情,垂直集成的Web開發(fā)環(huán)境給開發(fā)者提供了更好的體驗(yàn)。在HTTP層,它通過“路由”機(jī)制將用戶的請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的程序處理,支持“GET”“POST”“PUT”“DELETE”等請(qǐng)求類型,建立URL和程序之間的映射。通過內(nèi)置的中間件,包括身份驗(yàn)證、CSRF保護(hù)等過濾進(jìn)入應(yīng)用的HTTP請(qǐng)求。
微信小程序是一種隨時(shí)可用,但又無需安裝卸載的應(yīng)用。微信小程序分為視圖層和邏輯層,如圖3所示。視圖層包含WXML(類似HTML)和WXSS(類似CSS)代碼,邏輯層包含Javascript文件。視圖層通過事件通知邏輯層,邏輯層通過返回Data來更新視圖。此外,微信還提供了API、組件、配置文件供開發(fā)者調(diào)用,如:界面、視圖、內(nèi)容、按鈕、導(dǎo)航、多媒體、位置、數(shù)據(jù)、網(wǎng)絡(luò)、重力感應(yīng)、攝像頭等。在這些組件和接口的幫助下,建立在微信上的小程序在運(yùn)行能力和流暢度上可以保持和原生APP類似的體驗(yàn)。
圖3 微信小程序的開發(fā)架構(gòu)
技術(shù)設(shè)備生命周期管理系統(tǒng)為B/S架構(gòu),主要由服務(wù)端和微信小程序組成。服務(wù)端支持LAMP或IIS部署,基于PHP框架,使用Laravel開發(fā),并開放Rest風(fēng)格的API接口。微信小程序代碼托管在微信公眾平臺(tái)上,與微信公眾號(hào)綁定,通過API調(diào)用微信二維碼識(shí)別服務(wù)和服務(wù)端的數(shù)據(jù)處理服務(wù),并通過CrowdIn平臺(tái)實(shí)現(xiàn)多語言化。系統(tǒng)架構(gòu)設(shè)計(jì)如圖4所示。
圖4 技術(shù)設(shè)備生命周期管理系統(tǒng)總體技術(shù)架構(gòu)
3.1.1 基于Docker部署服務(wù)端環(huán)境服務(wù)端目前運(yùn)行在荔枝云上,基于Docker的容器化部署,由兩個(gè)連接的容器組成,分別是Web服務(wù)容器和數(shù)據(jù)庫容器,Web服務(wù)基于Apache鏡像搭建,數(shù)據(jù)庫采用MySQL鏡
圖5 服務(wù)端容器設(shè)計(jì)
像搭建,結(jié)構(gòu)如圖5所示。服務(wù)端容器環(huán)境部署的步驟如下:
(1)啟動(dòng)一個(gè)基于“mysql/mysql-server:5.7”鏡像的數(shù)據(jù)庫容器,代碼如下:
docker run --name mysql -e MYSQL_ROOT_PASSWORD= xxxxxxxxx -p 3306:3306 -d mysql/mysqlserver:5.7
其中“--name”表示該容器的名稱為“mysql”“-e”設(shè)置了該容器的環(huán)境變量,這里即MySQL的root密碼,“-p”表示將容器的3306端口映射到宿主機(jī)的3306端口上。
為方便其他容器通過Docker內(nèi)部網(wǎng)絡(luò)訪問數(shù)據(jù)庫,需要進(jìn)入容器中配置MySQL允許遠(yuǎn)程連接數(shù)據(jù)庫。代碼如下:
// 進(jìn)入該容器的bash
docker exec -ti mysql bash
// 允許MySQL的root賬戶遠(yuǎn)程連接
mysql -p mysql
GRANT ALL ON ★.★ TO root@'%' IDENTIFIED BY‘xxxxxxxxx’;
FLUSH PRIVILEGES;
(2)啟動(dòng)一個(gè)phpmyadmin容器,并用“--link”命令連接到MySQL容器,代碼如下:
docker run --rm --name phpmyadmin -d --link mysql:db -p 30001:80 phpmyadmin/phpmyadmin
其中“--rm”表示該容器每次使用后即銷毀,“--link”表示將名稱為“mysql”的容器以“db”的身份關(guān)聯(lián)到該容器,“-p”表示將容器的80端口映射到宿主機(jī)的30001端口上。
(3)啟動(dòng)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”的身份關(guān)聯(lián)到該容器,,“-v”表示將宿主機(jī)的文件夾映射到容器的web根目錄下,“--envfile”表示了容器的環(huán)境變量配置文件的位置,“/tini-- /entrypoint.sh”為容器的啟動(dòng)命令。
最終使用“docker ps”命令可以看到建立的三個(gè)容器。
3.1.2 基于Restful API開發(fā)微信小程序
首先登錄微信公眾平臺(tái)的網(wǎng)頁,用任意未注冊(cè)過個(gè)人微信號(hào)或微信公眾號(hào)的郵箱申請(qǐng)一個(gè)小程序賬號(hào),然后用該賬號(hào)登錄后臺(tái),即可獲取小程序APPID并設(shè)置小程序相關(guān)信息。為保證正常調(diào)用服務(wù)端的API,開發(fā)者需要事先在小程序“開發(fā)設(shè)置”中配置合法服務(wù)器域名。最后便可以下載騰訊提供的微信開發(fā)者工具進(jìn)行小程序開發(fā),其界面如圖6所示。
(1)用戶登錄
圖6 微信開發(fā)者工具的開發(fā)界面
由于本文所述的技術(shù)設(shè)備生命周期管理系統(tǒng)已經(jīng)在服務(wù)端維護(hù)獨(dú)立的一套用戶系統(tǒng),因此在小程序中對(duì)用戶的身份采取兩步認(rèn)證:首先調(diào)用微信小程序提供的wx.login(Object) API,通過小程序的微信登錄機(jī)制確認(rèn)用戶的微信身份。獲取微信登錄狀態(tài)的一系列授權(quán)與加密協(xié)議的原理如圖7所示。
圖7 微信登錄的時(shí)序圖
然后在用戶授權(quán)登錄后跳轉(zhuǎn)到API認(rèn)證界面,用戶需要事先在技術(shù)設(shè)備生命周期管理系統(tǒng)服務(wù)端的設(shè)置界面中申請(qǐng)token,該token為隨機(jī)的字符串,其中包含用戶在本系統(tǒng)中的權(quán)限信息,將token填寫在小程序界面中保存后即可訪問小程序的掃碼界面,如圖8所示。小程序、應(yīng)用服務(wù)器和微信后臺(tái)間的授權(quán)與安全機(jī)制較為嚴(yán)格,這樣可以較好地保證數(shù)據(jù)的安全傳輸,同時(shí)也對(duì)代碼的邏輯規(guī)范和優(yōu)化提出了較高的要求。
圖8 小程序的登錄步驟
(2)掃描條形碼
調(diào)用微信小程序提供的wx.scanCode(Object object)API,調(diào)用客戶端掃碼界面進(jìn)行掃碼,獲得條碼上的內(nèi)容。喚起客戶端的掃碼界面后,掃描固定資產(chǎn)專用的條碼標(biāo)簽即返回固定資產(chǎn)編號(hào),然后通過該編號(hào)調(diào)用服務(wù)端API獲取資產(chǎn)信息。
3.1.3 與OA系統(tǒng)對(duì)接
設(shè)備生命周期管理系統(tǒng)中存有所有固定資產(chǎn)的信息,江蘇廣播OA系統(tǒng)中保存了網(wǎng)絡(luò)信息科值班人員運(yùn)維日志,日志記錄了相關(guān)設(shè)備的故障情況,將從設(shè)備生命周期管理系統(tǒng)中獲得的設(shè)備信息同步到OA系統(tǒng)中,這樣可以在OA系統(tǒng)中直接調(diào)用相關(guān)設(shè)備,同時(shí)能夠保證后臺(tái)數(shù)據(jù)的一致和準(zhǔn)確。
配置ODBC,使得OA系統(tǒng)能夠訪問設(shè)備生命周期管理系統(tǒng)中的MySQL數(shù)據(jù)庫,配置SQL Server中的鏈接服務(wù)器功能,建立ODBC與SQL查詢語句OPENQUERY之間的關(guān)聯(lián)。兩個(gè)數(shù)據(jù)庫的對(duì)接示意圖如圖9所示。在SQL Server代理中配置作業(yè),即可定時(shí)將設(shè)備生命周期管理系統(tǒng)中的設(shè)備基礎(chǔ)數(shù)據(jù)同步到OA數(shù)據(jù)庫中。
圖9 兩套系統(tǒng)的數(shù)據(jù)對(duì)接示意圖
(1)HTTPS加密傳輸
作為基于Web的系統(tǒng),本項(xiàng)目支持全局SSL部署,SSL是一個(gè)URI scheme(抽象標(biāo)識(shí)符體系),句法類同HTTP體系,但HTTPS協(xié)議則是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議。這樣的技術(shù)使得設(shè)備生命周期管理系統(tǒng)擁有了安全的基礎(chǔ)。
(2)用戶認(rèn)證
用戶使用用戶名和密碼登入系統(tǒng),用戶密碼采用Bcrypt加密方式保存在數(shù)據(jù)庫內(nèi),并且設(shè)定密碼錯(cuò)誤鎖定機(jī)制來防止暴力破解。管理員可提高對(duì)用戶密碼強(qiáng)度的要求,并可選擇開啟 “兩步驗(yàn)證”驗(yàn)證用戶,從而避免反復(fù)嘗試以及因口令泄露導(dǎo)致的入侵問題。
(3)API認(rèn)證
考慮到微信小程序的接入需求,本項(xiàng)目通過OAuth 2.0協(xié)議實(shí)現(xiàn)API場景下的授權(quán)。在 API 場景里通常通過token令牌來實(shí)現(xiàn)用戶授權(quán),而非維護(hù)請(qǐng)求之間的Session 狀態(tài),通過Laravel內(nèi)置的Passport服務(wù)部署OAuth 2.0服務(wù)端實(shí)現(xiàn)。每個(gè)用戶可以自行在后臺(tái)設(shè)置中申請(qǐng)令牌。
整個(gè)技術(shù)設(shè)備生命周期管理系統(tǒng)的客戶端由Web界面和微信小程序兩部分組成。Web界面需要授權(quán)才能登錄,登錄后的Web界面如圖10所示。首頁由功能主體、可隱藏的左側(cè)導(dǎo)航欄和頂部的快捷方式組成。下面分別介紹Web后臺(tái)和微信小程序的主要功能和使用方法。
圖10 Web首頁
(1)后臺(tái)數(shù)據(jù)設(shè)置
系統(tǒng)在使用之初,應(yīng)從管理的實(shí)際需求出發(fā),首先完成數(shù)據(jù)模板、自定義字段、用戶權(quán)限、使用界面等模塊的設(shè)置。其中左側(cè)導(dǎo)航欄的設(shè)置主要負(fù)責(zé)后臺(tái)數(shù)據(jù)和計(jì)算邏輯,右上角的設(shè)置主要負(fù)責(zé)功能和權(quán)限的自定義。
數(shù)據(jù)和計(jì)算邏輯的設(shè)置主要包括自定義字段、資產(chǎn)相關(guān)屬性、部門和地理位置、折舊計(jì)算方法等。只有設(shè)置好這方面的邏輯,系統(tǒng)才能更好地完成分類匯總、精確查詢、導(dǎo)入導(dǎo)出匹配等相關(guān)功能。其中狀態(tài)標(biāo)簽和地理位置的設(shè)置如圖11所示,這些字段是貫穿固定資產(chǎn)生命周期管理過程中最不可或缺基礎(chǔ)的屬性之一。另外,可自定義字段的功能允許用戶為常用的資產(chǎn)模型定義一組可重用的字段,可以根據(jù)不同技術(shù)設(shè)備的分類,分別匯總各類設(shè)備所需的基礎(chǔ)信息,為固定資產(chǎn)的差異化管理提供了非常便捷的模塊化設(shè)計(jì)。用戶在使用的時(shí)候,根據(jù)設(shè)備類型選擇對(duì)應(yīng)的自定義模板,可以極大地提高工作效率,自定義字段的設(shè)置界面和使用場景如圖12、13所示。
圖11 狀態(tài)標(biāo)簽、地理位置的設(shè)置示意圖
圖12 自定義字段集
圖13 自定義字段集的使用
(2)系統(tǒng)功能設(shè)置
功能和權(quán)限的設(shè)置主要包括使用界面、登錄安全、用戶權(quán)限、標(biāo)簽生成規(guī)則等。 品牌功能在設(shè)置界面中的第一個(gè),它支持自定義CSS,修改邊欄的懸停狀態(tài),以及頁眉頁腳樣式等。安全功能設(shè)置中開啟了兩步認(rèn)證的機(jī)制,相關(guān)技術(shù)的原理和功能介紹在上文已做了詳細(xì)的描述。系統(tǒng)還支持“LDAP便捷登錄”,使得用戶可以使用域賬戶登錄,方便賬戶的快速搭建與使用。
用戶權(quán)限管理也是安全設(shè)置部分的重要部分。系統(tǒng)支持登錄、查看和操作權(quán)限的控制,支持通過權(quán)限組來分組管理用戶。系統(tǒng)提供了兩個(gè)特權(quán)用戶賬戶級(jí)別,即管理員和超級(jí)管理員。
資產(chǎn)標(biāo)簽功能能夠非常便捷地生成資產(chǎn)標(biāo)簽,標(biāo)簽的尺寸規(guī)格和編碼可以在后臺(tái)靈活設(shè)置。掃描二維碼可以快速定位到系統(tǒng)內(nèi)的資產(chǎn),生成的條碼如圖14所示。
圖14 系統(tǒng)生成的條碼標(biāo)簽
(3)資產(chǎn)管理
系統(tǒng)將技術(shù)設(shè)備分成資產(chǎn)、軟件許可證、附屬品、消耗品和組件五大類,對(duì)應(yīng)不同類型的管理模板也有細(xì)微的差別,精確的分類和管理也使得后臺(tái)管理人員的效率得以提高。
對(duì)于現(xiàn)有的技術(shù)設(shè)備資產(chǎn),可將數(shù)據(jù)整理成規(guī)范文檔后,通過Web界面導(dǎo)入。系統(tǒng)支持的文檔格式非常多,在文檔導(dǎo)入時(shí),建立好數(shù)據(jù)的對(duì)應(yīng)關(guān)系即可。導(dǎo)入后的資產(chǎn)類管理界面如圖15所示,在這里可以對(duì)資產(chǎn)進(jìn)行匯總統(tǒng)計(jì)、導(dǎo)出數(shù)據(jù)、增加備注、打印條碼、改派報(bào)廢、維護(hù)更新記錄等操作。
(4)報(bào)告管理
系統(tǒng)中自帶的報(bào)告共有7種,還可以根據(jù)需要設(shè)置自定義報(bào)表。系統(tǒng)報(bào)表管理負(fù)責(zé)記錄用戶進(jìn)行增刪改查、修改權(quán)限等操作,以及對(duì)相關(guān)字段的匯總和導(dǎo)出。在網(wǎng)絡(luò)安全對(duì)應(yīng)用和法律層面都越來越被重視的今天,操作的記錄和追溯都是保證網(wǎng)絡(luò)安全的一個(gè)重要組成部分。
(5)手機(jī)掃碼
圖15 在Web頁面中上傳固定資產(chǎn)數(shù)據(jù)
通過微信小程序,手機(jī)搖身一變成了一個(gè)智能手持終端,方便了用戶隨時(shí)隨地查詢和管理分布范圍極廣的固定資產(chǎn)。例如,將巡檢時(shí)發(fā)現(xiàn)的問題及時(shí)備注并同步到系統(tǒng)后臺(tái)數(shù)據(jù)庫中。進(jìn)入微信小程序主界面之后,點(diǎn)擊條形碼按鈕,將手機(jī)鏡頭對(duì)準(zhǔn)條碼,可以查詢出該條碼設(shè)備的相關(guān)信息,如圖16所示。在該界面可以直接修改資產(chǎn)的相關(guān)信息,并可同步更新后臺(tái)的數(shù)據(jù), 完成檢錄等管理。
江蘇廣播技術(shù)部建立廣播技術(shù)管理平臺(tái)后,對(duì)于管理更加規(guī)范、服務(wù)更加便捷,得到了各廣播部的一致好評(píng),也為技術(shù)部在融合媒體態(tài)勢下做好面向全臺(tái)的技術(shù)服務(wù)打下了堅(jiān)實(shí)的基礎(chǔ)。
圖16 通過微信小程序查詢固定資產(chǎn)的相關(guān)信息