|
| 1 | +services: |
| 2 | + chatmail: |
| 3 | + build: |
| 4 | + context: ./docker |
| 5 | + dockerfile: chatmail_relay.dockerfile |
| 6 | + tags: |
| 7 | + - chatmail-relay:latest |
| 8 | + image: chatmail-relay:latest |
| 9 | + restart: unless-stopped |
| 10 | + container_name: chatmail |
| 11 | + depends_on: |
| 12 | + - traefik-certs-dumper |
| 13 | + cgroup: host # required for systemd |
| 14 | + tty: true # required for logs |
| 15 | + tmpfs: # required for systemd |
| 16 | + - /tmp |
| 17 | + - /run |
| 18 | + - /run/lock |
| 19 | + logging: |
| 20 | + driver: json-file |
| 21 | + options: |
| 22 | + max-size: "10m" |
| 23 | + max-file: "3" |
| 24 | + environment: #all possible variables you can check inside README and /chatmaild/src/chatmaild/ini/chatmail.ini.f |
| 25 | + MAIL_DOMAIN: $MAIL_DOMAIN |
| 26 | + # MAX_MESSAGE_SIZE: "50M" |
| 27 | + # DEBUG_COMMANDS_ENABLED: "true" |
| 28 | + # FORCE_REINIT_INI_FILE: "true" |
| 29 | + # RECREATE_VENV: "false" |
| 30 | + USE_FOREIGN_CERT_MANAGER: "true" |
| 31 | + CHANGE_KERNEL_SETTINGS: "false" |
| 32 | + PATH_TO_SSL: "${CERTS_ROOT_DIR_CONTAINER}/${MAIL_DOMAIN}" |
| 33 | + ENABLE_CERTS_MONITORING: "true" |
| 34 | + # CERTS_MONITORING_TIMEOUT: 60 |
| 35 | + # IS_DEVELOPMENT_INSTANCE: "true" |
| 36 | + ports: |
| 37 | + - "25:25" |
| 38 | + - "587:587" |
| 39 | + - "143:143" |
| 40 | + - "465:465" |
| 41 | + - "993:993" |
| 42 | + volumes: |
| 43 | + ## system |
| 44 | + - /sys/fs/cgroup:/sys/fs/cgroup:rw # required for systemd |
| 45 | + - ./:/opt/chatmail |
| 46 | + - ${CERTS_ROOT_DIR_HOST}:${CERTS_ROOT_DIR_CONTAINER}:ro |
| 47 | + |
| 48 | + ## data |
| 49 | + - ./data/chatmail:/home |
| 50 | + # - ./data/chatmail-dkimkeys:/etc/dkimkeys |
| 51 | + # - ./data/chatmail-echobot:/run/echobot |
| 52 | + # - ./data/chatmail-acme:/var/lib/acme |
| 53 | + |
| 54 | + ## custom resources |
| 55 | + # - ./custom/www/src/index.md:/opt/chatmail/www/src/index.md |
| 56 | + |
| 57 | + ## debug |
| 58 | + # - ./docker/files/setup_chatmail_docker.sh:/setup_chatmail_docker.sh |
| 59 | + # - ./docker/files/entrypoint.sh:/entrypoint.sh |
| 60 | + # - ./docker/files/update_ini.sh:/update_ini.sh |
| 61 | + |
| 62 | + labels: |
| 63 | + - traefik.enable=true |
| 64 | + - traefik.http.services.chatmail-relay.loadbalancer.server.scheme=https |
| 65 | + - traefik.http.services.chatmail-relay.loadbalancer.server.port=443 |
| 66 | + - traefik.http.services.chatmail-relay.loadbalancer.serverstransport=insecure@file |
| 67 | + - traefik.http.routers.chatmail-relay.rule=Host(`${MAIL_DOMAIN}`) || Host(`mta-sts.${MAIL_DOMAIN}`) || Host(`www.${MAIL_DOMAIN}`) |
| 68 | + - traefik.http.routers.chatmail-relay.service=chatmail-relay |
| 69 | + - traefik.http.routers.chatmail-relay.tls=true |
| 70 | + - traefik.http.routers.chatmail-relay.tls.certresolver=letsEncrypt |
| 71 | + |
| 72 | + traefik_init: |
| 73 | + image: alpine:latest |
| 74 | + restart: on-failure |
| 75 | + logging: |
| 76 | + driver: json-file |
| 77 | + options: |
| 78 | + max-size: "10m" |
| 79 | + max-file: "3" |
| 80 | + working_dir: /app |
| 81 | + entrypoint: sh -c ' |
| 82 | + touch acme.json && |
| 83 | + chown 0:0 ./acme.json && |
| 84 | + chmod 600 ./acme.json' |
| 85 | + volumes: |
| 86 | + - ./traefik/data:/app |
| 87 | + |
| 88 | + traefik: |
| 89 | + image: traefik:v3.3 |
| 90 | + container_name: traefik |
| 91 | + restart: unless-stopped |
| 92 | + logging: |
| 93 | + driver: json-file |
| 94 | + options: |
| 95 | + max-size: "10m" |
| 96 | + max-file: "3" |
| 97 | + command: |
| 98 | + - "--configFile=/config.yaml" |
| 99 | + - "--certificatesresolvers.letsEncrypt.acme.email=${ACME_EMAIL}" |
| 100 | + # ports: |
| 101 | + # - "80:80" |
| 102 | + # - "443:443" |
| 103 | + network_mode: host |
| 104 | + depends_on: |
| 105 | + traefik_init: |
| 106 | + condition: service_completed_successfully |
| 107 | + volumes: |
| 108 | + - /var/run/docker.sock:/var/run/docker.sock |
| 109 | + - ./traefik/config.yaml:/config.yaml |
| 110 | + - ./traefik/data/acme.json:/acme.json |
| 111 | + - ./traefik/dynamic-configs:/dynamic/conf |
| 112 | + |
| 113 | + traefik-certs-dumper: |
| 114 | + image: ldez/traefik-certs-dumper:v2.10.0 |
| 115 | + restart: unless-stopped |
| 116 | + logging: |
| 117 | + driver: json-file |
| 118 | + options: |
| 119 | + max-size: "10m" |
| 120 | + max-file: "3" |
| 121 | + depends_on: |
| 122 | + - traefik |
| 123 | + entrypoint: sh -c ' |
| 124 | + apk add openssl && |
| 125 | + while ! [ -e /data/acme.json ] |
| 126 | + || ! [ `jq ".[] | .Certificates | length" /data/acme.json | jq -s "add" ` != 0 ]; do |
| 127 | + sleep 1 |
| 128 | + ; done |
| 129 | + && traefik-certs-dumper file --version v3 --watch --domain-subdir=true |
| 130 | + --source /data/acme.json --dest /data/letsencrypt/certs --post-hook "sh /post-hook.sh"' |
| 131 | + environment: |
| 132 | + CERTS_DIR: /data/letsencrypt/certs |
| 133 | + volumes: |
| 134 | + - ./traefik/data/letsencrypt:/data/letsencrypt |
| 135 | + - ./traefik/data/acme.json:/data/acme.json |
| 136 | + - ./traefik/post-hook.sh:/post-hook.sh |
0 commit comments