aboutsummaryrefslogtreecommitdiff
path: root/docker/examples
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2017-09-25 17:48:57 +0200
committerChristophe Romain <christophe.romain@process-one.net>2017-09-25 17:48:57 +0200
commitb8ab80d1f373165239b3861b992e24411cc60310 (patch)
tree84dd73cbe36c9504a8c411869ca68324abd2064b /docker/examples
parentAdd mod_avatar to the example configuration (diff)
Sync containers from rroemhild and add instructions in README (#1655)
Diffstat (limited to 'docker/examples')
-rw-r--r--docker/examples/docker-compose-cluster/Dockerfile3
-rw-r--r--docker/examples/docker-compose-cluster/README.md23
-rw-r--r--docker/examples/docker-compose-cluster/docker-compose.yml25
-rw-r--r--docker/examples/docker-compose-cluster/scripts/lib/functions.sh37
-rwxr-xr-xdocker/examples/docker-compose-cluster/scripts/pre/30_join_cluster.sh28
-rw-r--r--docker/examples/docker-compose/README.md1
-rw-r--r--docker/examples/docker-compose/docker-compose.yml11
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