Ejabberd 配置相关
2. ejabberd 配置文件
ejabberd主要两个配置文件 /etc/ejabberd/ejabberdctl.cfg 和 /etc/ejabberd/ejabberd.yml
其中 配置文件 /etc/ejabberd/ejabberdctl.cfg 中有一配置项
#ERLANG_NODE=ejabberd@localhost
#需改当前服务器的域名为
ERLANG_NODE=ejabberd@coopens.com
修改了 ejabberdctl.cfg 中的 域名后,需要同时在 ejabberd.yml 中增加虚拟主机 coopens.com
hosts:
- "localhost"
- "coopens.com"
给 ejabberd 添加管理员
使用命令 sudo ejabberdctl register 添加用户 zyf 后,修改 ejabberd.yml 以下两段:
acl:
admin:
user:
- "zyf": "coopens.com"
access:
configure:
admin: allow
访问 http://coopens.com:5280/admin 管理 ejabberd 服务器
修改 ERLANG_NODE 后使用命令 ejabberdctl live 启动 ejabberd 会报如下错误:
[critical] Node name mismatch: I'm [ejabberd@coopens.com], the database is owned by [ejabberd@localhost]
原因是 Mnesia 和 新配置的 node 名称不匹配,如果刚安装没有重要数据的话,可以将 /var/lib/ejabberd/* 下的所有 spool 文件全部删除,使用重启即可重新生成新的数据文件
Mysql config problem
How to change bydefault node name of ejabberd which is ejabberd@localhost?
使用命令注册用户
sudo ejabberdctl register zyf coopens.com 123456
出现如下错误:
Can't set long node name!\nPlease check your configuration
原因可能是 /etc/hosts 配置有问题
#127.0.0.1 localhost coam
127.0.1.1 localhost.localdomain localhost coam coopens.com
改为
#127.0.0.1 localhost coam
127.0.1.1 localhost.localdomain localhost coam coopens.com
重新执行以下命令重新注册用户就OK了
sudo ejabberdctl register zyf coopens.com 123456
参考
Can’t set long node name!\nPlease check your configuration
木头人 - erlang use
二. 需要引入其它域名,只需在配置文件 /etc/ejabberd/ejabberd.yml 里的配置段
hosts:
- "localhost"
- "coam.co"
- "coopens.com"
添加其它域名即可使用以下命令添加用户,并可跨域聊天加好友
ejabberdctl register zyfmix coam.co ******
Ejabberd 数据存储配置
一般 modules 下的每个模块都有 db_type 的配置选项,默认为 mnesia 可以将他们分别配置成 {mnesia|odbc|riak}
其中[Session Management] sm_db_type 还可选择配置成 redis 存储
还可以设定全局配置数据存储方式,使用 default_db: odbc 配置
以下是一个示例:
1 | default_db: odbc #+++# 全局配置使用 odbc 当做数据存储 |
开启 XEP-0363 的 HTTP 文件上传
使用 Conversations 查看用户登录账户的服务器信息,发现提示 XEP-0363 的 HTTP 文件上传不支持,需要进行如下配置
1 | listen: |
需要添加一个 ejabberd_http 的监听,并且 request_handlers 添加 使用 mod_http_upload 模块 处理 /upload 的请求
注意:默认 开启 thumbnail: true 压缩图片需要安装 imagemagick ,否则启动 ejabberd 会报错,
UBUNTU 下通过以下命令安装 ImageMagick
1 | sudo apt-get install imagemagick |
参考
rodleviton/imagemagick-install-steps
imagemagick
开启 XEP-0237 花名册版本控制
1 | modules: |
参考 How to enable XEP-0313 and XEP-0237 in ejabberd 15.03
参考
*
使用 Nginx 反向代理 请求 到 coopens.com:5280
默认需要使用 coopens.com:5280 这个端口来访问 ejabberd /http-bind 请求,可以使用 Nginx 反向代理请求到 coopens.com:5280 这样就屏蔽了对端口的请求显示
1 | location ~ ^/http-bind/ { |
参见 Converse.js Setup and integration
添加 letsencrypt ssl 证书,支持 Conversations 开源客户端连接
Android 安装 Conversations 客户端后提示 服务器不兼容,怀疑是 ejabberd 没有添加ssl证书提供加密支持的原因,于是首先添加 letsencrypt 域名证书
对 coopens.com 的域名证书获取到后 /etc/letsencrypt/live/coopens.com/ 有如下4个文件
cert.pem
chain.pem
fullchain.pem
privkey.pem
直接将任何一个证书文件拷贝到 /etc/ejabberd/ 下配置
1 | listen: |
启动 ejabberd 后 浏览器 js 客户端能顺利登陆,但是 Conversations 仍提示 服务器不兼容,ejabberdctl live 模式下提示如下错误:
1 | 10:18:12.106 [error] gen_fsm <0.508.0> in state wait_for_feature_request terminated with reason: no match of right hand value |
怀疑证书有问题,于是使用如下命令合并证书并重启 ejabberd 顺利解决问题, Conversations 能顺利登陆没有再出现其它错误
1 | cat /etc/letsencrypt/live/coopens.com/privkey.pem /etc/letsencrypt/live/coopens.com/fullchain.pem >> /etc/ejabberd/ejabberd.pem |
参考
Tutorial on ejabberd, postfix, dovecot and or nginx with letsencrypt
Conversations - Incompatible Server
总结 让 ejabberd 添加 ssl 证书支持,需要改动的配置有以下地方:
修改 ejabberd_c2s 证书配置信息
1 | listen: |
取消一下注释 修改 s2s_certfile 证书配置信息
1 | ## |
虚拟主机单独配置
1 | listen: |
参考 Conversations Incompatible Server
具体参考配置 ejabberd config to make conversations client on android work perfectly