XMPP 可扩展消息与存在协议(英语:Extensible Messaging and Presence Protocol的缩写)是一种以XML为基础的开放式即时通信协议,是经由互联网工程工作小组(IETF)通过的互联网标准。XMPP因为被Google Talk应用而被广大网民所接触。虽然现在不流行了,但是由于任何人都可以运行自己的XMPP服务器,使个人及组织能够免费享受即时通信体验,不失为一种企业内部即时通信的良好解决方案。
ejabberd是一个免费的开源XMPP应用服务器,由ProcessOne开发,根据GNU GPL许可条款进行分发。 ejabberd是用ERlang语言编写的,而 ejabberd这个名字代表的就是Erlang Jabber Daemon。
2009年之前,ejabberd是用ERlang编写的最流行的开源应用程序之一。 自ejabberd版本3发布以来,版本控制方案已更改为将日期反映为”Year.Month-Revision”方式。 最新的稳定版本19.05可通过ejabberd官方下载页面获得,同时还可以从Github下载最新的ejabberd开发版。
本文将详细演示在CentOS 7上安装ejabberd XMPP Server,并使用MariaDB Server作为ejabberd数据库后端,然后使用Spark IM Client 进行功能测试。
本文只对在CentOS 7上安装和配置ejabberd进行详细展示,并没有涉及XMPP技术深入的理论概念。 如果对于XMPP协议有兴趣的话,建议您阅读相关书籍,以提高大家对XMPP协议及相关技术的理解。
1] 试验环境
我们要创建一个ejabberd的试验环境,可以由虚拟机来完成。基本信息如下:
- Hostname:ejabberd.rultr.com
- IP Adderss:172.16.200.1/24
- Operating System:CentOS 7.6
2] 安装ejabberd的必要软件包
我们将使用MariaDB作为ejabberd的后台数据库,所以需要首先安装MariaDB;同时,最新版的ejabberd依赖glibc 2.13及以上的软件包,我们一起安装以免出错。
# yum install -y mariadb-server glibc
注意:由于ejabberd只需要使用一个数据库来存作为后台,所以不需要安装最新版的MariaDB,当然如果使用最新版的也未尝不可。
安装完成后将MariaDB设置为开机自动运行,并启动数据库,并进行基本的安全配置:
# systemctl enable mariadb.service # systemctl start mariadb.service # mysql_secure_installation
3] 在CentOS 7系统安装ejabberd
安装ejabberd也比较简单,就是下载rpm软件包直接安装。最新版的ejabberd为19.05-0,安装使用如下命令:
# wget https://www.process-one.net/downloads/downloads-action.php?file=/ejabberd/19.05/ejabberd-19.05-0.x86_64.rpm # rpm -ivh ejabberd-19.05-0.x86_64.rpm
图.1 使用rpm命令安装ejabberd
如图.1 所示,系统已经成功安装了ejabberd。
4] 配置MariaDB作为ejabberd的后台数据库
现在需要做的就是在MariaDB数据库中创建ejabberd需要使用的数据库和用户:
# mysql -u root -p MariaDB [(none)]> CREATE DATABASE ejabberd; MariaDB [(none)]> GRANT ALL ON ejabberd.* TO 'ejabberd'@'localhost' IDENTIFIED BY 'rultr'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> EXIT;
图.2 在MariaDB数据库创建ejabberd用户和数据库
ejabberd的安装完成后,会自动加入数据库创建脚本供我们使用。默认脚本存放位置为”/opt/ejabberd-19.05/lib/ejabberd-19.05/priv/sql/”。该目录中包含了常用的数据库脚本,我们只需要根据自己使用的数据库系统使用对应脚本创建数据库即可。本例使用”/opt/ejabberd-19.05/lib/ejabberd-19.05/priv/sql/mysql.sql”:
# mysql -u ejabberd -prultr MariaDB [(none)]> USE ejabberd; MariaDB [ejabberd]> SOURCE /opt/ejabberd-19.05/lib/ejabberd-19.05/priv/sql/mysql.sql; MariaDB [ejabberd]> exit
脚本执行成功后,就在ejbaaerd数据库中创建了相应的对象,该数据库已经可以被ejabberd软件所使用了。
现在需要做的就是配置ejabberd连接MariaDB数据库。
ejabberd默认的内部数据库后端是Mnesia。 但是ejabberd XMPP服务器是非常灵活的,同样支持MySQL、SQLite、PostgreSQL和其他一些ejabberd数据库后端。
ejabberd的配置文件为”/opt/ejabberd/conf/ejabberd.yml”,使用如下命令修改其数据库配置信息:
# cat >> /opt/ejabberd/conf/ejabberd.yml << EOF > sql_type: mysql > sql_server: "localhost" > sql_database: "ejabberd" > sql_username: "ejabberd" > sql_password: "rultr" > EOF
图.3 配置ejabberd使用MariaDB数据库
现在,ejabberd已经被配置使用MariaDB数据库作为其后台数据库了。
5] 创建ejabberd的系统服务
ejabberd软件包同样提供了一个预定义systemd服务文件,位于”/opt/ejabberd-19.05/bin”目录的”ejabberd.service”。使用如下命令创建ejabberd服务并启动它:
# cp /opt/ejabberd-19.05/bin/ejabberd.service /usr/lib/systemd/system/ejabberd.service # systemctl enable ejabberd.service # systemctl start ejabberd.service
如果系统提供启动出现问题,则多半是由于ejabberd配置有问题,仔细检查”ejabberd.yml”中的内容加以解决。
图.4 启动ejabberd服务并查看状态
6] 配置CentOS 7防火墙开启ejabberd应用端口
CentOS 7默认启用了Firewalld服务,则使用如下命令开启ejabberd所侦听的端口:
# firewall-cmd --permanent --add-port={5280,5222}/tcp # firewall-cmd --reload
7] 创建管理ejabberd控制台的管理员帐户
现在,就可以使用”ejabberdctl”命令来创建管理ejabberd控制台的管理员账户,如果提示命令找不到,就需要先将该命令所在目录加入到环境变量中:
# export PATH=$PATH:/opt/ejabberd-19.05/bin/ # ejabberdctl register admin 172.16.200.1 rultr
由于rultr.com是公网中存在的域名,直接拿来使用有些问题。故注册管理台用户时使用了主机的IP地址进行注册。修改”ejabberd.yml”中内容如下:
language: "en" hosts: - "localhost" - "172.16.200.1"
重新启动ejabberd服务后,再使用第二条命令注册就不会出错了。
通过这条命令,我们创建了一个”172.16.200.1″虚拟主机,管理员账户admin,密码同样为admin。
现在,使用浏览器访问”http://ejabberd.rultr.com:5280/admin”访问ejabberd的控制台,首先会要求进行身份验证,用admin用户登录即可:
图.5 ejabberd认证窗口
认证成功后,就可以登录到ejabberd的后台管理页面,显示如下:
图.6 ejabberd管理台页面
可以看到,在配置文件中添加的虚拟主机都会显示出来。
点击”172.16.200.1″这个虚拟主机,然后在菜单中的”虚拟主机”->”对应主机”->”用户”->输入用户名和密码->”添加用户”,便完成了该主机用户的添加:
图.7 添加ejabberd虚拟主机用户
8] 使用IM客户端测试ejabberd服务器
想要测试新建的ejabberd XMPP服务器是否能用,只需要使用客户端连接一下服务器验证是否可能即可。
XMPP的客户端有很多种,可以访问官方网站客户端列表查看客户端信息,我们这里选用Mozilla Thunderbird。
下载安装包安装成功后,启动Thunderbird软件,然后按如下步骤添加一个聊天帐户:
首先点击帐户设置,主界面找不到的话,也可以在功能菜单->”选项”->”帐户设置”中打开:
图.8 Thunderbird软件设置帐户
然后,在”账户操作”中选择”添加聊天帐户”:
图.9 Thunderbird添加聊天帐户
在之后弹出的对话框中选择XMPP协议,当然也可以在Thunderbird的主界面点击账户设置下面的聊天图标直接进入到这一步:
图.10 Thunderbird聊天帐户选择协议
选择XMPP后点击下一步继续:
图.11 输入XMPP账户信息
输入对应的XMPP账户信息,注意我们的虚拟主机是以IP地址注册的,所以在域名处直接填写ejabberd服务器地址。填写完成后,点击下一步继续:
图.12 输入用户密码
输入在管理控制台给rultr用户设置的密码后,点击下步继续:
图.13 输入聊天别名和服务器信息
输入聊天别名(可自行设置,相当于昵称)和XMPP协议服务器IP地址后,点击下一步继续:
图.14 XMPP账户添加完成
点击完成,便在Thunderbird软件中添加了一个XMPP聊天帐户,使用我们刚刚新建的ejabberd服务器。
此时,再次回到Thunderbird主界面,点击聊天选项卡,点击”显示账户”按钮,就可以看到当前聊天帐户的基本信息:
图.15 显示Thunderbird聊天账户信息
同样,也可以打开ejabberd的控制台页面,会看到此时账户信息会发生变化,rultr用户会显示为在线:
图.16 在ejabberd控制台显示帐户信息
至此,我们已经成功创建了一台可用的XMPP服务器,可以作为企业内部即时通信的完美解决方案。