version: '2.2'

services:

  redis:
    image: redis:alpine
    restart: always
    volumes:
      - "./redis:/data"
    depends_on:
      - resolver
    dns:
      - 172.25.25.254

  front:
    image: ${DOCKER_ORG:-ghcr.io/mailu}/${DOCKER_PREFIX:-}nginx:${MAILU_VERSION:-2.0}
    restart: always
    env_file: mailu.env
    logging:
      driver: journald
      options:
        tag: mailu-front
    ports:
      - "127.0.0.1:50001:80"
      - "127.0.0.1:50002:443"
      - "79.137.198.179:25:25"
      - "79.137.198.179:465:465"
      - "79.137.198.179:587:587"
      - "79.137.198.179:110:110"
      - "79.137.198.179:995:995"
      - "79.137.198.179:143:143"
      - "79.137.198.179:993:993"
    networks:
      - default
      - webmail
    volumes:
      - "/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/fruw.org:/certs"
      - "./overrides/nginx:/overrides:ro"
    depends_on:
      - resolver
    dns:
      - 172.25.25.254

  resolver:
    image: ${DOCKER_ORG:-ghcr.io/mailu}/${DOCKER_PREFIX:-}unbound:${MAILU_VERSION:-2.0}
    env_file: mailu.env
    restart: always
    networks:
      default:
        ipv4_address: 172.25.25.254

  admin:
    image: ${DOCKER_ORG:-ghcr.io/mailu}/${DOCKER_PREFIX:-}admin:${MAILU_VERSION:-2.0}
    restart: always
    env_file: mailu.env
    logging:
      driver: journald
      options:
        tag: mailu-admin
    volumes:
      - "./data:/data"
      - "./dkim:/dkim"
    depends_on:
      - redis
      - resolver
    dns:
      - 172.25.25.254

  imap:
    image: ${DOCKER_ORG:-ghcr.io/mailu}/${DOCKER_PREFIX:-}dovecot:${MAILU_VERSION:-2.0}
    restart: always
    env_file: mailu.env
    logging:
      driver: journald
      options:
        tag: mailu-imap
    volumes:
      - "./mail:/mail"
      - "./overrides/dovecot:/overrides:ro"
    depends_on:
      - front
      - resolver
    dns:
      - 172.25.25.254

  smtp:
    image: ${DOCKER_ORG:-ghcr.io/mailu}/${DOCKER_PREFIX:-}postfix:${MAILU_VERSION:-2.0}
    restart: always
    env_file: mailu.env
    logging:
      driver: journald
      options:
        tag: mailu-smtp
    volumes:
      - "./mailqueue:/queue"
      - "./overrides/postfix:/overrides:ro"
    depends_on:
      - front
      - resolver
    dns:
      - 172.25.25.254

  oletools:
    image: ${DOCKER_ORG:-ghcr.io/mailu}/${DOCKER_PREFIX:-}oletools:${MAILU_VERSION:-2.0}
    hostname: oletools
    restart: always
    networks:
      - noinet
    depends_on:
      - resolver
    dns:
      - 172.25.25.254

  antispam:
    image: ${DOCKER_ORG:-ghcr.io/mailu}/${DOCKER_PREFIX:-}rspamd:${MAILU_VERSION:-2.0}
    hostname: antispam
    restart: always
    env_file: mailu.env
    logging:
      driver: journald
      options:
        tag: mailu-antispam
    networks:
      - default
      - noinet
    volumes:
      - "./filter:/var/lib/rspamd"
      - "./overrides/rspamd:/overrides:ro"
    depends_on:
      - front
      - redis
      - oletools
      - resolver
    dns:
      - 172.25.25.254

  webmail:
    image: ${DOCKER_ORG:-ghcr.io/mailu}/${DOCKER_PREFIX:-}webmail:${MAILU_VERSION:-2.0}
    restart: always
    env_file: mailu.env
    volumes:
      - "./webmail:/data"
      - "./overrides/roundcube:/overrides:ro"
    networks:
      - webmail
    depends_on:
      - front

networks:
  default:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.25.25.0/24
  webmail:
    driver: bridge
  noinet:
    driver: bridge
    internal: true