Ejabberd容器化部署与配置指南

Ejabberd容器化部署与配置指南

ejabberd Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server) ejabberd 项目地址: https://gitcode.com/gh_mirrors/ej/ejabberd

概述

Ejabberd是一个基于Erlang/OTP构建的开源、健壮、可扩展的实时通信平台,包含XMPP服务器、MQTT代理和SIP服务。本文将详细介绍如何使用容器化技术部署和配置Ejabberd服务。

容器镜像选择

Ejabberd提供两种主要的容器镜像:

  1. 标准Ejabberd镜像:基于Alpine Linux构建,支持x64和arm64架构
  2. 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集群需注意:

  1. 每个节点必须有唯一的Erlang节点名
  2. 所有节点必须使用相同的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的高性能特性,同时享受容器技术带来的部署便利性。建议生产环境部署时,务必配置好数据持久化和适当的网络策略。

ejabberd Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server) ejabberd 项目地址: https://gitcode.com/gh_mirrors/ej/ejabberd

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任翊昆Mary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值