docker-kopano/docker-compose.yml

151 lines
3.9 KiB
YAML

version: '3.7'
services:
mail-app:
image: mlan/kopano:8.7.80-3.5.2
restart: unless-stopped
networks:
- proxy
- backend
labels:
- traefik.enable=true
- traefik.frontend.rule=Host:mail.${DOMAIN-docker.localhost}
- traefik.docker.network=${COMPOSE_PROJECT_NAME}_proxy
- traefik.port=80
depends_on:
- auth
- mail-db
- mail-mta
environment:
- USER_PLUGIN=ldap
- LDAP_HOST=auth
- MYSQL_HOST=mail-db
- SMTP_SERVER=mail-mta
- LDAP_SEARCH_BASE=${LDAP_BASE}
- LDAP_USER_TYPE_ATTRIBUTE_VALUE=kopano-user
- LDAP_GROUP_TYPE_ATTRIBUTE_VALUE=kopano-group
- LDAP_USER_SEARCH_FILTER=(kopanoAccount=1)
- SYSLOG_LEVEL=4
env_file:
- .init.env
volumes:
- mail-conf:/etc/kopano
- mail-atch:/var/lib/kopano/attachments
- mail-sync:/var/lib/z-push
mail-mta:
image: mlan/postfix-amavis:3.8
restart: unless-stopped
hostname: ${MAIL_SRV-mx}.${MAIL_DOMAIN-docker.localhost}
networks:
- backend
ports:
- "25:25"
labels:
- traefik.enable=true
- traefik.frontend.rule=Host:${MAIL_SRV-mx}.${MAIL_DOMAIN-docker.localhost}
- traefik.docker.network=${COMPOSE_PROJECT_NAME}_proxy
- traefik.port=80
depends_on:
- auth
environment:
- MESSAGE_SIZE_LIMIT=${MESSAGE_SIZE_LIMIT-25600000}
- LDAP_HOST=auth
- DAGENT_TRANSPORT=lmtp:mail-app:2003
- SMTP_RELAY_HOSTAUTH=${SMTP_RELAY_HOSTAUTH}
- SMTP_TLS_SECURITY_LEVEL=${SMTP_TLS_SECURITY_LEVEL-}
- SMTP_TLS_WRAPPERMODE=${SMTP_TLS_WRAPPERMODE-no}
- LDAP_USER_BASE=${LDAP_USEROU},${LDAP_BASE}
- LDAP_GROUP_BASE=${LDAP_GROUPOU},${LDAP_BASE}
- LDAP_QUERY_FILTER_USER=(&(kopanoAccount=1)(mail=%s))
- LDAP_QUERY_FILTER_ALIAS=(&(kopanoAccount=1)(kopanoAliases=%s))
- LDAP_QUERY_FILTER_GROUP=(&(objectclass=kopano-group)(mail=%s))
- LDAP_QUERY_FILTER_EXPAND=(&(objectclass=kopano-user)(uid=%s))
- DKIM_SELECTOR=${DKIM_SELECTOR-default}
- SYSLOG_LEVEL=5
env_file:
- .init.env
volumes:
- mail-mta:/var
- proxy-acme:/acme
mail-db:
image: mariadb
restart: unless-stopped
command: ['--log_warnings=1']
networks:
- backend
environment:
- LANG=C.UTF-8
env_file:
- .init.env
volumes:
- mail-db:/var/lib/mysql
auth:
image: mlan/openldap:1.0
restart: unless-stopped
networks:
- backend
environment:
- LDAP_LOGLEVEL=parse
volumes:
- auth-conf:/srv/conf
- auth-data:/srv/data
proxy:
image: traefik:alpine
restart: unless-stopped
command:
- "--api"
- "--docker"
- "--defaultentrypoints=http,https"
- "--entrypoints=Name:http Address::80 Redirect.EntryPoint:https"
- "--entrypoints=Name:https Address::443 TLS"
- "--retry"
- "--docker.domain=${DOMAIN-docker.localhost}"
- "--docker.exposedbydefault=false"
- "--docker.watch=true"
- "--acme"
- "--acme.email=${CERTMASTER-certmaster}@${DOMAIN-docker.localhost}"
- "--acme.entrypoint=https"
- "--acme.onhostrule=true"
- "--acme.storage=/acme/acme.json"
- "--acme.httpchallenge"
- "--acme.httpchallenge.entrypoint=http"
- "--loglevel=ERROR"
cap_drop:
- all
cap_add:
- net_bind_service
networks:
- proxy
ports:
- "80:80" # The HTTP port
- "443:443" # The HTTPS port
labels:
- traefik.enable=true
- traefik.docker.network=${COMPOSE_PROJECT_NAME}_proxy
- traefik.port=8080
- traefik.frontend.passHostHeader=true
- traefik.frontend.rule=Host:monitor.${DOMAIN-docker.localhost}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- proxy-acme:/acme
- /dev/null:/traefik.toml
networks:
proxy:
backend:
volumes:
proxy-acme:
mail-conf:
mail-atch:
mail-db:
mail-mta:
mail-sync:
auth-conf:
auth-data: