git » chasquid » commit b4c429a

docker: Update Dovecot config to 2.4

author Alberto Bertogli
2026-02-01 12:52:16 UTC
committer Alberto Bertogli
2026-02-01 13:34:15 UTC
parent f11d2d364e9c833439ca396de4d66748f394df35

docker: Update Dovecot config to 2.4

Debian 13, the new stable version, updated Dovecot from 2.3 to 2.4.
Unfortunately, the new Dovecot version introduced several changes to the
configuration file that are not backwards-compatible.

https://doc.dovecot.org/2.4.2/installation/upgrade/2.3-to-2.4.html

This patch updates our docker's Dovecot config to the new version.

Thanks to Ernesto Alfonso (erjoalgo@github) for reporting this problem
in https://github.com/albertito/chasquid/issues/80.

docker/dovecot.conf +16 -12
docker/entrypoint.sh +4 -4

diff --git a/docker/dovecot.conf b/docker/dovecot.conf
index cd07b73..d305c80 100644
--- a/docker/dovecot.conf
+++ b/docker/dovecot.conf
@@ -1,4 +1,7 @@
 
+dovecot_config_version = 2.4.0
+dovecot_storage_version = 2.4.0
+
 #
 # Logging
 #
@@ -10,10 +13,11 @@ log_path = /data/dovecot/dovecot.log
 
 # Store emails in /data/mail/home/domain/user, which will be inside the
 # container's volume.
-mail_home = /data/mail/home/%d/%n
+mail_home = /data/mail/home/%{user|domain}/%{user|username}
 
 # Use Dovecot's native format.
-mail_location = mdbox:~/mdbox
+mail_driver = mdbox
+mail_path = ~/mdbox
 
 # User and group used to store and access mailboxes.
 mail_uid = dovecot
@@ -31,13 +35,13 @@ first_valid_gid = 100
 
 # Static file, in /data/dovecot/users.
 auth_mechanisms = plain
-passdb {
-  driver = passwd-file
-  args = scheme=CRYPT username_format=%u /data/dovecot/users
+passdb passwd-file {
+  passwd_file_path = /data/dovecot/users
+  auth_username_format = %{user}
 }
-userdb {
-  driver = passwd-file
-  args = /data/dovecot/users
+userdb passwd-file {
+  passwd_file_path = /data/dovecot/users
+  auth_username_format = %{user}
 }
 
 
@@ -102,8 +106,10 @@ service managesieve {
 }
 protocol sieve {
 }
-plugin {
-  sieve = file:~/sieve;active=~/.dovecot.sieve
+sieve_script personal {
+  driver = file
+  path = ~/sieve
+  active_path = ~/.dovecot.sieve
 }
 
 #
@@ -125,8 +131,6 @@ service auth {
 }
 service auth-worker {
 }
-dict {
-}
 service lmtp {
   # This is used by mda-lmtp.
   unix_listener lmtp {
diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
index a864bf2..a357e3e 100755
--- a/docker/entrypoint.sh
+++ b/docker/entrypoint.sh
@@ -85,13 +85,13 @@ chown dovecot:dovecot /data/mail/
 # The default goes first because dovecot complains otherwise.
 echo "# Autogenerated by entrypoint.sh" > /etc/dovecot/auto-ssl.conf
 cat >> /etc/dovecot/auto-ssl.conf <<EOF
-ssl_cert = </etc/letsencrypt/live/$ONE_DOMAIN/fullchain.pem
-ssl_key = </etc/letsencrypt/live/$ONE_DOMAIN/privkey.pem
+ssl_server_cert_file = /etc/letsencrypt/live/$ONE_DOMAIN/fullchain.pem
+ssl_server_key_file = /etc/letsencrypt/live/$ONE_DOMAIN/privkey.pem
 EOF
 for DOMAIN in $CERT_DOMAINS; do
 	echo "local_name $DOMAIN {"
-        echo "  ssl_cert = </etc/letsencrypt/live/$DOMAIN/fullchain.pem"
-        echo "  ssl_key = </etc/letsencrypt/live/$DOMAIN/privkey.pem"
+        echo "  ssl_server_cert_file = /etc/letsencrypt/live/$DOMAIN/fullchain.pem"
+        echo "  ssl_server_key_file = /etc/letsencrypt/live/$DOMAIN/privkey.pem"
 	echo "}"
 done >> /etc/dovecot/auto-ssl.conf