一步一步带你安装ejabberd-18.04

网上有很多关于ejabberd安装的教程,但是按照网上的教程均会出现各种问题(小编对于ejabberd是零基础),所以总结下自己安装ejabberd的过程,为此卸载重新安装
ejabberd支持的协议
https://www.process-one.net/en/ejabberd/protocols/

ejabberd18.04 阿里云安装,配置

首先上个效果图:安装成功后,喜悦
这里写图片描述

一、官网下载https://www.process-one.net/en/ejabberd/downloads
根据自己实际系统,自行下载合适软件(二进制文件)
这里写图片描述

二、将下载文件Copy到服务端,小编这里使用的是Xshell,文件传输使用的是xftp,你还可以使用rz命令
控制台直接执行 ./ejabberd-18.04-linux-x86_64-installer.run
网上有说要改此文件权限(才能运行)的,小编没该权限,估计是版本不一样,视情况而定吧

运行后,一路回车(确定,需要敲Y的地方敲Y)
注意:到域名这个地方时,建议输入自己服务器的ip地址(对新手而言),
集群配置时:输入N
ejabberd默认安装在 /opt/ejabberd-18.04目录下(其他版本不确定),
安装成功后,进入/opt/ejabberd-18.04/bin目录下,执行
在 /opt/ejabberd-18.04/bin目录下 执行

./start  等待执行完成

然后/opt/ejabberd-18.04/bin目录下 执行

 ./status 查看运行状态

注意:stop和start需要等待一小段时间完成,千万不要命令没有执行完就强制退出
如果提示 Failed RPC connection to the node ejabberd@localhost: nodedown
则可以reboot重启系统,或者

ps -ef | grep ejabberd

然后kill 掉显示的进程,再次 ./start

这里写图片描述

成功启动后,在bin目录执行

./ejabberdctl register admin   192.168.10.51    123456  (安装时配置的用户名和密码只是授权,并没有建立admin用户)
//不确定是否必须要执行,如果其他都配置成功, http://192.168.10.51:5280/admin的网址访问不了,可以执行下这个命令
//192.168.10.51 是 (安装时配置的域名) 
//123456  是admin账号的密码,安装时也有admin账号,输入密码,小编不确定这个密码和安装时的是//否要必须保持一致(我的是保持一致的)

然后就可以在浏览器中输入 http://192.168.10.51:5280/admin 访问了
如果你的是阿里云服务器,记得在 安全组规则中设置 5280端口可以访问

安装完成后,使用ejabberdctl 命令来操作ejabberd服务器(需要将/opt/ejabberd-18.04/bin添加到环境变量才能全局使用ejabberdctl命令).

这里写图片描述

这里写图片描述

注意点:域名,reboot,ps -ef | grep ejabberd , kill 端口号

使用spark可以正常登录
遗留问题:使用spark注册时报错

05-17 22:30:11.616 13199-13252/com.huang.testxmpp W/AbstractXMPPConnection: Connection XMPPTCPConnection[not-authenticated] (0) closed with error
    org.jivesoftware.smack.XMPPException$StreamErrorException: connection-timeout You can read more about the meaning of this stream error at http://xmpp.org/rfcs/rfc6120.html#streams-error-conditions
    <stream:error><connection-timeout xmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text xml:lang='en'>Idle connection</text></stream:error>
    at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1048)
    at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:982)
    at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:998)
    at java.lang.Thread.run(Thread.java:776)
05-17 22:30:11.782 1233-1378/? E/WifiConfigManager: updateConfiguration freq=2462 BSSID=c0:61:18:f1:80:ae RSSI=-62 "Tab-502"WPA_PSK
05-17 22:30:12.657 13199-13364/com.huang.testxmpp I/XmppConnection:   e=org.jivesoftware.smack.SmackException$NotConnectedException: The connection XMPPTCPConnection[not-authenticated] (0) is no longer connected. done=true smResumptionPossible=false
05-17 22:30:12.657 13199-13364/com.huang.testxmpp W/System.err: org.jivesoftware.smack.SmackException$NotConnectedException: The connection XMPPTCPConnection[not-authenticated] (0) is no longer connected. done=true smResumptionPossible=false
05-17 22:30:12.657 13199-13364/com.huang.testxmpp W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketWriter.throwNotConnectedExceptionIfDoneAndResumptionNotPossible(XMPPTCPConnection.java:1309)
05-17 22:30:12.657 13199-13364/com.huang.testxmpp W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.throwNotConnectedExceptionIfAppropriate(XMPPTCPConnection.java:357)
05-17 22:30:12.657 13199-13364/com.huang.testxmpp W/System.err:     at org.jivesoftware.smack.AbstractXMPPConnection.sendStanza(AbstractXMPPConnection.java:672)
05-17 22:30:12.657 13199-13364/com.huang.testxmpp W/System.err:     at org.jivesoftware.smack.AbstractXMPPConnection.createStanzaCollectorAndSend(AbstractXMPPConnection.java:771)
05-17 22:30:12.658 13199-13364/com.huang.testxmpp W/System.err:     at org.jivesoftware.smackx.iqregister.AccountManager.createStanzaCollectorAndSend(AccountManager.java:372)
05-17 22:30:12.658 13199-13364/com.huang.testxmpp W/System.err:     at org.jivesoftware.smackx.iqregister.AccountManager.getRegistrationInfo(AccountManager.java:368)
05-17 22:30:12.658 13199-13364/com.huang.testxmpp W/System.err:     at org.jivesoftware.smackx.iqregister.AccountManager.getAccountAttributes(AccountManager.java:186)
05-17 22:30:12.658 13199-13364/com.huang.testxmpp W/System.err:     at org.jivesoftware.smackx.iqregister.AccountManager.createAccount(AccountManager.java:251)
05-17 22:30:12.658 13199-13364/com.huang.testxmpp W/System.err:     at com.huang.xmpp.XmppConnection.register(XmppConnection.java:205)
05-17 22:30:12.658 13199-13364/com.huang.testxmpp W/System.err:     at com.huang.testxmpp.LoginActivity$4.run(LoginActivity.java:148)
05-17 22:30:12.658 13199-13364/com.huang.testxmpp W/System.err:     at java.lang.Thread.run(Thread.java:776)
05-17 22:30:12.821 1233-1233/? I/TrafficMonitor: update:rxPkts:3,txPkts:4,rxBytes:352,txBytes:196

ejabberd 用户注册

上传遗留问题,用户注册解决方案:
步骤
1:在阿里云中新建2个安全规则 ,打开5000/6000 50000/60000 端口 可访问
2:修改 /opt/ejabberd-18.04/conf/ejabberd.yml文件
对于ejabberd.yml文件,我一共修改了三处。第一处修改:

将图中(截图是我修改后的,一下截图也是修改后的)的trusted_network的配置修改成:
这里写图片描述

  ## In-band registration allows registration of any possible username.
  ## To disable in-band registration, replace 'allow' with 'deny'.
  register:
    - allow
  ## Only allow to register from localhost
  trusted_network:
    - allow

第二处:

这里写图片描述
将registration_timeout的注释打开,这段就变成了:

## By default the frequency of account registrations from the same IP
## is limited to 1 account every 10 minutes. To disable, specify: infinity
registration_timeout: infinity

第三处:
这里写图片描述
打开access_from的注释,并修改配,同时注释掉ip_access:

    ##
    ## Only clients in the server machine can register accounts
    ##
    ## ip_access: trusted_network
    ##
    ## Local c2s or remote s2s users cannot register accounts
    ##
    access_from: register
    access: register

修改完配置后,命令行进入ejabberd安装目录的bin目录下,运行”./stop”命令停止ejabberd服务,再运行”./start”启动ejabberd服务,配置即可生效,可以运行”./status”命令查看ejabberd是否启动(stop和start需要等待一小段时间完成,千万不要命令没有执行完就强制退出):
ejabberd如果启动不成功,reboot后也启动不成功,看下是不是你安装了openfire,把端口给占用了。
使用命令

https://blog.csdn.net/u010665691/article/details/38579673
 # 先停止服务
  sudo /etc/init.d/openfire stop 
  # 卸载服务,这一步是从国外的一个技术论坛网站上找到的
  sudo dpkg -P openfire
亲测可用!

另外:小编用Spark只能等陆,不能注册,注册时提示连接失败(刚开始一直怀疑是ejabberd没有配置好ejabberd.yml的问题),最后写demo用代码注册成功了,查看spark安装目录,发现是17年初安装的,怀疑Spark版本是不是太旧了,因为ejabberd安装的是最新的版本,正在下载最新版本Spark验证。
另外:ejabberd安装后,在/opt/ejabberd/ 目录(安装后生成的)下也有内容,解释
ejabberd是安装在 /opt/ejabberd18.04/目录下的,/opt/ejabberd/ 目录下是ejabberd运行的log,你会发现修改/opt/ejabberd18.04/conf /ejabberd.yml后(修改配置前最好先停止运行ejabberd,修改完后再启动), /opt/ejabberd/conf 中的ejabberd.yml会同样自动被修改。
ejabberd.yml为何那样修改可以参考
http://wiki.jabbercn.org/Ejabberd2:%E5%AE%89%E8%A3%85%E5%92%8C%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97#mod_register

mod_register
本模块增加对带内注册(XEP-0077)的支持. 这个协议允许最终用户使用XMPP客户端做:
在服务器注册一个新帐号.
在服务器上给一个现有帐号修改密码.
删除一个服务器上的现有帐号.
选项:
{access, AccessName}
这个选项可被配置来指定限制注册的 rules. 如果一个 rule 在请求的用户名返回‘deny’, 那个用户名的注册被禁止. (缺省没有限制).
{access_from, AccessName}
缺省的, ejabberd不允许从s2s或已有的c2s会话注册一个新帐号. 你可以修改它,通过在这个选项定义 access rule. 谨慎使用: 允许从s2s注册会导致流氓用户的不可控的大量帐号注册.
{welcome_message, Message}
设定一个欢迎信息发送给每一个新注册的帐号. 第一个字符串是标题, 第二个字符串是消息 body. 在body里你可以用字符: \n 设定一个新行
{registration_watchers, [ JID, ...]}
这个选项定义一个 JIDs 列表,每次有人注册新帐号,他们将收到通知.
{iqdisc, Discipline}
这为带内注册(jabber:iq:register) IQ queries (见 3.3.2 节)定义处理原则.
这个模块也从服务器读取另一个全局定义的选项: {registration_timeout, Timeout}. 这个选项限制从一个给定IP或用户名发出的注册请求的频率. 所以, 一个用户在前一个注册之后,
经过这个数量的秒数之前不能从相同IP地址或JID注册一个新帐号. Timeout被表示为秒数, 并且必须是一个整数. 要禁止此限制, 把整数替换成单词,类似: infinity. 缺省值为: 600 秒.
例子:
下个例子禁止注册太短的帐号名 prohibits:
      {acl, shortname, {user_glob, "?"}}.
      {acl, shortname, {user_glob, "??"}}.
      %% The same using regexp:
      %%{acl, shortname, {user_regexp, "^..?$"}}.

      {access, register, [{deny, shortname},
                          {allow, all}]}.

      {modules,
       [
        ...
        {mod_register, [{access, register}]},
        ...
       ]}.
这个配置禁止使用带内注册新建和删除帐号, 但允许现有帐号修改密码:
      {access, register, [{deny, all}]}.

      {modules,
       [
        ...
        {mod_register, [{access, register}]},
        ...
       ]}.
这个配置禁止所有带内注册功能: 新建, 删除帐号和修改密码:
      {modules,
       [
        ...
        %% {mod_register, [{access, register}]},
        ...
       ]}.
定义一个欢迎信息和两个注册观察者. 也定义一个注册超时为一小时:
      {registration_timeout, 3600}.
      {modules,
       [
        ...
        {mod_register,
         [
          {welcome_message, {"Welcome!", "Hi.\nWelcome to this Jabber server.\n Check http://www.jabber.org\n\nBye"}},
          {registration_watchers, ["[email protected]", "[email protected]"]}
         ]},
        ...
       ]}.
mod_roster

注册代码(Smack4.2.1):

/**
     * 注册
     *
     * @param account  注册帐号
     * @param password 注册密码
     * @return 1、注册成功 0、注册失败
     */
    public String register(String account, String password) {
        if (getConnection() == null){//getConnection()为建立连接方法
            Log.i(TAG, "  connection="+connection);
            return "0";
        }

        try {
            AccountManager.getInstance(connection).sensitiveOperationOverInsecureConnection(true);//一定要加这句话
            AccountManager.getInstance(connection).createAccount(Localpart.from(account), password);
        } catch (XmppStringprepException | InterruptedException | XMPPException | SmackException e) {
            Log.i(TAG, "  e="+e);
            e.printStackTrace();
            return "0";
        }

        return "1";
    }

在安装配置过程中会遇到很多问题,主要思路就是 看log,上网搜资料,如果没有资料就大胆猜测去修改。

剩下问题:ejabberd配置Mysql(ejabberd默认使用的是ejabberd内置的数据库)
关于ejabberd服务器的配置修改到此结束,如果哪里介绍的有纰漏,欢迎大家指教!

安装参考文档:
https://www.programcreek.com/java-api-examples/index.php?api=org.jivesoftware.smackx.iqregister.packet.Registration

http://wiki.jabbercn.org/Ejabberd2:%E5%AE%89%E8%A3%85%E5%92%8C%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97
https://www.process-one.net/en/ejabberd/downloads
https://www.cnblogs.com/dyingbleed/archive/2013/04/04/2999885.html
https://www.cnblogs.com/silent2012/p/3610747.html
http://www.51studyit.com/html/notes/20140620/872.html
https://www.aliyun.com/jiaocheng/96415.html
https://www.cnblogs.com/vectorli/p/7448401.html
http://www.360doc.com/content/14/1212/13/16650130_432368359.shtml
https://www.cnblogs.com/vectorli/p/7448401.html
http://www.bubuko.com/infodetail-1034517.html
https://stackoverflow.com/questions/20966954/ejabberd-on-openshift-failed-rpc-connection-to-the-node
https://stackoverflow.com/questions/31529857/error-the-ejabberd-node-ejabberdlocalhost-is-already-running
https://stackoverflow.com/questions/38501625/failed-rpc-connection-to-the-node-ejabberdmy-mac-nodedown
https://www.linuxidc.com/Linux/2017-12/149208.htm

http://doc.okbase.net/2319290/archive/151057.html

用户注册参考文档:
https://blog.csdn.net/l631768226/article/details/52931010
https://blog.csdn.net/u010665691/article/details/38579673
https://www.programcreek.com/java-api-examples/index.php?api=org.jivesoftware.smackx.iqregister.packet.Registration
https://blog.csdn.net/u011983531/article/details/50494580
https://blog.csdn.net/li693678967/article/details/19403207
https://blog.csdn.net/nassue_sn/article/details/54344937
https://blog.csdn.net/huang1196/article/details/17788729
https://blog.csdn.net/yjl49/article/details/6779901
https://www.cnblogs.com/bruce2u/p/4728512.html
https://discourse.igniterealtime.org/t/smack-4-2-0-rc2-abstractxmppconnection-connect-does-not-return-policy-violation-to-the-calling-application/73378
http://www.360doc.com/content/18/0308/11/16915_735353107.shtml
https://blog.csdn.net/l631768226/article/details/52931389
https://blog.csdn.net/w690333243/article/details/80345269
https://blog.csdn.net/yiboo/article/details/39290925
http://wiki.jabbercn.org/Ejabberd2:%E5%AE%89%E8%A3%85%E5%92%8C%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97#mod_register
http://wiki.jabbercn.org/Ejabberd2:%E5%AE%89%E8%A3%85%E5%92%8C%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97#iqdisc
https://www.jianshu.com/p/f77dbae70ad3
https://www.programcreek.com/java-api-examples/index.php?api=org.jivesoftware.smackx.iqregister.packet.Registration

更新于2018年5月18日 早7:10

ejabberd 搜索用户设置(功能还未实现):

修改ejabberd.yml配置文件,serach 为true
这里写图片描述

代码部分:使用Smack(只是部分代码,还未全部实现,不会写,网上资料少,摸索中)

/**
     * 查询用户
     *
     * @param userName userName 用户账号,@前面的部分 如[email protected] userName为1001
     * @return List<HashMap<String, String>>
     */
    public List<HashMap<String, String>> searchUsers(String userName) {
        Log.i(TAG, "searchUsers: userName="+userName);
        if (getConnection() == null)
            return null;
        Log.i(TAG, "searchUsers: userName="+userName);

        HashMap<String, String> user;
        List<HashMap<String, String>> results = new ArrayList<>();
        try {
            UserSearchManager usm = new UserSearchManager(getConnection());

            Log.i(TAG, "searchUsers: 域名:"+JidCreate.domainBareFrom("vjud."+getConnection().getXMPPServiceDomain()).toString());
            Form searchForm = usm.getSearchForm(JidCreate.domainBareFrom("vjud."+getConnection().getXMPPServiceDomain()));

            if (searchForm == null)
                return null;

            Form answerForm = searchForm.createAnswerForm();
            answerForm.setAnswer("user", userName);
            //answerForm.setAnswer("Name", true);
            //answerForm.setAnswer("search", userName);
            ReportedData data = usm.getSearchResults(answerForm, JidCreate.domainBareFrom("vjud." + getConnection().getXMPPServiceDomain()));

            List<ReportedData.Row> rowList = data.getRows();
            for (ReportedData.Row row : rowList) {
                user = new HashMap<>();
                user.put("userAccount", row.getValues("jid").toString());
                Log.i("wangqx", "search jid=" + row.getValues("jid").toString());//账号 100001
                Log.i("wangqx", "search Username=" + row.getValues("Username").toString());//账号 100001
                Log.i("wangqx", "search Name=" + row.getValues("Name").toString());//昵称
                Log.i("wangqx", "search Email=" + row.getValues("Email").toString());
                results.add(user);
                // 若存在,则有返回,UserName一定非空,其他两个若是有设,一定非空
            }

        } catch (SmackException | InterruptedException | XmppStringprepException | XMPPException e) {
            Log.i("wangqx", "searchUsers: e="+e);
            e.printStackTrace();
        }
        return results;
    }

参考:
http://wiki.jabbercn.org/Ejabberd2:%E5%AE%89%E8%A3%85%E5%92%8C%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97
https://ask.helplib.com/ios/post_5772833
http://www.it1352.com/156444.html
https://www.e-learn.cn/content/wangluowenzhang/510476
https://blog.csdn.net/voipmaker/article/details/6985080 XEP
http://blog.sina.com.cn/s/blog_69df977e0101iu4t.html 模块一览
https://blog.csdn.net/u012482178/article/details/78645372
https://blog.csdn.net/irony0egoist/article/details/55687462
https://blog.csdn.net/nassue_sn/article/category/6601126 ejabberd各模块源码解读
https://blog.csdn.net/nassue_sn/article/category/6635474 XMPP学习
https://xmpp.org/software/libraries.html
https://www.cnblogs.com/xuan52rock/p/4596097.html
https://www.ejabberd.im/files/doc/guide.html

ejabberd18.04 配置MySQL数据库

创建数据库

https://github.com/processone/ejabberd/tree/master/sql  获取mysql.new.sql文件

linux命令行
mysql –h localhost –u root -p
//mysql -u root -p
create database ejabberd;  //drop database ejabberd;
use ejabberd;
source ~/mysql.new.sql
create user 'ejabberd'@'localhost' identified by '123456'; 创建一个用户名为ejabberd,密码为111111的用户。(一定要带分号,密码可以随意)

mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY 'mypassword' WITH GRANT OPTION; 授予任何主机访问数据权限 
mysql>FLUSH PRIVILEGES;

可以看到在user表中已创建的root用户。host字段表示登录的主机,其值可以用IP,也可用主机名,

有时想用本地IP登录,那么可以将以上的Host值改为自己的Ip即可。
将host字段的值改为%就表示在任何客户端机器上能以root用户登录到mysql服务器,建议在开发时设为%。
update user set host = ’%’ where user = ’root’;

https://blog.csdn.net/z858466/article/details/79946141
https://www.cnblogs.com/weifeng1463/p/7941625.html
https://www.cnblogs.com/gdsblog/p/7349551.html
https://blog.csdn.net/qq_15267341/article/details/52311129
https://www.cnblogs.com/thinkingandworkinghard/p/6711255.html

ejabberd.yml配置

##auth_method:internal  注释内置数据库  
auth_method:sql  打开注释  这样修改后ejabberd将通过本地数据库验证用户

这里写图片描述

配置账号密码 端口

395 ##
396 ## MySQL server:
397 ##
398 sql_type: mysql
399 sql_server: "192.168.xx.xx"
400 sql_database: "ejabberd"
401 sql_username: "ejabberd"
402 sql_password: "123456"
403 ##
404 ## If you want to specify the port:
405 sql_port: 3306

这里写图片描述

添加代码

    modules:
752   mod_mam:
753      default: always
754      db_type: sql

https://docs.ejabberd.im/admin/configuration/
https://docs.ejabberd.im/admin/databases/mysql/
https://docs.ejabberd.im/admin/configuration/#mod-register
一切以官方文档为主

http://wiki.jabbercn.org/Ejabberd2:%E5%AE%89%E8%A3%85%E5%92%8C%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97#.E6.A8.A1.E5.9D.97.E4.B8.80.E8.A7.88
https://blog.csdn.net/talsky/article/details/26377093
https://www.cnblogs.com/silent2012/p/3610747.html

注意,always 前面有空格,一定要注意

这里写图片描述

default_db: sql  做了以上设置之后,还是会有一部分数据存储在ejabberd自己的数据库中,可以在文件中添加默认数据库的设置,如图所示

这里写图片描述

http://cache.baiducontent.com/c?m=9d78d513d99419fc08bdc33e5b01d7174f03d4307b8996027ea4844fe7735a311136f4ba57351177c4c50d2642f15d1baaae3928714562f68cc9fb57c0fad47b7ed17a70275cd21f4f960eafbc17789e3dd31dbeee5fbce7ac738ea9d0d0d95751cc511820ddb59c5a76529778f06276a1f3d91b430807ba9b673dac09277edf7557b631fae4256e7183f0ca5c3a8577c7616794a522b04810b3&p=9071c64ad4934eaa5eb5882a5340&newp=882a90438b9f59fc57efc83c514892694c05d67c7d97cf502988c02596624f171c0ba7ec67634b598fca7c6303a5435beff23c7923454df6cc8a871d81edcf7437&user=baidu&fm=sc&query=ejabberd+default_db%3A+sql&qid=9e5d8b6300042661&p1=7
https://docs.ejabberd.im/admin/databases/mysql/
https://stackoverflow.com/questions/49378453/upgrading-ejabberd-from-16-09-4-to-latest

这个时候重启ejabberd服务器,如果想要登录管理页面是无法登录的,因为之前的管理员账号等都是存储在ejabberd内部的数据库中的,我们现在已经设置成从本地MySQL数据库中校验用户了,所以需要添加一个管理员用户,首先在MySQL的ejabberd库中的users表中添加一个用户数据。
或者

重启ejabberd 
/opt/ejabberd-18.04/bin/ejabberdctl stop 
/opt/ejabberd-18.04/bin/ejabberdctl start 
 授权注册一个mysql里的管理员账户 
/opt/ejabberd-18.04/bin/ejabberdctl register admin 192.168.1.102 123456

即可使用新的帐号登录后台,进行管理。
参考
https://blog.csdn.net/qq_30164225/article/details/72858521
https://blog.csdn.net/l631768226/article/details/78301413
https://blog.csdn.net/yongche_shi/article/details/53420663
https://www.ejabberd.im/node/3332/
更新于2018年5月19日 00:12

ejabberd 配置MySQL 离线消息

768   ## mod_multicast: {}
769   mod_offline:
770     db_type: sql
771   ##  access_max_user_messages: max_user_offline_messages
772   mod_ping: {}
773   ## mod_pres_counter:

添加db_type: sql

注意sql 前面有空格,一定要注意

注释掉access_max_user_messages:max_user_offline_message

注意:access_max_user_messages的默认值是max_user_offline_message,所以只在此处注释掉access_max_user_messages:max_user_offline_message。是不会起作用的。还需要注释定义max_user_offline_message的地方。
如下图:

这里写图片描述

539 shaper_rules:
540   ## Maximum number of simultaneous sessions allowed for a single user:
541   max_user_sessions: 10
542   ## Maximum number of offline messages that users can have:
543   ##max_user_offline_messages:   注释掉max_user_offline_message
544   ##  - 5000: admin  管理员最多5000545   ##  - 100   普通用户 100546   ## For C2S connections, all users except admins use the "normal" shaper

这里写图片描述

参考:
https://blog.csdn.net/yongche_shi/article/details/53421385
https://www.cnblogs.com/lovechengcheng/p/5817260.html

https://blog.csdn.net/weilaiqing/article/details/6403366 vim 显示行号
搜索命令 vi 后,默认是命令模式,命令模式下 输入 :/ n为查找下一个,u为撤销上步骤操作

更新于 2018年5月18日 23:56

遗留问题:使用smack4.2.3 搜索 ejabberd上的用户,希望会的小伙伴可以留言,感谢
以上涉及到的版本Smack4.2.3 ,ejabberd18.04,MySQL 5.7

ejabberd配置mysql数据库成功,使用 mysql.sql 数据库,更新于2018年5月19日 19:30

问题总结

05-22 06:46:46.357 11583-11628/com.huang.testxmpp I/XMPP_SMACK: SENT: <stream:stream xmlns='jabber:client' to='123.56.30.171' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>
05-22 06:46:46.377 11583-11629/com.huang.testxmpp I/XMPP_SMACK: RECV: <?xml version='1.0'?><stream:stream id='610804948059803201' version='1.0' xml:lang='en' xmlns:stream='http://etherx.jabber.org/streams' from='123.56.30.171' xmlns='jabber:client'>
05-22 06:46:46.377 11583-11629/com.huang.testxmpp I/XMPP_SMACK: RECV: <stream:error><policy-violation xmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text xml:lang='en' xmlns='urn:ietf:params:xml:ns:xmpp-streams'>Too many (20) failed authentications from this IP address (::ffff:223.223.196.168). 
The address will be unblocked at 23:40:10 21.05.2018 UTC</text></stream:error></stream:stream>
05-22 06:46:46.378 11583-11626/com.huang.testxmpp W/System.err: org.jivesoftware.smack.XMPPException$StreamErrorException: policy-violation You can read more about the meaning of this stream error at http://xmpp.org/rfcs/rfc6120.html#streams-error-conditions
05-22 06:46:46.378 11583-11626/com.huang.testxmpp W/System.err: <stream:error><policy-violation xmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text xml:lang='en'>Too many (20) failed authentications from this IP address (::ffff:223.223.196.168). The address will be unblocked at 23:40:10 21.05.2018 UTC</text></stream:error>
05-22 06:46:46.378 11583-11626/com.huang.testxmpp W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1043)
05-22 06:46:46.378 11583-11626/com.huang.testxmpp W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:982)
05-22 06:46:46.378 11583-11626/com.huang.testxmpp W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:998)
05-22 06:46:46.378 11583-11626/com.huang.testxmpp W/System.err:     at java.lang.Thread.run(Thread.java:776)
05-22 06:46:46.378 11583-11629/com.huang.testxmpp W/AbstractXMPPConnection: Connection XMPPTCPConnection[not-authenticated] (1) closed with error
                                           org.jivesoftware.smack.XMPPException$StreamErrorException: policy-violation You can read more about the meaning of this stream error at http://xmpp.org/rfcs/rfc6120.html#streams-error-conditions
                                           <stream:error><policy-violation xmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text xml:lang='en'>Too many (20) failed authentications from this IP address (::ffff:223.223.196.168). The address will be unblocked at 23:40:10 21.05.2018 UTC</text></stream:error>
                                               at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1048)
                                               at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:982)
                                               at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:998)
                                               at java.lang.Thread.run(Thread.java:776)
05-22 06:46:46.379 11583-11629/com.huang.testxmpp I/XMPP_SMACK: connectionClosedOnError e=org.jivesoftware.smack.XMPPException$StreamErrorException: policy-violation You can read more about the meaning of this stream error at http://xmpp.org/rfcs/rfc6120.html#streams-error-conditions
                                                                <stream:error><policy-violation xmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text xml:lang='en'>Too many (20) failed authentications from this IP address (::ffff:223.223.196.168). The address will be unblocked at 23:40:10 21.05.2018 UTC</text></stream:error>
05-22 06:47:47.424 11583-11583/com.huang.testxmpp W/IInputConnectionWrapper: finishComposingText on inactive InputConnection

登录时遇到此问题,暂未解决,服务器隔一段时间账号就就登录不了,需要重启才可以,暂时还没找出原因
安装后,配置MySQL,启动,注册账号,正常登录。过半天(7小时左右)不能正常登录,报SASLError异常,SCREAM SHA-1,过了一会莫名其妙又可以登录了。解决办法:使用ejabberd17.04(没有此问题),应该是ejabberd18.04自身bug

猜你喜欢

转载自blog.csdn.net/w690333243/article/details/80344690