diff options
Diffstat (limited to 'docker/examples')
7 files changed, 128 insertions, 0 deletions
diff --git a/docker/examples/docker-compose-cluster/Dockerfile b/docker/examples/docker-compose-cluster/Dockerfile new file mode 100644 index 000000000..43a715dc1 --- /dev/null +++ b/docker/examples/docker-compose-cluster/Dockerfile @@ -0,0 +1,3 @@ +FROM rroemhild/ejabberd +ENV EJABBERD_HOME /opt/ejabberd +COPY ./scripts $EJABBERD_HOME/scripts diff --git a/docker/examples/docker-compose-cluster/README.md b/docker/examples/docker-compose-cluster/README.md new file mode 100644 index 000000000..0a50e3b15 --- /dev/null +++ b/docker/examples/docker-compose-cluster/README.md @@ -0,0 +1,23 @@ +# Ejabberd cluster with docker compose + +This example uses [dnsdocker](https://github.com/tonistiigi/dnsdock) to discover other nodes and setup a multi-master cluster. + +Build the ejabberd cluster image: + +```bash +git clone https://github.com/rroemhild/docker-ejabberd.git +cd docker-ejabberd/examples/docker-compose-cluster +docker-compose build +``` + +Start dnsdocker and the first ejabberd node: + +```bash +docker-compose up -d +``` + +Wait until the first ejabberd node is up and running `docker-compose logs ejabberd`, then add some ejabberd nodes to the cluster: + +```bash +docker-compose scale ejabberd=4 +``` diff --git a/docker/examples/docker-compose-cluster/docker-compose.yml b/docker/examples/docker-compose-cluster/docker-compose.yml new file mode 100644 index 000000000..1db62aa13 --- /dev/null +++ b/docker/examples/docker-compose-cluster/docker-compose.yml @@ -0,0 +1,25 @@ +dnsdock: + image: tonistiigi/dnsdock + volumes: + - /var/run/docker.sock:/var/run/docker.sock + ports: + - 172.17.42.1:53:53/udp + +ejabberd: + build: . + ports: + - 5222 + - 5269 + - 5280 + environment: + - XMPP_DOMAIN=example.com + - ERLANG_NODE=ejabberd + - EJABBERD_ADMINS=admin@example.com + - EJABBERD_USERS=admin@example.com:test321 user@example.com + - ERLANG_COOKIE=testCluster + - SKIP_MODULES_UPDATE=true + - EJABBERD_CLUSTER=true + - USE_DNS=true + dns: 172.17.42.1 + domainname: dockercomposecluster_ejabberd.docker + tty: true diff --git a/docker/examples/docker-compose-cluster/scripts/lib/functions.sh b/docker/examples/docker-compose-cluster/scripts/lib/functions.sh new file mode 100644 index 000000000..2ff16f659 --- /dev/null +++ b/docker/examples/docker-compose-cluster/scripts/lib/functions.sh @@ -0,0 +1,37 @@ +# overwrite get_nodename to discover hostname from DNS +get_nodename() { + local hostname=${HOSTNAME} + + # get hostname from dns + if ( is_true ${USE_DNS} ); then + # wait for dns registration + sleep 1 + + nodename=$(discover_dns_hostname ${HOSTIP}) + + is_set ${nodename} \ + && hostname=${nodename} + fi + + echo $hostname + return 0 +} + + +# discover hostname from dns with a reverse lookup +discover_dns_hostname() { + local hostip=$1 + + # try to get the hostname from dns + local dnsname=$(drill -x ${hostip} \ + | grep PTR \ + | awk '{print $5}' \ + | grep -E "^[a-zA-Z0-9]+([-._]?[a-zA-Z0-9]+)*.[a-zA-Z]+\.$" \ + | cut -d '.' -f1 \ + | tail -1) + + is_set ${dnsname} \ + && echo ${dnsname} + + return 0 +} diff --git a/docker/examples/docker-compose-cluster/scripts/pre/30_join_cluster.sh b/docker/examples/docker-compose-cluster/scripts/pre/30_join_cluster.sh new file mode 100755 index 000000000..f68e22eec --- /dev/null +++ b/docker/examples/docker-compose-cluster/scripts/pre/30_join_cluster.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -e + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + + +get_cluster_node_from_dns() { + local cluster_host=$(drill ${DOMAINNAME} \ + | grep ${DOMAINNAME} \ + | grep -v ${HOSTIP} \ + | awk '{print $5}' \ + | grep -v "^$" \ + | head -1) + echo $(discover_dns_hostname ${cluster_host}) +} + + +file_exist ${FIRST_START_DONE_FILE} \ + && exit 0 + + +join_cluster $(get_cluster_node_from_dns) + + +exit 0 diff --git a/docker/examples/docker-compose/README.md b/docker/examples/docker-compose/README.md new file mode 100644 index 000000000..597e051b3 --- /dev/null +++ b/docker/examples/docker-compose/README.md @@ -0,0 +1 @@ +# simple docker-compose example diff --git a/docker/examples/docker-compose/docker-compose.yml b/docker/examples/docker-compose/docker-compose.yml new file mode 100644 index 000000000..1f547ee8f --- /dev/null +++ b/docker/examples/docker-compose/docker-compose.yml @@ -0,0 +1,11 @@ +ejabberd: + image: rroemhild/ejabberd + ports: + - 5222:5222 + - 5269:5269 + - 5280:5280 + environment: + - ERLANG_NODE=ejabberd + - XMPP_DOMAIN=example.com xyz.io + - EJABBERD_ADMINS=admin@example.com + - EJABBERD_USERS=admin@example.com:password4321 user1@xyz.io |