From the Dockerfile docs: > Environment variable persistence can cause unexpected side effects. > For example, setting ENV DEBIAN_FRONTEND=noninteractive changes the > behavior of apt-get, and may confuse users of your image. > > If an environment variable is only needed during build, and not in the > final image, consider setting a value for a single command instead. So this patch adjusts the use of the DEBIAN_FRONTEND variable to match the documented best practice. https://github.com/albertito/chasquid/pull/68 Amended-by: Alberto Bertogli <albertito@blitiri.com.ar> Adjusted commit message.
Docker
chasquid comes with a Dockerfile to create a container running chasquid, dovecot, and managed certificates with Let's Encrypt.
Note these are less thoroughly tested than the traditional setup, which is the recommended way to use chasquid.
Images
There are pre-built images at the gitlab registry and dockerhub. They are automatically built, and tagged with the corresponding branch name. Use the main tag for a stable version.
If, instead, you want to build the image yourself, just run:
$ docker build -t chasquid -f docker/Dockerfile .
Or, if you are cross-compiling for a different architecture, e.g. arm64:
$ docker build --platform=linux/arm64 -t chasquid -f docker/Dockerfile .
Running
First, pull the image into your target machine:
$ docker pull registry.gitlab.com/albertito/chasquid:main
You will need a data volume to store persistent data, outside the image. This will contain the mailboxes, user databases, etc.
$ docker volume create chasquid-data
To add your first user to the image:
$ docker run \
--mount source=chasquid-data,target=/data \
--rm -it --entrypoint=/add-user.sh \
registry.gitlab.com/albertito/chasquid:main
Email (full user@domain format): pepe@example.com
Password:
pepe@example.com added to /data/dovecot/users
Upon startup, the image will obtain a TLS certificate for you using Let's
Encrypt. You need to tell it the domain(s) to get a
certificate from by setting the AUTO_CERTS variable.
Because certificates expire, you should restart the container every week or so. Certificates will be renewed automatically upon startup if needed.
In order for chasquid to get access to the source IP address, you will need to use host networking, or create a custom docker network that does IP forwarding and not proxying.
Finally, start the container:
$ docker run -e AUTO_CERTS=mail.yourdomain.com \
--mount source=chasquid-data,target=/data \
--network host \
registry.gitlab.com/albertito/chasquid:main
Debugging
To get a shell on the running container for debugging, you can use docker ps
to find the container ID, and then docker exec -it CONTAINERID /bin/bash to
open a shell on the running container.