如何部署Tigase XMPP服务端?

XMPP

1 基础知识

1.1 软件简介

Tigase XMPP Server是Tigase.net的旗舰服务器端软件,其提供XMPP服务或实时通讯(IC)服务,即Tigase是一个聊天服务器。

1.2 软件的功能

– 即时通讯服务(适合人员或机器)
– 聊天服务器

1.3 其他可选的即时通讯软件

1.3.1 开源产品

– EJabberd
– Openfire
– Jabberd2
– Prosody

1.3.2 非开源产品

– Isode
– Jabber XCP

1.4 软件特点

– 高度优化,核心代码小于1MB,运行最低仅需10MB内存
– 完全模块化,元素、组件、插件和功能都提供异常丰富的API配置和替换
– 灵活,易于调整和定制,可更具需求或环境定制
– 集群开箱即用,只需修改2行配置即可实现集群
– 硬件要求低,适合小型机,标准服务器以及虚机
– 经过严格测试,由专业工具进行兼容性测试和负载测试
– 内置支持脚本,支持Groovy,Python,Ruby和Scala进行模块扩展
– 易监控,可通过HTTP,SNMP,JMX,XMPP以及数据库进行监控并可服务邮件告警
– 安全,支持TLS,SASL,SSL等加密,API带身份隔离
– 支持在线升级,只是热插拔和系统升级
– 开源

1.5 配置文件

1.5.1 服务器配置文件

– 文件路径“%{TIGASE_HOME}/etc/tigase.xml”
– 存储tigase运行时的配置
– 缺少该文件时会在运行时自动创建
– 部分配置来源于init.properties
– 修改参数建议直接修改init.properties
注:该配置文件支持的属性列表如下,
http://docs.tigase.org/tigase-server/7.0.1/Administration_Guide/html/#_tigase_xmpp_server_configuration_properties

1.5.2 服务器启动文件

– 文件路径“%{TIGASE_HOME}/etc/tigase.conf”
– 该文件定义Java虚拟机启动的系统设置和环境参数
– 该文件仅仅适用于Bash shell的类Unix系统
– 该文件的配置将被”%{TIGASE_HOME}/scripts/tigase.sh”脚本加载
– Windows系统请使用wapper.conf

2 安装部署

2.1 系统配置

2.1.1 基本环境信息

IP Address = 10.168.0.90
Host Name = tigase.cmdschool.org
OS = CentOS 7.3 x86_64

2.1.2 安装所需的工具

yum install -y vim wget unzip net-tools

2.2 安装前的准备

2.2.1 安装JDK环境

请参阅以下文档部署JDK环境,
https://www.cmdschool.org/archives/397

2.2.2 准备数据库

请参阅以下文档部署MariaDB数据库,
https://www.cmdschool.org/archives/2364

2.2.2 预设防火墙端口

firewall-cmd --permanent --add-port 5222-5223/tcp
firewall-cmd --permanent --add-port 5269/tcp
firewall-cmd --permanent --add-port 5280/tcp
firewall-cmd --permanent --add-port 5290/tcp
firewall-cmd --permanent --add-port 8080/tcp
firewall-cmd --reload
firewall-cmd --list-all

2.2.3 配置名称解析

echo '10.168.0.90 tigase.cmdschool.org' >> /etc/hosts
echo '10.168.0.90 cmdschool.org' >> /etc/hosts

注:
– 此操作代替DNS解析,如有DNS解析则无需设置
– 此域名解析应该配置当前服务器的hostname

2.2.5 下载安装包

cd ~
wget https://tigase.tech/attachments/2455/tigase-server-7.0.1-b3810-dist-max.zip

注:如果无法下载请使用浏览器下载

2.3 部署tigase

2.3.1 创建运行用户

groupadd -g 982 tigase
useradd -u 982 -g 982 -d /usr/tigase -s /bin/bash tigase

2.3.2 解压安装包

cd ~
unzip tigase-server-7.0.1-b3810-dist-max.zip

2.3.3 部署Tigase XMPP目录

mv tigase-server-7.0.1-b3810 /usr/
chown root:tigase -R /usr/tigase-server-7.0.1-b3810
chmod 775 -R /usr/tigase-server-7.0.1-b3810
rm -rf /usr/tigase
ln -s /usr/tigase-server-7.0.1-b3810/ /usr/tigase

2.3.4 配置Tigase XMPP环境变量

echo 'export TIGASE_HOME="/usr/tigase"' > /etc/profile.d/tigase.sh
source /etc/profile

2.3.5 部署配置文件

mkdir /etc/tigase
cp ${TIGASE_HOME}/etc/init.properties ${TIGASE_HOME}/etc/init.properties.default
cp ${TIGASE_HOME}/etc/tigase.conf ${TIGASE_HOME}/etc/tigase.conf.default
ln -s ${TIGASE_HOME}/etc/init.properties /etc/tigase/init.properties
ln -s ${TIGASE_HOME}/etc/tigase.conf /etc/tigase/tigase.conf

2.3.6 修改启动配置文件

vim /etc/tigase/tigase.conf

修改如下参数:

osgiEnabled=true
JAVA_HOME="/usr/java/jdk1.8.0_161"
TIGASE_HOME="/usr/tigase"
TIGASE_CONSOLE_LOG="/var/log/tigase/tigase-console.log"
TIGASE_CONFIG="/etc/tigase/tigase.xml"
TIGASE_OPTIONS=" --property-file /etc/tigase/init.properties "
TIGASE_PID="/var/run/tigase/tigase.pid"

注:Java家目录位置是“/usr/java/jdk1.8.0_161”

2.3.7 部署Tigase XMPP日志目录

mkdir /var/log/tigase
chown root:tigase -R /var/log/tigase
chmod 775 -R /var/log/tigase

2.3.8 部署Tigase XMPP PID目录

mkdir -p /var/run/tigase
chown root:tigase /var/run/tigase
chmod 775 /var/run/tigase

2.3.9 修改数据库字符编码格式

vim /etc/my.cnf

加入如下参数:

[mysqld]
character-set-server=utf8

重启服务使配置生效

/etc/init.d/mysqld restart

确认服务端的字符编码格式修改成功,

mysql -uroot -p -e "show variables like 'character_set_server';"

加入如下参数:

+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| character_set_server | utf8  |
+----------------------+-------+

确认客户端的字符编码格式修改成功,

mysql -uroot -p -e "show variables like 'character_set_client';"

加入如下参数:

+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| character_set_client | utf8  |
+----------------------+-------+

2.4 尝试启动服务

2.4.1 手动启动服务

cd /usr/tigase
sudo -u tigase ./scripts/tigase.sh start

2.4.2 查询服务状态

cd /usr/tigase
sudo -u tigase ./scripts/tigase.sh status

2.4.3 检查服务的端口

netstat -antp | grep ::: | grep java

端口显示如下:

tcp6       0      0 :::5290                 :::*                    LISTEN      4174/java
tcp6       0      0 :::8080                 :::*                    LISTEN      4174/java
tcp6       0      0 :::5269                 :::*                    LISTEN      4174/java
tcp6       0      0 :::5280                 :::*                    LISTEN      4174/java
tcp6       0      0 :::5222                 :::*                    LISTEN      4174/java
tcp6       0      0 :::5223                 :::*                    LISTEN      4174/java

2.5 使用Web向导配置tigase

2.5.1 生成配置文件

http://10.168.0.90:8080/setup/
注:按照以上向导提示生成配置(按照向导跑,简单这里不详述)并单击保存

2.5.2 校验保存的配置

cat /etc/tigase/init.properties

保存的配置如下:

config-type=--gen-config-def

--virt-hosts=cmdschool.org
--admins=admin@cmdschool.org

--debug=server

--user-db-uri=jdbc:mysql://localhost/tigasedb?user=tigase&password=tigasepwd


--sm-plugins=+jabber\:iq\:auth,+urn\:ietf\:params\:xml\:ns\:xmpp-sasl,+urn\:ietf\:params\:xml\:ns\:xmpp-bind,+urn\:ietf\:params\:xml\:ns\:xmpp-session,+jabber\:iq\:register,+jabber\:iq\:roster,+presence,+basic-filter,+domain-filter,+jabber\:iq\:privacy,+jabber\:iq\:version,+http\://jabber.org/protocol/stats,+starttls,-msgoffline,+vcard-temp,+http\://jabber.org/protocol/commands,+jabber\:iq\:private,+urn\:xmpp\:ping,+pep,+zlib,+message-archive-xep-0136,+amp

--comp-name-1=muc
--comp-class-1=tigase.muc.MUCComponnet

--comp-name-2=pubsub
--comp-class-2=tigase.pubsub.PubSubComponent

--comp-name-3=http
--comp-class-3=tigase.http.HttpMessageReceiver

2.5.2 重启服务使配置生效

cd /usr/tigase
sudo -u tigase ./scripts/tigase.sh restart

3 优化服务

3.1 优化服务的启动

3.1.1 手动停止服务

cd /usr/tigase
sudo -u tigase ./scripts/tigase.sh stop

3.1.2 部署启动脚本

cp ${TIGASE_HOME}/scripts/redhat/init.d/tigase /etc/init.d/tigased

3.1.3 修改环境变量

vim /etc/init.d/tigased

加入如下环境变量

JAVA_HOME="/usr/java/jdk1.8.0_161"

USERNAME=tigase
USERGROUP=tigase
NAME=tigase
DESC="Tigase XMPP server"

TIGASE_HOME="/usr/tigase"
TIGASE_LIB=${TIGASE_HOME}/jars
TIGASE_CONFIG=/etc/tigase/tigase-server.xml
TIGASE_OPTIONS=" --property-file /etc/tigase/init.properties "
TIGASE_PARAMS="/etc/tigase/tigase.conf"

PIDFILE="/var/run/tigase/tigase.pid"
TIGASE_CONSOLE_LOG="/var/log/tigase/tigase-console.log"

注:以上变量的部分变量会被TIGASE_PARAMS的配置覆盖
修改case分支判断的代码,

case "$1" in
        start)
        [...]
        exit 0
        ;;
        [...]
status|check)
        [...]
        ;;

注:
– 将start分支判断中的退出返回值修改为“exit 0”
– 将check分支判断中增加对“status”关键字的检测
以上如果不修改将会有如下错误,

Job for tigased.service failed. See 'systemctl status tigased.service' and 'journalctl -xn' for details.
                                                           [FAILED]

或如下错误:

Usage: /etc/init.d/tigase {start|stop|restart|clearrestart|clear|force-reload|check|status}

3.1.4 增加PDI目录自动创建

vim /etc/init.d/tigased
启动函数中加如下代码:

        PIDDIR=`echo $PIDFILE | awk -F'/' '{NF-=1;OFS="/";print}'`
        if ! test -d $PIDDIR; then
                 mkdir $PIDDIR
                 chown tigase:tigase $PIDDIR
        fi
        local cmd="cd ${TIGASE_HOME}; setsid $JAVA $TIGASE_CMD >>${TIGASE_CONSOLE_LOG} 2>&1 & echo \$! >$PIDFILE"
        su - ${USERNAME} -c "$cmd" || return 1

注:最后两行不用修改,仅用于定位代码

3.1.5 重载修改过的脚本

systemctl daemon-reload

3.1.6 测试启动脚本

/etc/init.d/tigased start
/etc/init.d/tigased status
/etc/init.d/tigased restart
/etc/init.d/tigased stop

3.1.7 配置服务自动启动

chkconfig tigased on

3.2 优化性能

3.2.1 修改打开文件的数量

sysctl -w fs.file-max=1610691
echo 'fs.file-max = 1610691' >> /etc/sysctl.d/99-sysctl.conf

3.2.2 修改KeepaLive设置

sysctl -w net.ipv4.tcp_keepalive_time=60
sysctl -w net.ipv4.tcp_keepalive_probes=3
sysctl -w net.ipv4.tcp_keepalive_intvl=90
echo 'net.ipv4.tcp_keepalive_time = 60' >> /etc/sysctl.d/99-sysctl.conf
echo 'net.ipv4.tcp_keepalive_probes = 3' >> /etc/sysctl.d/99-sysctl.conf
echo 'net.ipv4.tcp_keepalive_intvl = 90' >> /etc/sysctl.d/99-sysctl.conf

3.2.3 软硬限制

echo 'tigase               soft    nofile         600000' >> /etc/security/limits.d/30-tigase.conf
echo 'tigase               hard    nofile         600000' >> /etc/security/limits.d/30-tigase.conf

注:查询用户的句柄可使用如下命令,

lsof -u tigase | wc -l

4 客户端测试

以上仅仅完成服务端的配置,如果需要进行客户端测试,请按照如下链接配置客户端,
https://www.cmdschool.org/archives/2670

参阅文档:
=====================

tigase简介
——————
https://tigase.net/content/tigase-xmpp-server

tigase特点
—————–
http://docs.tigase.org/tigase-server/7.0.1/Administration_Guide/html/#_about_tigase_jabber_xmpp_server

安装向导
——————
http://docs.tigase.org/tigase-server/7.0.1/Administration_Guide/html/#_manual_installation_in_console_mode

MySQL数据库配置
——————–
http://docs.tigase.org/tigase-server/7.0.1/Administration_Guide/html/#_configuring_from_the_linux_shell_command_line

tigase的下载
——————
https://tigase.tech/projects/tigase-server/files

tigase的文档
——————
http://docs.tigase.org/index.html

mariadb jdbc
—————–
https://mariadb.com/kb/en/library/about-mariadb-connector-j/

属性的解析:
—————
http://docs.tigase.org/tigase-server/7.0.1/Properties_Guide/html/

没有评论

发表回复

Bash
如何用Tigase监控postfix smtp服务?

1 前言 一个问题,一篇文章,一出故事。 笔者生产中的smtp服务器最近因为负载均衡器的路由故障而导 …

Bash
如何用Tigase监控Elasticsearch集群?

1 前言 一个问题,一篇文章,一出故事。 笔者生产中有一套Elasticsearch集群,笔者为了能 …

Bash
如何实现监视PostFix的延迟邮件警告?

1 前言 一个问题,一篇文章,一出故事。 笔者生产中有一套PostFix集群,最近经历了一次邮件延迟 …