Ejabberd容器化部署与配置指南
概述
Ejabberd是一个基于Erlang/OTP构建的开源、健壮、可扩展的实时通信平台,包含XMPP服务器、MQTT代理和SIP服务。本文将详细介绍如何使用容器化技术部署和配置Ejabberd服务。
容器镜像选择
Ejabberd提供两种主要的容器镜像:
- 标准Ejabberd镜像:基于Alpine Linux构建,支持x64和arm64架构
- ECS镜像:专为稳定版Ejabberd构建,仅支持x64架构
快速启动
基础启动方式
以守护进程方式启动Ejabberd容器:
docker run --name ejabberd -d -p 5222:5222 ghcr.io/processone/ejabberd
此命令会:
- 创建一个名为ejabberd的容器
- 映射5222端口(XMPP客户端默认端口)
- 使用localhost作为默认XMPP域
带Erlang控制台的启动
如需调试,可附加Erlang控制台:
docker run --name ejabberd -it -p 5222:5222 ghcr.io/processone/ejabberd live
使用自定义配置
建议将配置和数据目录挂载到宿主机:
mkdir conf && cp ejabberd.yml.example conf/ejabberd.yml
mkdir database && chown 9000:9000 database
docker run --name ejabberd -it \
-v $(pwd)/conf/ejabberd.yml:/opt/ejabberd/conf/ejabberd.yml \
-v $(pwd)/database:/opt/ejabberd/database \
-p 5222:5222 ghcr.io/processone/ejabberd live
注意:容器内Ejabberd以UID/GID 9000运行,需确保挂载目录有适当权限。
初始配置
管理员账户设置
自动注册方式
设置环境变量自动创建管理员账户:
docker run --name ejabberd -d \
-e REGISTER_ADMIN_PASSWORD=yourpassword \
-p 5222:5222 ghcr.io/processone/ejabberd
账户名取决于其他环境变量:
- 设置了
EJABBERD_MACRO_ADMIN
:使用指定JID - 设置了
EJABBERD_MACRO_HOST
:使用admin@指定域 - 未设置:使用admin@localhost
手动注册方式
docker exec -it ejabberd ejabberdctl register admin localhost yourpassword
日志与调试
查看日志
docker exec -it ejabberd tail -f logs/ejabberd.log
进入容器Shell
docker exec -it ejabberd sh
Erlang调试控制台
docker exec -it ejabberd ejabberdctl debug
高级配置
端口说明
容器默认暴露的端口:
- 5222:XMPP客户端端口
- 5269:XMPP服务器间通信
- 5280:管理界面
- 5443:加密的管理接口/API
- 1883:MQTT服务
- 4369-4399:Erlang节点通信
数据持久化
建议持久化的目录:
/opt/ejabberd/conf/
:配置文件和证书/opt/ejabberd/database/
:Mnesia数据库/opt/ejabberd/logs/
:日志文件/opt/ejabberd/upload/
:用户上传文件
启动时自动执行命令
通过环境变量设置启动时执行的命令:
environment:
- CTL_ON_CREATE=register admin localhost password
- CTL_ON_START=stats registeredusers; status
配置宏替换
从24.12版本开始支持通过环境变量替换配置宏:
environment:
- EJABBERD_MACRO_ADMIN=admin@example.org
集群配置
配置Ejabberd集群需注意:
- 每个节点必须有唯一的Erlang节点名
- 所有节点必须使用相同的Erlang Cookie
示例配置:
environment:
- ERLANG_NODE_ARG=ejabberd@node1
- ERLANG_COOKIE=secretcookie
- CTL_ON_CREATE=join_cluster ejabberd@master
构建自定义镜像
如需自定义构建,可基于官方Dockerfile进行扩展,添加所需模块或配置。
常见问题
CAPTCHA配置
启用CAPTCHA需先安装依赖:
docker exec --user root ejabberd apk add imagemagick ghostscript-fonts bash
然后在配置中添加:
captcha_cmd: "$HOME/bin/captcha.sh"
captcha_url: https://yourdomain:5443/captcha
主机名变更处理
如需更改容器主机名且保留原有Mnesia数据,需执行数据库节点名转换:
docker exec -it ejabberd ejabberdctl mnesia_change_nodename oldnode newnode oldbackup newbackup
总结
本文详细介绍了Ejabberd容器化部署的各个方面,从基础启动到高级集群配置。通过容器化部署,可以充分利用Ejabberd的高性能特性,同时享受容器技术带来的部署便利性。建议生产环境部署时,务必配置好数据持久化和适当的网络策略。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考