yicon部署指南(ldap登陸)- Iconfont平臺

前言

YIcon 是一個集圖標上傳、展現、使用於一身的字體圖標管理平臺,由去哪兒公司團隊開發,Ta 擁有嚴格的審覈流程、可控的項目版本和完善的權限管理。針對公司前端開發,使用iconfont可極大的輔助開發,減小切圖和圖片的http請求,固然也可使用阿里iconfont,但阿里iconfont平臺爲我的帳號上傳管理,在管理上存在必定的風險,可能會由於人爲因素致使產品缺陷,不符合公司要求,所以,爲本身公司搭建內部iconfont平臺也十分有必要,通過調研探索,開源免費可搭建的平臺有YIcon、NIcon,參考鏈接以下:html

YIcon:ued.qunar.com/yicon/build…前端

NIcon:github.com/bolin-L/nic…node

NIcon的搭建在我其餘一篇文章中已經講述《Iconfont平臺-NIcon搭建教程》本文再也不贅述,YIcon的搭建官方雖然給出了部署指南,但其中的細節寫的很不明確,給搭建者帶來較大的麻煩,尤爲接入第三方ldap登陸時的配置項,十分模糊,通過做者的嘗試,針對ldap給出細節的配置指南,但願能給讀者帶來幫助。mysql

此外,因爲yicon去哪兒已經多年未維護,總體的包版本都偏老,後續若考慮平臺升級優化,這將會給你帶來很大的工做量。github上,官方還給出了docker部署的方案,可是該方案存在較多的缺陷,文檔也不清晰,致使沒法生成可部署的docker鏡像,生成了也會由於種種環境問題致使生成的鏡像沒法運行,所以建議你們慎重選擇yicon,如需docker部署,可選擇使用官方提供的鏡像,先部署後進入鏡像容器修改配置和源碼重啓服務來達到docker部署的效果(主要是包版本真的太老了,連node都是超低版本,無奈啊~)。linux

官方docker部署方案:github.com/YMFE/YIcon-…nginx

1、環境準備

  • linux/unix
  • node 4.5+ (不要使用最新版本node,建議使用最穩定的8.x的版本,不然裝包會有問題
  • npm 3.x
  • mysql 5.5+
  • fontconfig lib

2、ldap的配置

其餘的搭建步驟按照官方指導便可完成,此處附上ldap的配置詳解,示例配置以下:git

{  
  "log": {    
    "appenders": [ 
      { 
        "category": "normal",
        "type": "dateFile",
        "filename": "/home/admin/logs",
        "alwaysIncludePattern": true,
        "pattern": "-yyyy-MM-dd.log"
       }
     ]
   },
  // 數據庫的配置  
  "model": { 
    "host": "10.0.0.110",
    "username": "frontEnd",    
    "password": "iconfont",    
    "port": "12580",    
    "database": "front_center_iconfont",    
    "dialect": "mysql"  
   },
  // login config;  
  "login": {    
    "ssoType": "ldap",    
    "server": "ldap://10.0.10.110:11306", // ldap的服務地址;   
    "bindDn": "cn=root", // 此處必須和searchDn一致,不然沒法登陸;   
    "baseDn": "ou=Users,dc=test,dc=com", // baseDn的配置,參考ldap的dn配置規則;    
    "bindPassword": "admin", // root帳戶的密碼;    
    "searchDn": "cn=root"  
   },  
   "source": {    
     "support": false,    
     "infoUrl": "",    
     "versionUrl": "",   
     "sourceUrl": "",    
     "cdn": ""  
    }
  }
複製代碼

按照如上的配置,可實現內網ldap帳號登陸。嚴格上來講,此ldap的配置並不符合標準的ldap登陸配置,yicon在代碼中將bindDn和baseDn作了字符串拼接,拼接後的纔是標準的baseDn,所以,不能將cn=root寫到baseDn中,須要單獨拆分開寫,searchDn和bindDn一致。github

3、修改源碼

修改文件:yicon/src/src/controller/modules/ldapauth.jssql

修改內容:docker

該文件第71行:
修改前:const searchDn = simpleParse([login.searchDn, login.baseDn].join(','), { username });
修改後:const searchDn = simpleParse([`cn=${username}`, login.baseDn].join(','), { username });
複製代碼

修改緣由:

此處源碼有bug,原來的代碼運行時會致使只有searchDn配置的帳號可登錄,其餘ldap的帳號不能登錄,由於他只會搜索searchDn配置的帳號,不會去查詢當前輸入的username,所以須要修改該行代碼,才能正常使用ldap登錄。

4、部署

1. 源碼部署

將修改配置和源碼後的工程上傳git後,在服務器上部署。

1. 安裝依賴:npm install(可能由於node等版本問題安裝會失敗,線上服務器node版本也不能隨意切換,不建議源碼安裝);
2. 進入src下,啓動start.sh腳本:sh start.sh(./start.sh);
3. 域名映射到啓動的端口上;
複製代碼

2. docker部署

第一步:

獲取docker鏡像並運行(使用了官方提供的鏡像);

# 下載鏡像

docker pull registry.cn-qingdao.aliyuncs.com/ymfe/yicon:latest

# 建立容器

docker run -idt -p 3000:3000 --name yicon registry.cn-qingdao.aliyuncs.com/ymfe/yicon
複製代碼

此處端口號 3000:3000(對外暴露的端口:容器的端口),對外暴露的端口號根據實際使用狀況調整;

第二步:

進入容器,修改配置;

1.進入容器;

# 查看容器id

docker ps

# 進入容器;

docker exec -it 容器id /bin/bash

2.修改yicon配置;

# 進入yicon目錄

cd yicon

# 編輯配置文件config.json,修改數據庫和登錄配置(model和login的配置項),接入線上ldap以及數據庫,eg:

"model": {

"host": "10.0.0.1",

"username": "frontEnd",

"password": "icon",

"port": "15381",

"database": "front_center_iconfont",

"dialect": "mysql"

},

"login": {

"ssoType": "ldap",

"server": "ldap://10.0.10.10:10086",

"bindDn": "cn=root",

"baseDn": "ou=Users,dc=caocao,dc=com",

"bindPassword": "123456",

"searchDn": "cn=root"

},

3.替換ldap登錄的js;

# 進入ldapauth.js所在目錄;

cd /src/src/controller/modules

# 替換登錄js;

mv ldapauth.js ldapauth.bak

mv ldapauth.bak.js ldapauth.js

打開該文件vi ldapauth.js並按照3、修改源碼中的介紹修改該源碼

至此,全部配置修改完成,重啓yicon服務:

pm2 restart yicon

# 退出容器

exit

第三步:

初始化數據庫;

初始化的sql文(github.com/YMFE/YIcon-…

修改文件,在首行插入:

use xxxxx(iconfont數據庫名);

# 登錄該數據庫初始化數據;

mysql -u iconfont -p123456 < iconfont.sql

第四步:

訪問驗證:ip:port,訪問yicon服務,使用線上ldap登錄,頁面展現無問題,ldap可登錄。

第五步:

域名配置;

申請iconfont獨立域名:yicon.xxxx.com

配置nginx代理服務,域名指向第一步鏡像運行時暴露的端口;

感謝收看,如對您有幫助,請多多支持,謝謝~

相關文章
相關標籤/搜索