From 3367b539b7e6824fa9ce30612a3f13f9b5466eb8 Mon Sep 17 00:00:00 2001 From: Felix Bartels <1257835+fbartels@users.noreply.github.com> Date: Wed, 15 Jan 2020 13:26:30 +0100 Subject: [PATCH] move external components to their own files (#319) * move ldap to its own file * add separate files for db and mail as well * add new compose file to the default compose_file variable * enhance setup.sh to add these new compose files if they are currently missing --- Makefile | 2 +- docker-compose.db.yml | 30 +++++++++++ docker-compose.ldap.yml | 44 ++++++++++++++++ docker-compose.mail.yml | 67 ++++++++++++++++++++++++ docker-compose.ports.yml | 10 ---- docker-compose.yml | 109 --------------------------------------- setup.sh | 25 ++++++++- 7 files changed, 165 insertions(+), 122 deletions(-) create mode 100644 docker-compose.db.yml create mode 100644 docker-compose.ldap.yml create mode 100644 docker-compose.mail.yml diff --git a/Makefile b/Makefile index bf68c1d..a3badfc 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,7 @@ KOPANO_ZPUSH_REPOSITORY_URL := http://repo.z-hub.io/z-push:/final/Debian_9.0/ RELEASE_KEY_DOWNLOAD := 0 DOWNLOAD_COMMUNITY_PACKAGES := 1 -DOCKERCOMPOSE_FILE := docker-compose.yml +DOCKERCOMPOSE_FILE := docker-compose.yml -f docker-compose.db.yml -f docker-compose.ldap.yml -f docker-compose.mail.yml TAG_FILE := build.tags -include .env export diff --git a/docker-compose.db.yml b/docker-compose.db.yml new file mode 100644 index 0000000..2080e1c --- /dev/null +++ b/docker-compose.db.yml @@ -0,0 +1,30 @@ +version: "3.5" + +services: + db: + image: mariadb:10.3.10-bionic + restart: unless-stopped + container_name: ${COMPOSE_PROJECT_NAME}_db + volumes: + - mysql/:/var/lib/mysql + environment: + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + - MYSQL_USER=${MYSQL_USER} + env_file: + - db.env + healthcheck: + test: ["CMD-SHELL", 'mysql --database=$$MYSQL_DATABASE --password=$$MYSQL_ROOT_PASSWORD --execute="SELECT count(table_name) > 0 FROM information_schema.tables;" --skip-column-names -B'] + interval: 30s + timeout: 10s + retries: 4 + networks: + - kopano-net + + kopano_server: + depends_on: + - db + +volumes: + mysql: diff --git a/docker-compose.ldap.yml b/docker-compose.ldap.yml new file mode 100644 index 0000000..fb30344 --- /dev/null +++ b/docker-compose.ldap.yml @@ -0,0 +1,44 @@ +version: "3.5" + +services: + ldap: + image: ${docker_repo:-zokradonh}/${LDAP_CONTAINER:-kopano_ldap_demo}:${LDAP_VERSION:-latest} + restart: unless-stopped + container_name: ${COMPOSE_PROJECT_NAME}_ldap + ports: + - ${LDAPPORT:-389}:389 + environment: + - LDAP_ADMIN_PASSWORD=${LDAP_ADMIN_PASSWORD} + - LDAP_BASE_DN=${LDAP_BASE_DN} + - LDAP_DOMAIN=${LDAP_DOMAIN} + - LDAP_ORGANISATION=${LDAP_ORGANISATION} + - LDAP_READONLY_USER_PASSWORD=${LDAP_READONLY_USER_PASSWORD} + - LDAP_READONLY_USER=true + env_file: + - ldap.env + command: "--loglevel info --copy-service" + volumes: + - ldap:/var/lib/ldap + - slapd:/etc/ldap/slapd.d + networks: + - ldap-net + + mail: + depends_on: + - ldap + networks: + - ldap-net + + kopano_server: + depends_on: + - ldap + networks: + - ldap-net + +volumes: + ldap: + slapd: + +networks: + ldap-net: + driver: bridge diff --git a/docker-compose.mail.yml b/docker-compose.mail.yml new file mode 100644 index 0000000..342479f --- /dev/null +++ b/docker-compose.mail.yml @@ -0,0 +1,67 @@ +version: "3.5" + +services: + mail: + image: tvial/docker-mailserver:release-v6.2.0 + restart: unless-stopped + hostname: mail + domainname: ${LDAP_DOMAIN} + container_name: ${COMPOSE_PROJECT_NAME}_mail + ports: + - "${SMTPPORT:-25}:25" + - "${SMTPSPORT:-465}:465" + - "${MSAPORT:-587}:587" + volumes: + - maildata:/var/mail + - mailstate:/var/mail-state + - mtaconfig:/tmp/docker-mailserver/ + environment: + - DMS_DEBUG=0 + - ENABLE_CLAMAV=1 + - ENABLE_FAIL2BAN=1 + - ENABLE_LDAP=1 + - ENABLE_POSTFIX_VIRTUAL_TRANSPORT=1 + - ENABLE_POSTGREY=1 + - ENABLE_SASLAUTHD=1 + - ENABLE_SPAMASSASSIN=1 + - LDAP_BIND_DN=${LDAP_BIND_DN} + - LDAP_BIND_PW=${LDAP_BIND_PW} + - LDAP_QUERY_FILTER_ALIAS=${LDAP_QUERY_FILTER_ALIAS} + - LDAP_QUERY_FILTER_DOMAIN=${LDAP_QUERY_FILTER_DOMAIN} + - LDAP_QUERY_FILTER_GROUP=${LDAP_QUERY_FILTER_GROUP} + - LDAP_QUERY_FILTER_USER=${LDAP_QUERY_FILTER_USER} + - LDAP_SEARCH_BASE=${LDAP_SEARCH_BASE} + - LDAP_SERVER_HOST=${LDAP_SERVER} + - ONE_DIR=1 + - PERMIT_DOCKER=connected-networks + - POSTFIX_DAGENT=lmtp:kopano_dagent:2003 + - POSTMASTER_ADDRESS=${POSTMASTER_ADDRESS} + - REPORT_RECIPIENT=1 + - SASLAUTHD_LDAP_BIND_DN=${LDAP_BIND_DN} + - SASLAUTHD_LDAP_FILTER=${SASLAUTHD_LDAP_FILTER} + - SASLAUTHD_LDAP_PASSWORD=${LDAP_BIND_PW} + - SASLAUTHD_LDAP_SEARCH_BASE=${LDAP_SEARCH_BASE} + - SASLAUTHD_LDAP_SERVER=${LDAP_SERVER} + - SASLAUTHD_MECHANISMS=ldap + - SMTP_ONLY=1 + - SSL_TYPE=self-signed + - TZ=${TZ} + env_file: + - mail.env + networks: + - kopano-net + # dns: 1.1.1.1 # using Google DNS can lead to lookup errors uncomment this option and + # set to the ip of a trusted dns service (Cloudflare is given as an example). + # See https://github.com/zokradonh/kopano-docker/issues/52 for more information. + cap_add: + - NET_ADMIN + - SYS_PTRACE + + kopano_spooler: + depends_on: + - mail + +volumes: + maildata: + mailstate: + mtaconfig: diff --git a/docker-compose.ports.yml b/docker-compose.ports.yml index 6d76061..4f5b7a8 100644 --- a/docker-compose.ports.yml +++ b/docker-compose.ports.yml @@ -7,16 +7,6 @@ services: - "${HTTP:-80}:80" - "${HTTPS:-443}:443" - ldap: - ports: - - ${LDAPPORT:-389}:389 - - mail: - ports: - - "${SMTPPORT:-25}:25" - - "${SMTPSPORT:-465}:465" - - "${MSAPORT:-587}:587" - kopano_server: ports: - ${KOPANOPORT:-236}:236 diff --git a/docker-compose.yml b/docker-compose.yml index 1bae32f..83d6990 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,102 +26,6 @@ services: aliases: - ${FQDNCLEANED?err} - ldap: - image: ${docker_repo:-zokradonh}/${LDAP_CONTAINER:-kopano_ldap_demo}:${LDAP_VERSION:-latest} - restart: unless-stopped - container_name: ${COMPOSE_PROJECT_NAME}_ldap - environment: - - LDAP_ADMIN_PASSWORD=${LDAP_ADMIN_PASSWORD} - - LDAP_BASE_DN=${LDAP_BASE_DN} - - LDAP_DOMAIN=${LDAP_DOMAIN} - - LDAP_ORGANISATION=${LDAP_ORGANISATION} - - LDAP_READONLY_USER_PASSWORD=${LDAP_READONLY_USER_PASSWORD} - - LDAP_READONLY_USER=true - env_file: - - ldap.env - command: "--loglevel info --copy-service" - volumes: - - ldap:/var/lib/ldap - - slapd:/etc/ldap/slapd.d - networks: - - ldap-net - - mail: - image: tvial/docker-mailserver:release-v6.2.0 - restart: unless-stopped - hostname: mail - domainname: ${LDAP_DOMAIN} - container_name: ${COMPOSE_PROJECT_NAME}_mail - depends_on: - - ldap - volumes: - - maildata:/var/mail - - mailstate:/var/mail-state - - mtaconfig:/tmp/docker-mailserver/ - environment: - - DMS_DEBUG=0 - - ENABLE_CLAMAV=1 - - ENABLE_FAIL2BAN=1 - - ENABLE_LDAP=1 - - ENABLE_POSTFIX_VIRTUAL_TRANSPORT=1 - - ENABLE_POSTGREY=1 - - ENABLE_SASLAUTHD=1 - - ENABLE_SPAMASSASSIN=1 - - LDAP_BIND_DN=${LDAP_BIND_DN} - - LDAP_BIND_PW=${LDAP_BIND_PW} - - LDAP_QUERY_FILTER_ALIAS=${LDAP_QUERY_FILTER_ALIAS} - - LDAP_QUERY_FILTER_DOMAIN=${LDAP_QUERY_FILTER_DOMAIN} - - LDAP_QUERY_FILTER_GROUP=${LDAP_QUERY_FILTER_GROUP} - - LDAP_QUERY_FILTER_USER=${LDAP_QUERY_FILTER_USER} - - LDAP_SEARCH_BASE=${LDAP_SEARCH_BASE} - - LDAP_SERVER_HOST=${LDAP_SERVER} - - ONE_DIR=1 - - PERMIT_DOCKER=connected-networks - - POSTFIX_DAGENT=lmtp:kopano_dagent:2003 - - POSTMASTER_ADDRESS=${POSTMASTER_ADDRESS} - - REPORT_RECIPIENT=1 - - SASLAUTHD_LDAP_BIND_DN=${LDAP_BIND_DN} - - SASLAUTHD_LDAP_FILTER=${SASLAUTHD_LDAP_FILTER} - - SASLAUTHD_LDAP_PASSWORD=${LDAP_BIND_PW} - - SASLAUTHD_LDAP_SEARCH_BASE=${LDAP_SEARCH_BASE} - - SASLAUTHD_LDAP_SERVER=${LDAP_SERVER} - - SASLAUTHD_MECHANISMS=ldap - - SMTP_ONLY=1 - - SSL_TYPE=self-signed - - TZ=${TZ} - env_file: - - mail.env - networks: - - kopano-net - - ldap-net - # dns: 1.1.1.1 # using Google DNS can lead to lookup errors uncomment this option and - # set to the ip of a trusted dns service (Cloudflare is given as an example). - # See https://github.com/zokradonh/kopano-docker/issues/52 for more information. - cap_add: - - NET_ADMIN - - SYS_PTRACE - - db: - image: mariadb:10.3.10-bionic - restart: unless-stopped - container_name: ${COMPOSE_PROJECT_NAME}_db - volumes: - - mysql/:/var/lib/mysql - environment: - - MYSQL_DATABASE=${MYSQL_DATABASE} - - MYSQL_PASSWORD=${MYSQL_PASSWORD} - - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - - MYSQL_USER=${MYSQL_USER} - env_file: - - db.env - healthcheck: - test: ["CMD-SHELL", 'mysql --database=$$MYSQL_DATABASE --password=$$MYSQL_ROOT_PASSWORD --execute="SELECT count(table_name) > 0 FROM information_schema.tables;" --skip-column-names -B'] - interval: 30s - timeout: 10s - retries: 4 - networks: - - kopano-net - kopano_ssl: image: ${docker_repo:-zokradonh}/kopano_ssl:${SSL_VERSION:-latest} read_only: true @@ -153,10 +57,8 @@ services: hostname: kopano_server container_name: ${COMPOSE_PROJECT_NAME}_server depends_on: - - db - kopano_konnect - kopano_ssl - - ldap environment: - ADDITIONAL_KOPANO_PACKAGES=${ADDITIONAL_KOPANO_PACKAGES} - KCCOMMENT_LDAP_1=${KCCOMMENT_LDAP_1} @@ -188,7 +90,6 @@ services: - kopano_server.env networks: - kopano-net - - ldap-net - web-net volumes: - /etc/machine-id:/etc/machine-id @@ -367,7 +268,6 @@ services: domainname: ${LDAP_DOMAIN} depends_on: - kopano_server - - mail volumes: - /etc/machine-id:/etc/machine-id - /var/lib/dbus/machine-id:/var/lib/dbus/machine-id @@ -562,7 +462,6 @@ services: container_name: ${COMPOSE_PROJECT_NAME}_scheduler networks: - kopano-net - - ldap-net - web-net depends_on: - kopano_server @@ -588,18 +487,10 @@ volumes: kopanosocket: kopanossl: kopanowebapp: - ldap: - maildata: - mailstate: - mtaconfig: - mysql: - slapd: web: zpushstates: networks: kopano-net: driver: bridge - ldap-net: - driver: bridge web-net: diff --git a/setup.sh b/setup.sh index 48e760b..8d11f4e 100755 --- a/setup.sh +++ b/setup.sh @@ -326,7 +326,7 @@ INSECURE=$INSECURE # Docker Repository to push to/pull from docker_repo=zokradonh COMPOSE_PROJECT_NAME=kopano -COMPOSE_FILE=docker-compose.yml:docker-compose.ports.yml +COMPOSE_FILE=docker-compose.yml:docker-compose.ports.yml:docker-compose.db.yml:docker-compose.ldap.yml:docker-compose.mail.yml # Modify below to build a different version, than the kopano nightly release #KOPANO_CORE_REPOSITORY_URL=https://serial:REPLACE-ME@download.kopano.io/supported/core:/final/Debian_9.0/ @@ -347,10 +347,31 @@ EOF else if ! grep -q COMPOSE_FILE ./.env; then - echo "Adding COMPOSE_FILE setting to .env" + echo "Adding COMPOSE_FILE setting to .env (for docker-compose.ports.yml)" echo "COMPOSE_FILE=docker-compose.yml:docker-compose.ports.yml" >> ./.env fi + if ! grep -q docker-compose.db.yml ./.env; then + echo "Adding docker-compose.db.yml to COMPOSE_FILE variable in .env" + cfvalue="$(grep COMPOSE_FILE ./.env)" + sed -i "/^COMPOSE_FILE=/d" ./.env + echo "$cfvalue:docker-compose.db.yml" >> ./.env + fi + + if ! grep -q docker-compose.ldap.yml ./.env; then + echo "Adding docker-compose.ldap.yml to COMPOSE_FILE variable in .env" + cfvalue="$(grep COMPOSE_FILE ./.env)" + sed -i "/^COMPOSE_FILE=/d" ./.env + echo "$cfvalue:docker-compose.ldap.yml" >> ./.env + fi + + if ! grep -q docker-compose.mail.yml ./.env; then + echo "Adding docker-compose.mail.yml to COMPOSE_FILE variable in .env" + cfvalue="$(grep COMPOSE_FILE ./.env)" + sed -i "/^COMPOSE_FILE=/d" ./.env + echo "$cfvalue:docker-compose.mail.yml" >> ./.env + fi + echo ".env already exists with initial configuration" echo "If you want to change the configuration, please edit .env directly" exit 1