151 lines
3.9 KiB
YAML
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:
|
|
|