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代理服务,域名指向第一步镜像运行时暴露的端口;

感谢收看,如对您有帮助,请多多支持,谢谢~

相关文章
相关标签/搜索