安装 ejabberd 社区版服务的方式有多种:
安装完成后,可以转到以下步骤:
分发 ejabberd 稳定版本的典型形式是源代码包。在 *nix 系统中,只要安装全部依赖,那么通过源代码安装 ejabberd 非常简单。
为在类 Unix 操作系统上编译 ejabberd,需要:
译者注
比如在 Ubuntu 上,可以执行:
apt install -y make gcc libexpat1 libexpat1-dev libyaml-0-2 libyaml-dev erlang libssl1.1 libssl-dev zlib1g zlib1g-dev imagemagick ghostscript elixir libpam0g libpam0g-dev autoconf sqlite3 libsqlite3-dev
可以从 ejabberd GitHub Releases 下载 ejabberd 的发布版本。
或者,使用以下命令从 Git 存储库中检索最新的开发源代码:
git clone https://github.com/processone/ejabberd ejabberd
cd ejabberd
执行如下命令,编译 ejabberd:
./autogen.sh
./configure --enable-user=ejabberd --enable-mysql
make
在本例中,./configure
准备用名为 ejabberd 的用户运行的安装程序,因此请创建该用户,或告诉它使用其它本地用户。不推荐用 root
用户运行 ejabberd。
make
获取依赖,编译所有代码。
注意:编译 ejabberd 需要网络访问,因为将根据选择的选项,下载依赖。
./configure
构建配置脚本支持许多选项。获取完整列表:
./configure --help
选项细节:
--bindir=/
:指定用户可执行程序的路径(epmd
和 iex
所在的位置)--prefix=/
:指定当运行 make install
命令时,文件将被拷贝到的路径前缀--with-rebar
:指定 rebar、rebar3 或 mix 的路径--enable-user[=USER]
:允许该正常系统用户执行 ejabberdctl 脚本(查看 ejabberdctl 部分),读取配置文件,读写 spool 目录,读写日志目录。在运行 make install
前,账号用户和组必须存在于机器上。该账号需要拥有 HOME 目录,因为将在那里创建和读取 Erlang Cookie 文件--enable-group[=GROUP]
:与前一个选项类似,但用于系统组--enable-all
:启用这里描述的多个数据库和依赖选项,这对 Dialyzer 检查很有用:--enable-debug --enable-elixir --enable-mysql --enable-odbc --enable-pam --enable-pgsql --enable-redis --enable-sip --enable-sqlite --enable-stun --enable-tools --enable-zlib--disable-debug
:编译时,不带 +debug_info
--enable-elixir
:构建带有 Elixir 扩展支持的 ejabberd。只适用于 rebar2。如果对 Elixir 开发感兴趣,你可能更喜欢自己安装 Elixir,并且使用 --with-rebar=mix
--disable-erlang-version-check
:不检查 Erlang/OTP 版本--enable-full-xml
:在 XMPP 流中使用 XML 特性(比如 CDATA)。这需要兼容 XML 的客户端--enable-hipe
:使用 HiPE 进行本地编译。这是实验性的特性,不推荐--enable-lager
:使用 Lager Erlang 日志工具替代标准错误 Logger--enable-latest-deps
:让 rebar 使用与 ejabberd 一起开发的依赖的最新版本,而非 rebar.config 中指定的版本。应该只在开发 ejabberd 时使用--enbale-lua
:启用 Lua 支持,从 Prosody 导入--enable-mssql
:启用 Microsoft SQL Server 支持,该选项需要 --enable-odbc--enable-mysql
:启用 MySQL 支持--enable-new-sql-schema
:使用新 SQL 模式--enable-odbc
:启用纯 ODBC 支持--enable-pam
:启用 PAM 认证方法(查看 PAM Authentication 部分)--enable-pgsql
:启用 PostgreSQL 支持--enable-redis
:启用 Redis 支持,用于外部的会话存储--enable-roster-gateway-workaround
:打开处理网关订阅的变通方法--enable-sip
:启用 SIP 支持--enable-sqlite
:启用 SQLite 支持--disable-stun
:禁用 STUN/TURN 支持--enable-system-deps
:使 rebar 使用本地安装的依赖,而非下载它们--enable-tools
:启用开发工具的使用--disable-zlib
:禁止使用 zlib 进行流压缩make
该工具用于编译 ejabberd,以及执行其它任务:
获取完整列表及细节:
make help
安装和运行从源代码编译的 ejabberd 有多种方式:系统安装、构建生产版本,或构建开发版本。
运行命令 make install
,在目标目录中安装 ejabberd。
注意,安装 ejabberd 可能需要系统的管理权限。
被创建的文件和目录取决于提供给 ./configure
的选项,默认为:
/etc/ejabberd/
:配置目录:
ejabberd.yaml
:ejabberd 配置文件(查看 File Format)ejabberdctl.cfg
:管理脚本的配置文件(查看 Erlang Runtime System)inetrc
:用于 Erlang 的网络 DNS 配置文件/lib/ejabberd/
:
ebin/
:Erlang 二进制文件(*.beam)include/
:Erlang 头文件(*.hrl)priv/
:运行时所需的其它文件bin/
:可执行程序lib/
:二进制系统库(*.so)msgs/
:翻译文件(*.msgs)(查看 Default Language)/sbin/ejabberdctl
:管理脚本(查看 ejabberdctl)
/share/doc/ejabberd/
:ejabberd 的文档
/var/lib/ejabberd/
:Spool 目录:
.erlang.cookie
:Erlang Cookie 文件acl.DCD, ...
:Mnesia 数据库 spool 文件(*.DCD、*.DCL、*.DAT)/var/log/ejabberd/
:日志目录(查看 Logging)
ejabberd.log
:ejabberd 服务日志erlang.log
:Erlang/OTP 系统日志可以构建在单独的 tar.gz 文件中包含 ejabberd、Erlang/OTP 和所有必须的 Erlang 依赖的 OTP 版本。然后,可以将该文件拷贝到拥有相同机器架构的其它机器,无需安装任何其它东西即可运行 ejabberd。
运行如下命令,构建该版本:
make rel
如果为 ./configure
提供使用 rebar3 或 mix 的选项 --with-rebar
,那么将直接生成可以拷贝的 tar.gz。
下面的示例使用 rebar3 管理编译,构建 OTP 生产版本,将结果包拷贝到临时路径,在那里启动 ejabberd:
./configure --with-rebar=rebar3
make rel
cp _build/prod/rel/ejabberd/ejabberd-21.04.123.tar.gz /tmp
cd /tmp
mkdir ejatest
tar -xzf ejabberd-21.04.123.tar.gz -C ejatest
ejatest/bin/ejabberd console
如果为 ./configure
提供使用 rebar3 或 mix 的选项 --with-rebar
,那么可以构建 OTP 开发版本。
这被设计为在本机运行 ejabberd,用于开发、手工测试...而不在系统中安装。
该开发版本有一些自定义:使用虚拟证书文件,如果注册账号 admin@localhost,那么它有用管理权限...
下面的示例使用 Elixir 的 mix,管理编译,构建 OTP 开发版本,在那里启动 ejabberd:
./configure --with-rebar=mix
make dev
_build/dev/rel/ejabberd/bin/ejabberdctl live
根据安装 ejabberd 的方式,可以在系统启动时由操作系统自动启动。
可以使用 ejabberdctl
命令行管理脚本启动和停止 ejabberd,检查状态和许多其它管理任务。
如果提供了配置选项 --enable-user=USER
,那么可以使用该系统账号或 root 执行 ejabberdctl
。
使用示例:
xprompt> ejabberdctl start
prompt> ejabberdctl status
The node ejabberd@localhost is started with status: started
ejabberd is running in that node
prompt> ejabberdctl stop
如果 ejabberd 未正确启动,并且生成崩溃转储文件,那么存在严重的问题。可以尝试使用命令 bin/ejabberdctl live
以交互式模式启动 ejabberd,以查看 Erlang 提供的错误消息以及明确问题所在。
在 Linux 安装器和 Docker 镜像中,ejabberdctl
管理脚本被包含在 bin
目录中。
请参阅 ejabberdctl 部分,获取关于 ejabberdctl
和优化 Erlang 运行时系统的可配置选项的细节。
如果通过源代码或一些其它未设置自动启动 ejabberd 的方法编译 ejabberd,那么可以尝试此方法。
在 *nix 系统上,创建名为 ejabberd 的系统用户,授予其对目录 database/
和 logs/
的写权限,并且将其设置为 home。
如果希望在启动时,使用该用户以守护进程的方式启动 ejabberd,那么将 ejabberd.init
从 bin
目录拷贝到 /etc/init.d/ejabberd
之类的目录。然后调用 /etc/inid.d/ejabberd start
启动服务。
或者,如果拥有 systemd 发行版:
ejabberd.service
拷贝到 /etc/systemd/system/
systemctl daemon-reload
systemctl enable ejabberd.service
systemctl start ejabberd
启动服务启动 ejabberd 时,系统中启动的进程是 beam
或 beam.smp
,以及 epmd
。
一些 ejabberd 安装方法询问第一个账号的详细信息,注册该账号,并且授予其管理权限;在这种情况下,可以跳过本部分。
在通过源代码或其它方式安装 ejabberd 后,可能希望注册第一个 XMPP 账号,并且授予其管理权限:
在 ejabberd 服务上注册 XMPP 账号。比如,如果 example.org
被配置在 ejabberd 配置文件的 hosts 部分,那么可以使用 JID admin1@example.org
注册账号。在 ejabberd 中注册 XMPP 账号的方式有两种:
使用 XMPP 客户端和 In-Band Registration
使用 ejabberdctl:
x
ejabberdctl register admin1 example.org password
编辑 ejabberd 配置文件,授予注册的 XMPP 账号管理权限:
xxxxxxxxxx
acl
admin
user admin1@example.org
access_rules
configure
allow admin
可以授予多个 XMPP 账号以及其它 XMPP 服务上的账号管理权限。
重启 ejabberd,加载新配置,或运行 reload_config 命令
在喜欢的浏览器中打开 Web 管理页面。确切地址取决于 ejabberd 配置,可能是 http://localhost:5280/admin/、https://localhost:5443/admin/、https://localhost:5280/admin/ ... 确保输入完整 JID,在本例中是 admin1@example.org
。查看 Web Admin 获取详细信息
现在已经安装及运行 ejabberd,是时候根据需要配置它了。可以遵循 Configuration 部分,也可以查看教程。