用Elixir Mix构建Ejabberd发行包

Github上Ejabberd最新版15.07支持通过Elixir Mix构建工具创建Ejabberd的发行(部署)包.

详细信息参考这篇BLog: https://blog.process-one.net/building-an-otp-release-for-ejabberd-with-elixir-mix/

其使用了Elixir的exrm打包工具

构建过程和步骤

1. 创建目录和克隆仓库

1
mkdir ejabberd-demo1
mkdir ejabberd-demo1/deploy
cd ejabberd-demo1
git clone https://github.com/processone/ejabberd.git

2. 编译

1
cd ejabberd-demo1/ejabberd
mix do deps.get, compile

3. 创建发布包

1
MIX_ENV=prod mix release

4. 部署

1
mkdir -p deploy/ejabberd
tar zxvf rel/ejabberd/releases/15.07.0/ejabberd.tar.gz  -C deploy/ejabberd

5. 创建配置文件

1
mkdir deploy/ejabberd/config
cd deploy/ejabberd/config
wget https://gist.githubusercontent.com/mremond/383666d563025e86adfe/raw/723dfa50c955c112777f3361b4f2067b76a55d7b/ejabberd.yml

6. 启动

前台运行(调试)

1
deploy/ejabberd/bin/ejabberd console

后台运行(产品环境)

1
deploy/ejabberd/bin/ejabberd start

7. 注册一个测试用户

1
:ejabberd_auth.try_register("user1", "localhost", "mypass")

8. 停止Ejabberd

调试

1
:init.stop()

热代码替换步骤

假定在15.07.0中发现了一个BUG, 修改该BUG后, 更新线上系统.

1. 修改Ejabberd源码

比如修改一个线上的程序BUG

2. 修改Mix项目文件

修改Ejabberd源码根目录下的mix.exs文件, 提升版本号

3. 编译

1
mix compile

4. 重新生产新的发行包

1
MIX_ENV=prod mix release

5. 实时升级线上系统

  • 创建一个新目录
1
mkdir -p deploy/ejabberd/releases/15.07.1
  • 创建新发行文件
1
tar zxvf rel/ejabberd/releases/15.07.1/ejabberd.tar.gz  -C deploy/ejabberd
  • 执行升级
1
deploy/ejabberd/bin/ejabberd upgrade "15.07.1"

结语

上述只是一个基本过程, 实际项目往往比这个过程复杂, 这个简单的过程只是说明如何使用.