version: "3.7"

#attention, docker-compose préfixe le nom du réseau créé par le nom du projet (contenu dans le .env, sinon c'est le nom du dossier)
networks:
  mail:

volumes:
  mail-mda-maildir:
    name: mail-mda-maildir
  mail-mta-log:
    name: mail-mta-log

services:
  mail-mda:
    image: registry.picasoft.net/pica-mail-mda:v1.0
    build: ./pica-mail-mda
    container_name: pica-mail-mda
    ports:
      - "143:143"
      - "993:993"
    networks:
      - mail
    hostname: pica-mail-mda
    volumes:
      - mail-mda-maildir:/home
      - /DATA/docker/mail/ssl/:/certs-ssl/:ro
    environment:
      LDAP_ADDRESS: ldap.picasoft.net
      LDAP_NSS_CN: cn=mail,ou=Services,dc=picasoft,dc=net
      LDAP_BASE: dc=picasoft,dc=net
      USER_FILTER: (uid=%n)
      PASSWORD_FILTER: (uid=%n)
    env_file: ./secrets/mail.secrets

  mail-mta:
    image: registry.picasoft.net/pica-mail-mta:v1.0
    build: ./pica-mail-mta
    container_name: pica-mail-mta
    ports:
      - "25:25"
      - "465:465"
      - "587:587"
    networks:
      - mail
    volumes:
      - mail-mta-log:/var/log
      #doit contenir selecteur.domaine.rsa
      - /DATA/docker/mail/opendkim/:/etc/dkimkeys/
      - /DATA/docker/mail/ssl/:/certs-ssl/
    env_file: ./secrets/mail.secrets
    environment:
    #adresse et port du serveur LMTP i.e. le MTA
      LMTP_LAN_HOSTNAME: pica-mail-mda.pica_mail
      LMTP_PORT: 24
      #nom d'hôte sous lequel Postfix répondra aux requêtes SMTP
      MY_HOSTNAME: mail.picasoft.net
      #domaine des mails
      MY_DOMAIN: picasoft.net
      #domaines mails qu'on s'autorise à relayer (qui ont le droit de passer à travers notre serveur si ils sont en expéditeur ou destinataire)
      RELAY_DOMAINS: picasoft.net
      #réglage de la connexion au serveur LDAP: protocole (ldap ou ldaps), hôte et port
      LDAP_PROTOCOL: ldap
      LDAP_SERVER_HOSTNAME: ldap.picasoft.net
      LDAP_PORT: 389
      #réglage du bind : login d'un compte qui a suffisamment de droits pour lire l'arborescence (à l'exception des mots de passe)
      LDAP_BIND_DN: cn=mail,ou=Services,dc=picasoft,dc=net
      #réglage de la manière dont on répertorie les comptes et les adresses existantes
      #la config actuelle fait que la possession d'une adresse mail se fait ainsi : login => login@picasoft.net
      #cependant, nous avons quand même deux couches différentes: l'existence d'un compte (SASL) et l'existence d'une adresse
      #ce qui fait qu'on peut créer une adresse valide sans nécessairement lui associer un compte valide
      #ainsi, on pourra recevoir des mails dans la boîte, mais on ne pourra pas se connecter en tant que cet utilisateur
      #pour ce faire, il suffit d'utiliser des attributs LDAP différents
      #nous utilisons donc le cn pour l'existence d'un compte LDAP, et l'uid pour l'existence d'une adresse
      #niveau de l'arborescence à partir duquel les entrées sont trouvées:
      LDAP_SEARCH_BASE: dc=picasoft,dc=net
      #filtre permettant de répertorier les comptes SASL
      LDAP_SASL_FILTER: "cn=%u"
      #filtre permettant de répertorier les adresses mail
      LDAP_VIRTUAL_MAILBOX_FILTER: "uid=%s"
      #ajout de listes noires pour éviter le SPAM. La décision politique et l'éthique associée sortent du cadre de la conception de cette image et doivent être discutées par l'asso; en tout cas, si on lève cette restriction, elle doit être remplacée par une autre (un spamassassin par exemple).
      SMTPD_CLIENT_RESTRICTIONS: reject_rbl_client sbl.spamhaus.org, reject_rbl_client dnsbl.sorbs.net
      #prefixe DKIM, utilise pour identifier la clef
      DKIM_SELECTOR: janv2019
    labels:
      - "traefik.frontend.rule=Host:mail.picasoft.net"
      - "traefik.port=80"
      - "traefik.enable=true"
      - "traefik.docker.network=pica_mail"
