Axigen+OpenLdap+BerkeleyDB+ejabberd多域+JWchat

平台及相关软件:
OS:CentOS5.5
axigen-8.0.1.i386.rpm.run
db-4.8.30.tar.gz
openldap-2.4.28.tgz
ejabberd-2.1.11-linux-installer.bin

插件(可到axigen官网去下载):
axigen.schema
webmail-8.0.1-im.tar.gz

服务器主机名及IP:
hostname:corp.com
IP:192.168.0.11
域名1:corptest.com
域名2:heminjie.cn
域名3:minjie.net


一、首先安装Axigen Mail Server
sh axigen-8.0.1.i386.rpm.run

二、安装配置openldap

1、先安装支持编译软件gcc
yum -y install gcc

2、安装BerkeleyDB数据库
[root@localhost BerkeleyDB]# tar -zxvf db-4.8.30.tar.gz
[root@localhost BerkeleyDB]# cd db-4.8.30
[root@localhost db-4.8.24]# cd build_unix/
[root@localhost db-4.8.24]# ../dist/configure
[root@localhost db-4.8.24]# make
[root@localhost db-4.8.24]# make install

3、安装openldap
增加库路径:
# vi /etc/ld.so.conf
/usr/local/BerkeleyDB.4.8/lib
     
设置环境变量编译:

先安装openssl
yum install openssl*

[root@corp opt]# tar -zxvf openldap-2.4.28.tgz
[root@corp opt]# cd openldap-2.4.28
#ln -s /usr/local/ssl/lib/* /lib/
#ln -s /usr/local/ssl/lib/* /usr/local/lib/

[root@corp openldap-2.4.28]# env CPPFLAGS="-I/usr/local/BerkeleyDB.4.8/include" LDFLAGS="-L/usr/local/BerkeleyDB.4.8/lib" ./configure --prefix=/usr/local/openldap --enable-ldbm --enable-syncprov --enable-memberof --with-tls=openssl --enable-dynamic --enable-overlays --enable-accesslog
[root@corp openldap-2.4.28]# make depend
[root@corp openldap-2.4.28]# make
[root@corp openldap-2.4.28]# make test
[root@corp openldap-2.4.28]# make install

4、配置openldap
[root@corp /]# cd /usr/local/openldap/etc/openldap/
[root@corp openldap]# vi slapd.conf

#slapd.conf至少要包含下面这些配置(具体可参见附件slapd.conf配置模板):

 
  
  1. include         /usr/local/openldap/etc/openldap/schema/core.schema  
  2. include         /usr/local/openldap/etc/openldap/schema/cosine.schema  
  3. include         /usr/local/openldap/etc/openldap/schema/inetorgperson.schema  
  4. include         /usr/local/openldap/etc/openldap/schema/misc.schema  
  5. include         /usr/local/openldap/etc/openldap/schema/axigen.schema  
  6.  
  7. pidfile         /usr/local/openldap/var/run/slapd.pid  
  8. argsfile        /usr/local/openldap/var/run/slapd.args  
  9.  
  10. modulepath      /usr/local/openldap/libexec/openldap   
  11. moduleload memberof.la  
  12. moduleload syncprov.la  
  13.  
  14. serverID 1   
  15.  
  16. database bdb  
  17.  
  18. suffix "dc=base"  
  19. rootdn "cn=admin,dc=base"  
  20. rootpw 123456  
  21.  
  22. directory       /usr/local/openldap/var/openldap-data  
  23.  
  24. index objectClass eq  
  25. index ou,cn,mail,surname,givenname eq,pres,sub  
  26. index entryUUID,entryCSN eq  
  27.  
  28. overlay syncprov  
  29. syncprov-checkpoint 100 30  
  30. syncprov-sessionlog 100  
  31. overlay memberof  
  32. memberof-refint true  

配置完成,需要把axigen.schema复制到/usr/local/openldap/etc/openldap/schema/目录下:

最后启动openldap服务:
[root@corp /]# cd /usr/local/openldap/libexec/
[root@corp libexec]# ./slapd

5、初始化openldap,简单的说,就像DNS,就是先定义一个根(base),然后再定义二级域(com.base/cn.base/net.base),再定义三级域(corptest.com.base/heminjie.cn.base/minjie.net.base):

[root@corp bin]# cd /usr/local/openldap/bin/
[root@corp bin]#vi users.ldif

#下面文件中后边一定不要有空格,

 
  
  1. dn: dc=base 
  2. objectClass: dcObject  
  3. objectClass: organization  
  4. dc: base  
  5. o: base  
  6.  
  7. dn: dc=com,dc=base 
  8. objectClass: dcObject  
  9. objectClass: organization  
  10. dc: com  
  11. o: com  
  12.  
  13. dn: dc=cn,dc=base 
  14. objectClass: dcObject  
  15. objectClass: organization  
  16. dc: cn  
  17. o: cn  
  18.  
  19. dn: dc=net,dc=base 
  20. objectClass: dcObject  
  21. objectClass: organization  
  22. dc: net  
  23. o: net  
  24.  
  25. dn: dc=corptest,dc=com,dc=base 
  26. objectClass: dcObject  
  27. objectClass: organization  
  28. dc: corptest  
  29. o: corptest  
  30.  
  31. dn: dc=heminjie,dc=cn,dc=base 
  32. objectClass: dcObject  
  33. objectClass: organization  
  34. dc: heminjie  
  35. o: heminjie  
  36.  
  37. dn: dc=minjie,dc=net,dc=base 
  38. objectClass: dcObject  
  39. objectClass: organization  
  40. dc: minjie  
  41. o: minjie  
  42.  
  43. dn: ou=users,dc=corptest,dc=com,dc=base 
  44. objectClass: organizationalUnit  
  45. ou: users   
  46.  
  47. dn: ou=groups,dc=corptest,dc=com,dc=base 
  48. objectClass: organizationalUnit  
  49. ou: groups  
  50.  
  51. dn: ou=users,dc=heminjie,dc=cn,dc=base 
  52. objectClass: organizationalUnit  
  53. ou: users  
  54.  
  55. dn: ou=groups,dc=heminjie,dc=cn,dc=base 
  56. objectClass: organizationalUnit  
  57. ou: groups  
  58.  
  59. dn: ou=users,dc=minjie,dc=net,dc=base 
  60. objectClass: organizationalUnit  
  61. ou: users  
  62.  
  63. dn: ou=groups,dc=minjie,dc=net,dc=base 
  64. objectClass: organizationalUnit  
  65. ou: groups 

wq!进行保存,最后需要导入到openldap
[root@corp bin]# ./ldapadd -x -D "cn=admin,dc=base" -W -f users.ldif
Enter LDAP Password: 123456

导入成功后,可以根据下面命令进行查询(如导入出错,请核对users.ldif文件,90%原因是ldif文件有误):
./ldapsearch -b "dc=base" -x   (查询所有)
./ldapsearch -b "dc=com,dc=base" -x   (查询所有.com结尾)
./ldapsearch -b "dc=corptest,dc=com,dc=base" -x   (查询corptest.com域)

6、停止openldap服务方法:
先查询openldap进程号,再进行kill进程号,来到达停止服务的目的:
[root@corp bin]# netstat -tunlp | grep :389
tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN      4200/slapd         
tcp        0      0 :::389                      :::*                        LISTEN      4200/slapd         
[root@corp bin]# kill 4200

三、在Axigen上配置opneldap

1、登陆到webadmin,在左侧依次选择"Clustering"--"Clustering Setup",在"Connector List"点击"Add Connector"来增加一个ldap连接,具体主要设置参数:

LDAP Connector name: im-ldap
IP / Hostname:127.0.0.1
Port:389
Synchronization direction:Axigen to Ldap

选中Use Administrative DN
Admin DN:cn=admin,dc=base  
Admin DN Password:123456
Account base DN:ou=Users,%x,dc=base
Group base DN:ou=Groups,%x,dc=base

最后点击"Update"完成添加。

2、到相应域名下开启openldap服务,并选择刚才添加的"im-ldap"连接。

 
四、安装配置ejabberd

1、安装ejabberd
[root@corp opt]# chmod o+x ejabberd-2.1.11-linux-installer.bin
[root@corp opt]# ./ejabberd-2.1.11-linux-installer.bin

 
  
  1. Please choose an option [2] :             
  2. Do you accept this license? [y/n]: y  
  3. Installation Directory [/opt/ejabberd-2.1.11]:   
  4. ejabberd server domain [corp.com]: (这里要说明一下corp.com是本机的主机名,也可以设置不存在的域名,只是为了日后管理ejabberd用)  
  5. Administrator username [admin]:   
  6. Administrator password :123123  #输入密码  
  7. Retype password :123123    #确认输入密码  
  8. Cluster [y/N]: n  
  9. Do you want to continue? [Y/n]:   
  10. View Readme file? [Y/n]: n 

2、配置ejabberd
[root@corp /]# cd /opt/ejabberd-2.1.11/conf/
[root@corp conf]# vi ejabberd.cfg

以下修改是在原配置文件上修改,其他设置还需保留。

增加主机名:

 
  
  1. {hosts, ["corp.com","corptest.com","heminjie.cn","minjie.net"]}.    #增加corp.com域,是为了用户管理ejabberd 

添加主机验证:

 
  
  1. %%{host_config, "public.example.org", [{auth_method, [internal, anonymous]}]}.  
  2. {host_config, "corp.com", [{auth_method, internal}]}.     #设置corp.com为本地验证  
  3.  
  4. {host_config, "corptest.com", [{auth_method,   ldap},  
  5.                               {ldap_servers,  ["corp.com"]},  
  6.                               {ldap_port, 389},  
  7.          {ldap_encrypt, none},     
  8.                               {ldap_uids,     [{"uid", "%u"}]},  
  9.                               {ldap_base,   "dc=corptest,dc=com,dc=base"},  
  10.                               {ldap_rootdn,   "cn=admin,dc=base"},  
  11.                               {ldap_password, "123456"}]}.  
  12.  
  13. {host_config, "heminjie.cn", [{auth_method,   ldap},  
  14.                               {ldap_servers,  ["corp.com"]},  
  15.                               {ldap_port, 389},   
  16.                               {ldap_encrypt, none},  
  17.                               {ldap_uids,     [{"uid", "%u"}]},  
  18.                               {ldap_base,   "dc=heminjie,dc=cn,dc=base"},  
  19.                               {ldap_rootdn,   "cn=admin,dc=base"},  
  20.                               {ldap_password, "123456"}]}.  
  21.  
  22. {host_config, "minjie.net", [{auth_method,   ldap},  
  23.                               {ldap_servers,  ["corp.com"]},  
  24.                               {ldap_port, 389},   
  25.                               {ldap_encrypt, none},   
  26.                               {ldap_uids,     [{"uid", "%u"}]},  
  27.                               {ldap_base,   "dc=minjie,dc=net,dc=base"},  
  28.                               {ldap_rootdn,   "cn=admin,dc=base"},  
  29.                               {ldap_password, "123456"}]}. 

设置ejabberd管理员:

 
  
  1. %% The 'admin' ACL grants administrative privileges to Jabber accounts.  
  2. %% You can put as many accounts as you want.  
  3. %%  
  4. {acl, admin, {user, "admin", "corp.com"}}.   #这里定义管理ejabberd的帐号,默认管理帐号是admin@corp.com 


添加模块: 

 
  
  1. {mod_roster,   []},  
  2. %%{mod_service_log,[]},  
  3. {mod_shared_roster,[]},  
  4. %%{mod_stats,    []},  
  5. {mod_time,     []},  
  6. {mod_vcard,    []},  
  7. {mod_version,  []}  
  8. }. 

以上都是公共模块,需要添加新模块,每个域名都需要添加一个。

 
  
  1. {host_config, "corptest.com",  
  2.  [{{add, modules}, [  
  3.                     {mod_echo,       [{host, "echo-service.corptest.com"}]},  
  4.                     {mod_http_bind,  []},  
  5.   {mod_vcard_ldap, [   
  6.    {ldap_servers, ["corp.com"]},   
  7.    {ldap_rootdn, "cn=admin,dc=base"},   
  8.    {ldap_password, "123456"},   
  9.    {ldap_base, "ou=users,dc=corptest,dc=com,dc=base"},   
  10.    {ldap_vcard_map, [   
  11.      {"NICKNAME", "%s", ["axiNickName"]},   
  12.      {"FN", "%s", ["displayName"]},   
  13.      {"FAMILY", "%s", ["sn"]},   
  14.      {"GIVEN", "%s", ["givenName"]},   
  15.      {"MIDDLE", "%s", ["axiMiddleName"]},   
  16.      {"ORGNAME", "%s", ["axiCompany"]},   
  17.      {"ORGUNIT", "%s", ["axiDepartment"]},   
  18.      {"CTRY", "%s", ["c"]},   
  19.      {"LOCALITY", "%s", ["l"]},   
  20.      {"STREET", "%s", ["street"]},   
  21.      {"REGION", "%s", ["st"]},   
  22.      {"PCODE", "%s", ["postalCode"]},   
  23.      {"TITLE", "%s", ["title"]},   
  24.      {"URL", "%s", ["wWWHomePage"]},   
  25.      {"TEL", "%s", ["mobile"]},   
  26.      {"EMAIL", "%s", ["axiPersonalEmail"]},   
  27.      {"BDAY", "%s", ["axiBirthday"]},   
  28.      {"ROLE", "%s", ["axiProfession"]} ]},   
  29.    {ldap_search_fields, [   
  30.      {"User", "%u"},   
  31.      {"Nickname", "axiNickName"},   
  32.      {"Given Name", "givenName"},   
  33.      {"Family Name", "sn"},   
  34.      {"Email", "axiPersonalEmail"} ]},    
  35.    {ldap_search_reported, [   
  36.      {"Full Name", "FN"},   
  37.      {"Given Name", "GIVEN"},   
  38.      {"Family Name", "FAMILY"},   
  39.      {"Email", "EMAIL"} ]} ]}  
  40.  
  41.                    ]  
  42.   }  
  43.  ]}.  
  44.  
  45. {host_config, "heminjie.cn",  
  46.  [{{add, modules}, [  
  47.                     {mod_echo,       [{host, "echo-service.heminjie.cn"}]},  
  48.                     {mod_http_bind,  []},  
  49.   {mod_vcard_ldap, [   
  50.    {ldap_servers, ["corp.com"]},   
  51.    {ldap_rootdn, "cn=admin,dc=base"},   
  52.    {ldap_password, "123456"},   
  53.    {ldap_base, "ou=users,dc=heminjie,dc=cn,dc=base"},   
  54.    {ldap_vcard_map, [   
  55.      {"NICKNAME", "%s", ["axiNickName"]},   
  56.      {"FN", "%s", ["displayName"]},   
  57.      {"FAMILY", "%s", ["sn"]},   
  58.      {"GIVEN", "%s", ["givenName"]},   
  59.      {"MIDDLE", "%s", ["axiMiddleName"]},   
  60.      {"ORGNAME", "%s", ["axiCompany"]},   
  61.      {"ORGUNIT", "%s", ["axiDepartment"]},   
  62.      {"CTRY", "%s", ["c"]},   
  63.      {"LOCALITY", "%s", ["l"]},   
  64.      {"STREET", "%s", ["street"]},   
  65.      {"REGION", "%s", ["st"]},   
  66.      {"PCODE", "%s", ["postalCode"]},   
  67.      {"TITLE", "%s", ["title"]},   
  68.      {"URL", "%s", ["wWWHomePage"]},   
  69.      {"TEL", "%s", ["mobile"]},   
  70.      {"EMAIL", "%s", ["axiPersonalEmail"]},   
  71.      {"BDAY", "%s", ["axiBirthday"]},   
  72.      {"ROLE", "%s", ["axiProfession"]} ]},   
  73.    {ldap_search_fields, [   
  74.      {"User", "%u"},   
  75.      {"Nickname", "axiNickName"},   
  76.      {"Given Name", "givenName"},   
  77.      {"Family Name", "sn"},   
  78.      {"Email", "axiPersonalEmail"} ]},    
  79.    {ldap_search_reported, [   
  80.      {"Full Name", "FN"},   
  81.      {"Given Name", "GIVEN"},   
  82.      {"Family Name", "FAMILY"},   
  83.      {"Email", "EMAIL"} ]} ]}  
  84.                    ]  
  85.   }  
  86.  ]}.  
  87.  
  88. {host_config, "minjie.net",  
  89.  [{{add, modules}, [  
  90.                     {mod_echo,       [{host, "echo-service.minjie.net"}]},  
  91.                     {mod_http_bind,  []},  
  92.   {mod_vcard_ldap, [   
  93.    {ldap_servers, ["corp.com"]},   
  94.    {ldap_rootdn, "cn=admin,dc=base"},   
  95.    {ldap_password, "123456"},   
  96.    {ldap_base, "ou=users,dc=minjie,dc=net,dc=base"},   
  97.    {ldap_vcard_map, [   
  98.      {"NICKNAME", "%s", ["axiNickName"]},   
  99.      {"FN", "%s", ["displayName"]},   
  100.      {"FAMILY", "%s", ["sn"]},   
  101.      {"GIVEN", "%s", ["givenName"]},   
  102.      {"MIDDLE", "%s", ["axiMiddleName"]},   
  103.      {"ORGNAME", "%s", ["axiCompany"]},   
  104.      {"ORGUNIT", "%s", ["axiDepartment"]},   
  105.      {"CTRY", "%s", ["c"]},   
  106.      {"LOCALITY", "%s", ["l"]},   
  107.      {"STREET", "%s", ["street"]},   
  108.      {"REGION", "%s", ["st"]},   
  109.      {"PCODE", "%s", ["postalCode"]},   
  110.      {"TITLE", "%s", ["title"]},   
  111.      {"URL", "%s", ["wWWHomePage"]},   
  112.      {"TEL", "%s", ["mobile"]},   
  113.      {"EMAIL", "%s", ["axiPersonalEmail"]},   
  114.      {"BDAY", "%s", ["axiBirthday"]},   
  115.      {"ROLE", "%s", ["axiProfession"]} ]},   
  116.    {ldap_search_fields, [   
  117.      {"User", "%u"},   
  118.      {"Nickname", "axiNickName"},   
  119.      {"Given Name", "givenName"},   
  120.      {"Family Name", "sn"},   
  121.      {"Email", "axiPersonalEmail"} ]},    
  122.    {ldap_search_reported, [   
  123.      {"Full Name", "FN"},   
  124.      {"Given Name", "GIVEN"},   
  125.      {"Family Name", "FAMILY"},   
  126.      {"Email", "EMAIL"} ]} ]}  
  127.                    ]  
  128.   }  
  129.  ]}. 

3、启动ejabberd
[root@corp /]# cd /opt/ejabberd-2.1.11/bin/
[root@corp bin]# ./start

4、管理ejabberd
管理网址:http://192.168.0.11:5280/admin
用户名:admin@corp.com
密码:123123    #刚才安装ejabberd时设置的密码

五、配置JWchat
 

 
  
  1. [root@corp /]# cd /var/opt/axigen/  
  2. [root@corp axigen]# mv webmail webmail.bak  
  3. [root@test axigen]# tar -zxvf webmail-8.0.1-im.tar.gz   
  4. [root@test axigen]# chown -R axigen:axigen webmail  
  5. [root@corp axigen]# cd /var/opt/axigen/webmail/default/jwchat  
  6. [root@corp jwchat]# vi config.js  

#主要修改下面几个设置:

 
  
  1. var CONNECTION_SECURE = false;  
  2. var IM_SERVER_URL = "http://192.168.0.11:5280/http-bind/";  
  3. var DOMAIN_NAME = top.Axi.AccountInfo.domainname; 

重启Axigen服务生效:

[root@corp jwchat]# service axigen restart

到此,所有配置已经完毕。


可以测试一下,在Axigen webadmin中开设帐号,然后登陆webmail看看右侧im帐号是否已在线。


如中间有出错,具体问题具体对待,如遇到棘手问题,可以联系我:

我的email:heminjie369@163.com