ansible-role-docker_mailserver/templates/docker-compose.yml

80 lines
3.4 KiB
YAML

# {{ ansible_managed }}
services:
mailserver:
image: mailserver/docker-mailserver:{{ docker_mailserver_version }}
ports:
{% if docker_mailserver_listen_ipv4 is not defined and docker_mailserver_listen_ipv6 is not defined %}
- 25:25 # SMTP (explicit TLS => STARTTLS)
- 465:465 # ESMTP (implicit TLS)
- 587:587 # ESMTP (explicit TLS => STARTTLS)
- 993:993 # IMAP4 (implicit TLS)
- 4190:4190 # Sieve
{% endif %}
{% if docker_mailserver_listen_ipv4 is defined %}
- "{{ docker_mailserver_listen_ipv4 }}:25:25" # SMTP (explicit TLS => STARTTLS)
- "{{ docker_mailserver_listen_ipv4 }}:465:465" # ESMTP (implicit TLS)
- "{{ docker_mailserver_listen_ipv4 }}:587:587" # ESMTP (explicit TLS => STARTTLS)
- "{{ docker_mailserver_listen_ipv4 }}:993:993" # IMAP4 (implicit TLS)
- "{{ docker_mailserver_listen_ipv4 }}:4190:4190" # Sieve
{% if docker_mailserver_enable_pop3 %}
- "{{ docker_mailserver_listen_ipv4 }}:995:995" # POP3S (implicit TLS)
{% endif %}
{% endif %}
{% if docker_mailserver_listen_ipv6 is defined %}
- "[{{ docker_mailserver_listen_ipv6 }}]:25:25" # SMTP (explicit TLS => STARTTLS)
- "[{{ docker_mailserver_listen_ipv6 }}]:465:465" # ESMTP (implicit TLS)
- "[{{ docker_mailserver_listen_ipv6 }}]:587:587" # ESMTP (explicit TLS => STARTTLS)
- "[{{ docker_mailserver_listen_ipv6 }}]:993:993" # IMAP4 (implicit TLS)
- "[{{ docker_mailserver_listen_ipv6 }}]:4190:4190" # Sieve
{% if docker_mailserver_enable_pop3 %}
- "[{{ docker_mailserver_listen_ipv6 }}]:995:995" # POP3S (implicit TLS)
{% endif %}
{% endif %}
volumes:
- {{ docker_mailserver_data_dir }}/{{ docker_mailserver_service_id }}/maildata:/var/mail
- {{ docker_mailserver_data_dir }}/{{ docker_mailserver_service_id }}/mailstate:/var/mail-state
- {{ docker_mailserver_data_dir }}/{{ docker_mailserver_service_id }}/maillogs:/var/log/mail
- ./config/:/tmp/docker-mailserver/
- ./policyd-spf.conf:/etc/postfix-policyd-spf-python/policyd-spf.conf
- ./jail.local:/etc/fail2ban/jail.local
- ./ssl/:/tmp/ssl:ro
- ./11-mail-custom.conf:/etc/dovecot/conf.d/11-mail-custom.conf
{% if docker_mailserver_configure_oauth is true %}
- ./dovecot-oauth2.conf.ext.secrets:/etc/dovecot/dovecot-oauth2.conf.ext
{% endif %}
- /etc/localtime:/etc/localtime:ro
env_file:
- mailserver.vars
cap_add:
- NET_ADMIN
- SYS_PTRACE
restart: always
networks:
- default
{% if docker_mailserver_certbot_enabled %}
certificate:
image: nginx
environment:
- NGINX_HOST={{ docker_mailserver_fqdn }}
- NGINX_PORT=80
labels:
traefik.enable: true
traefik.docker.network: traefik
traefik.http.routers.certificate_{{ docker_mailserver_service_id }}.entrypoints: websecure
traefik.http.routers.certificate_{{ docker_mailserver_service_id }}.tls: true
traefik.http.routers.certificate_{{ docker_mailserver_service_id }}.tls.certresolver: letsencrypt
traefik.http.routers.certificate_{{ docker_mailserver_service_id }}.rule: "Host(`{{ docker_mailserver_fqdn }}`)"
traefik.http.services.certificate_{{ docker_mailserver_service_id }}.loadbalancer.server.port: 80
restart: always
networks:
- traefik
{% endif %}
networks:
default:
internal: false
{% if docker_mailserver_certbot_enabled %}
traefik:
external: true
{% endif %}