ejabberd Development with Docker

Mickaël Rémond
Dec 5, 2016 · 3 min read
Image for post
Image for post

We have released a Docker image to help you get started with ejabberd development easily.

Docker image for ejabberd developers is available from Docker Hub: ejabberd/mix

Thanks to this image, you can build ejabberd with dependencies provided in our Docker image, without the need to install any specific tools (beside Docker) directly on your own machine.

Please note that this image can likely be reused as is to build other Erlang or Elixir software.

Pulling ejabberd development Docker image

You can pull ejabberd image for developer with this Docker command:

docker pull ejabberd/mix

Once done, you are ready to build ejabberd from source and add your custom plugin modules.

Building ejabberd from source

You can build ejabberd from source with all dependencies, with the following commands:

git clone https://github.com/processone/ejabberd.git docker run --rm -v $(pwd):$(pwd) -w $(pwd) ejabberd/mix do deps.get, deps.compile, compile

Alternatively if you do not have Git installed, you can do retrieve compressed source code archive and then build ejabberd:

wget https://github.com/processone/ejabberd/archive/master.zip unzip ejabberd-master cd ejabberd-master docker run --rm -v $(pwd):$(pwd) -w $(pwd) ejabberd/mix do deps.get, deps.compile, compile

Run ejabberd with mix command-line tool attached

During development, you will need to run ejabberd with debug console attached.

First, you can customize the configuration used by ejabberd in development mode by editing the file config/ejabberd.yml. As a default, it will run ejabberd with console attached on domain “localhost”:

docker run --rm -it -p 5222:5222 -p 5280:5280 -v $(pwd):$(pwd) -w $(pwd) --entrypoint="/usr/bin/iex" ejabberd/mix -S mix

You can then directly create a user from Elixir shell:

Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:2:2] [async-threads:10] [kernel-poll:false] Interactive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> :ejabberd_auth.try_register("test", "localhost", "passw0rd") {:atomic, :ok}

Finally, you can connect with user “test@localhost” (password: passw0rd) on server on localhost port 5222 and use those parameters to connect with an XMPP client.

Get into the container

If you want to run Erlang command line, you can do so by opening a shell inside the container and then running the command as desired:

docker run -it -v $(pwd):$(pwd) -w $(pwd) --entrypoint="/bin/sh" ejabberd/mix

Troubleshooting

Clock resync

If you have warning about file timestamp being out of sync (Like ‘Clock skew detected’), you may want to force resync your clock before running the build. Docker on MacOS does not force clock resync of Docker after the laptop went to sleep.

You can force clock resync as follow:

docker run -it --rm --privileged --entrypoint="/sbin/hwclock" ejabberd/mix -s

You can check if the clock of your laptop is in sync with the one inside Docker with the following command:

docker run --rm --entrypoint="/bin/sh" ejabberd/mix -c date -u && date -u

Send us feedback

This image is under development and improvement, so please do not hesitate to send us your feedback, so that we can improve ejabberd development experience.

The goal is to provide a simple easy way to develop ejabberd plugins from any OS, whether you use Linux, MacOS or Windows.

Enjoy !

Originally published at blog.process-one.net on December 5, 2016.

ProcessOne

Building Awesome Realtime Software!

Mickaël Rémond

Written by

@ProcessOne founder. Go, Erlang, Elixir, Swift developer. Building realtime messaging, push notification and reactive systems. @ejabberd, @boxcar, fluux lead.

ProcessOne

Building Awesome Realtime Software! Delivering rich Messaging, IoT and Push services.

Mickaël Rémond

Written by

@ProcessOne founder. Go, Erlang, Elixir, Swift developer. Building realtime messaging, push notification and reactive systems. @ejabberd, @boxcar, fluux lead.

ProcessOne

Building Awesome Realtime Software! Delivering rich Messaging, IoT and Push services.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store