From 0435d5679d4a8912295da60f3b582071283bb38d Mon Sep 17 00:00:00 2001 From: Pascal Bleser Date: Wed, 16 Apr 2025 15:45:48 +0200 Subject: [PATCH] Add Stalwart container to the opencloud_full deployment, using the OpenLDAP container as a directory for user authentication --- devtools/deployments/opencloud_full/.env | 6 +- .../config/stalwart/config.toml | 79 +++++++++++++++++++ .../deployments/opencloud_full/stalwart.yml | 36 +++++++++ 3 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 devtools/deployments/opencloud_full/config/stalwart/config.toml create mode 100644 devtools/deployments/opencloud_full/stalwart.yml diff --git a/devtools/deployments/opencloud_full/.env b/devtools/deployments/opencloud_full/.env index 75d6d33f55..c06402da62 100644 --- a/devtools/deployments/opencloud_full/.env +++ b/devtools/deployments/opencloud_full/.env @@ -305,8 +305,12 @@ KEYCLOAK_ADMIN_PASSWORD= # Leaving it default stores data in docker internal volumes. #RADICALE_DATA_DIR=/your/local/radicale/data +### Stalwart Settings ### +# Note: the leading colon is required to enable the service. +#STALWART=:stalwart.yml + ## IMPORTANT ## # This MUST be the last line as it assembles the supplemental compose files to be used. # ALL supplemental configs must be added here, whether commented or not. # Each var must either be empty or contain :path/file.yml -COMPOSE_FILE=docker-compose.yml${OPENCLOUD:-}${TIKA:-}${DECOMPOSEDS3:-}${DECOMPOSEDS3_MINIO:-}${DECOMPOSED:-}${COLLABORA:-}${MONITORING:-}${IMPORTER:-}${CLAMAV:-}${INBUCKET:-}${EXTENSIONS:-}${UNZIP:-}${DRAWIO:-}${JSONVIEWER:-}${PROGRESSBARS:-}${EXTERNALSITES:-}${KEYCLOAK:-}${LDAP:-}${KEYCLOAK_AUTOPROVISIONING:-}${LDAP_MANAGER:-}${RADICALE:-} \ No newline at end of file +COMPOSE_FILE=docker-compose.yml${OPENCLOUD:-}${TIKA:-}${DECOMPOSEDS3:-}${DECOMPOSEDS3_MINIO:-}${DECOMPOSED:-}${COLLABORA:-}${MONITORING:-}${IMPORTER:-}${CLAMAV:-}${INBUCKET:-}${EXTENSIONS:-}${UNZIP:-}${DRAWIO:-}${JSONVIEWER:-}${PROGRESSBARS:-}${EXTERNALSITES:-}${KEYCLOAK:-}${LDAP:-}${KEYCLOAK_AUTOPROVISIONING:-}${LDAP_MANAGER:-}${RADICALE:-}${STALWART:-} diff --git a/devtools/deployments/opencloud_full/config/stalwart/config.toml b/devtools/deployments/opencloud_full/config/stalwart/config.toml new file mode 100644 index 0000000000..efeb2e4427 --- /dev/null +++ b/devtools/deployments/opencloud_full/config/stalwart/config.toml @@ -0,0 +1,79 @@ +authentication.fallback-admin.secret = "$6$4qPYDVhaUHkKcY7s$bB6qhcukb9oFNYRIvaDZgbwxrMa2RvF5dumCjkBFdX19lSNqrgKltf3aPrFMuQQKkZpK2YNuQ83hB1B3NiWzj." +authentication.fallback-admin.user = "admin" +authentication.master.secret = "$6$4qPYDVhaUHkKcY7s$bB6qhcukb9oFNYRIvaDZgbwxrMa2RvF5dumCjkBFdX19lSNqrgKltf3aPrFMuQQKkZpK2YNuQ83hB1B3NiWzj." +authentication.master.user = "master" +directory.ldap.attributes.class = "objectClass" +directory.ldap.attributes.description = "description" +directory.ldap.attributes.email = "mail" +directory.ldap.attributes.email-alias = "mailAlias" +directory.ldap.attributes.groups = "memberOf" +directory.ldap.attributes.name = "uid" +directory.ldap.attributes.secret = "userPassword" +directory.ldap.base-dn = "dc=opencloud,dc=eu" +directory.ldap.bind.auth.dn = "uid=?,ou=users,dc=opencloud,dc=eu" +directory.ldap.bind.auth.enable = true +directory.ldap.bind.auth.search = true +directory.ldap.bind.dn = "cn=admin,dc=opencloud,dc=eu" +directory.ldap.bind.secret = "admin" +directory.ldap.cache.ttl.negative = "10m" +directory.ldap.cache.ttl.positive = "1h" +directory.ldap.filter.email = "(&(|(objectClass=posixAccount)(objectClass=posixGroup))(|(mail=?)(mailAlias=?)(mailList=?)))" +directory.ldap.filter.name = "(&(|(objectClass=posixAccount)(objectClass=posixGroup))(uid=?))" +directory.ldap.timeout = "3s" +directory.ldap.tls.allow-invalid-certs = false +directory.ldap.tls.enable = false +directory.ldap.type = "ldap" +directory.ldap.url = "ldap://ldap-server:1389" +server.hostname = "stalwart.opencloud.test" +server.http.allowed-endpoint = 200 +server.http.hsts = false +server.http.permissive-cors = false +server.http.url = "protocol + '://stalwart.opencloud.test:' + local_port" +server.http.use-x-forwarded = false +server.listener.http.bind = "[::]:8080" +server.listener.http.protocol = "http" +server.listener.https.bind = "[::]:443" +server.listener.https.protocol = "http" +server.listener.https.tls.implicit = true +server.listener.imap.bind = "[::]:143" +server.listener.imap.protocol = "imap" +server.listener.imaptls.bind = "[::]:993" +server.listener.imaptls.protocol = "imap" +server.listener.imaptls.tls.implicit = true +server.listener.pop3.bind = "[::]:110" +server.listener.pop3.protocol = "pop3" +server.listener.pop3s.bind = "[::]:995" +server.listener.pop3s.protocol = "pop3" +server.listener.pop3s.tls.implicit = true +server.listener.sieve.bind = "[::]:4190" +server.listener.sieve.protocol = "managesieve" +server.listener.smtp.bind = "[::]:25" +server.listener.smtp.protocol = "smtp" +server.listener.submission.bind = "[::]:587" +server.listener.submission.protocol = "smtp" +server.listener.submissions.bind = "[::]:465" +server.listener.submissions.protocol = "smtp" +server.listener.submissions.tls.implicit = true +server.max-connections = 8192 +server.socket.backlog = 1024 +server.socket.nodelay = true +server.socket.reuse-addr = true +server.socket.reuse-port = true +storage.blob = "rocksdb" +storage.data = "rocksdb" +storage.directory = "ldap" +storage.fts = "rocksdb" +storage.lookup = "rocksdb" +store.rocksdb.compression = "lz4" +store.rocksdb.path = "/opt/stalwart-mail/data" +store.rocksdb.type = "rocksdb" +tracer.log.ansi = true +tracer.log.buffered = true +tracer.log.enable = true +tracer.log.level = "trace" +tracer.log.lossy = false +tracer.log.multiline = false +tracer.log.type = "stdout" +metrics.prometheus.enable = true +metrics.prometheus.auth.username = "metrics" +metrics.prometheus.auth.secret = "secret" diff --git a/devtools/deployments/opencloud_full/stalwart.yml b/devtools/deployments/opencloud_full/stalwart.yml new file mode 100644 index 0000000000..35ed532ec5 --- /dev/null +++ b/devtools/deployments/opencloud_full/stalwart.yml @@ -0,0 +1,36 @@ +--- +services: + traefik: + networks: + opencloud-net: + aliases: + - ${STALWART_DOMAIN:-stalwart.opencloud.test} + + stalwart: + image: stalwartlabs/mail-server:latest + networks: + - opencloud-net + ports: + - "127.0.0.1:143:143" + - "127.0.0.1:993:993" + volumes: + - ./config/stalwart:/opt/stalwart-mail/etc + - stalwart-data:/opt/stalwart-mail/data + - stalwart-logs:/opt/stalwart-mail/logs + labels: + - "traefik.enable=true" + - "traefik.http.routers.stalwart.entrypoints=https" + - "traefik.http.routers.stalwart.rule=Host(`${STALWART_DOMAIN:-stalwart.opencloud.test}`)" + - "traefik.http.routers.stalwart.tls.certresolver=http" + - "traefik.http.routers.stalwart.service=stalwart" + - "traefik.http.services.stalwart.loadbalancer.server.port=8080" + logging: + driver: ${LOG_DRIVER:-local} + restart: always + +volumes: + stalwart-data: + stalwart-logs: + +networks: + opencloud-net: