338 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			338 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
version: '2.1'
 | 
						|
services:
 | 
						|
 | 
						|
    unbound-mailcow:
 | 
						|
      image: mailcow/unbound
 | 
						|
      build: ./data/Dockerfiles/unbound
 | 
						|
      command: /usr/sbin/unbound
 | 
						|
      depends_on:
 | 
						|
        mysql-mailcow:
 | 
						|
          condition: service_healthy
 | 
						|
      healthcheck:
 | 
						|
        test: ["CMD", "nslookup", "mailcow.email", "127.0.0.1"]
 | 
						|
        interval: 3s
 | 
						|
        timeout: 3s
 | 
						|
        retries: 5
 | 
						|
      volumes:
 | 
						|
        - ./data/conf/unbound/unbound.conf:/etc/unbound/unbound.conf:ro
 | 
						|
      restart: always
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          ipv4_address: 172.22.1.254
 | 
						|
          aliases:
 | 
						|
            - unbound
 | 
						|
 | 
						|
    mysql-mailcow:
 | 
						|
      image: mariadb:10.1
 | 
						|
      command: mysqld --max_allowed_packet=128M
 | 
						|
      healthcheck:
 | 
						|
        test: ["CMD", "mysqladmin", "ping", "--host", "localhost", "--silent"]
 | 
						|
        interval: 10s
 | 
						|
        timeout: 30s
 | 
						|
        retries: 5
 | 
						|
      volumes:
 | 
						|
        - mysql-vol-1:/var/lib/mysql/
 | 
						|
        - ./data/conf/mysql/:/etc/mysql/conf.d/:ro
 | 
						|
      environment:
 | 
						|
        - MYSQL_ROOT_PASSWORD=${DBROOT}
 | 
						|
        - MYSQL_DATABASE=${DBNAME}
 | 
						|
        - MYSQL_USER=${DBUSER}
 | 
						|
        - MYSQL_PASSWORD=${DBPASS}
 | 
						|
      restart: always
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          aliases:
 | 
						|
            - mysql
 | 
						|
 | 
						|
    redis-mailcow:
 | 
						|
      image: redis:alpine
 | 
						|
      depends_on:
 | 
						|
        unbound-mailcow:
 | 
						|
          condition: service_healthy
 | 
						|
      volumes:
 | 
						|
        - redis-vol-1:/data/
 | 
						|
      restart: always
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          aliases:
 | 
						|
            - redis
 | 
						|
 | 
						|
    clamd-mailcow:
 | 
						|
      image: mailcow/clamd
 | 
						|
      build: ./data/Dockerfiles/clamav
 | 
						|
      restart: always
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          aliases:
 | 
						|
            - clamd
 | 
						|
 | 
						|
    rspamd-mailcow:
 | 
						|
      image: mailcow/rspamd
 | 
						|
      build: ./data/Dockerfiles/rspamd
 | 
						|
      command: > 
 | 
						|
        /bin/bash -c "
 | 
						|
        sleep 5;
 | 
						|
        /usr/bin/rspamd -f -u _rspamd -g _rspamd
 | 
						|
        "
 | 
						|
      depends_on:
 | 
						|
        - nginx-mailcow
 | 
						|
      volumes:
 | 
						|
        - ./data/conf/rspamd/override.d/:/etc/rspamd/override.d:ro
 | 
						|
        - ./data/conf/rspamd/local.d/:/etc/rspamd/local.d:ro
 | 
						|
        - ./data/conf/rspamd/lua/:/etc/rspamd/lua/:ro
 | 
						|
        - dkim-vol-1:/data/dkim
 | 
						|
        - rspamd-vol-1:/var/lib/rspamd
 | 
						|
      restart: always
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      hostname: rspamd
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          ipv4_address: 172.22.1.253
 | 
						|
          aliases:
 | 
						|
            - rspamd
 | 
						|
 | 
						|
    php-fpm-mailcow:
 | 
						|
      image: mailcow/phpfpm
 | 
						|
      build: ./data/Dockerfiles/php-fpm
 | 
						|
      command: "php-fpm -d date.timezone=${TZ}"
 | 
						|
      depends_on:
 | 
						|
        - redis-mailcow
 | 
						|
      volumes:
 | 
						|
        - ./data/web:/web:ro
 | 
						|
        - ./data/conf/rspamd/dynmaps:/dynmaps:ro
 | 
						|
        - dkim-vol-1:/data/dkim
 | 
						|
      environment:
 | 
						|
        - DBNAME=${DBNAME}
 | 
						|
        - DBUSER=${DBUSER}
 | 
						|
        - DBPASS=${DBPASS}
 | 
						|
        - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
 | 
						|
      restart: always
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          aliases:
 | 
						|
            - phpfpm
 | 
						|
 | 
						|
    sogo-mailcow:
 | 
						|
      image: mailcow/sogo
 | 
						|
      build: ./data/Dockerfiles/sogo
 | 
						|
      depends_on:
 | 
						|
        unbound-mailcow:
 | 
						|
          condition: service_healthy
 | 
						|
      environment:
 | 
						|
        - DBNAME=${DBNAME}
 | 
						|
        - DBUSER=${DBUSER}
 | 
						|
        - DBPASS=${DBPASS}
 | 
						|
        - TZ=${TZ}
 | 
						|
        - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
 | 
						|
      volumes:
 | 
						|
        - ./data/conf/sogo/:/etc/sogo/
 | 
						|
        - ./data/web/thunderbird-plugins:/thunderbird
 | 
						|
      restart: always
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          ipv4_address: 172.22.1.252
 | 
						|
          aliases:
 | 
						|
            - sogo
 | 
						|
 | 
						|
    dovecot-mailcow:
 | 
						|
      image: mailcow/dovecot
 | 
						|
      build: ./data/Dockerfiles/dovecot
 | 
						|
      depends_on:
 | 
						|
        unbound-mailcow:
 | 
						|
          condition: service_healthy
 | 
						|
      volumes:
 | 
						|
        - ./data/conf/dovecot:/usr/local/etc/dovecot
 | 
						|
        - ./data/assets/ssl:/etc/ssl/mail/:ro
 | 
						|
        - ./data/conf/sogo/:/etc/sogo/
 | 
						|
        - vmail-vol-1:/var/vmail
 | 
						|
        - crypt-vol-1:/mail_crypt/
 | 
						|
      environment:
 | 
						|
        - DBNAME=${DBNAME}
 | 
						|
        - DBUSER=${DBUSER}
 | 
						|
        - DBPASS=${DBPASS}
 | 
						|
      ports:
 | 
						|
        - "${IMAP_PORT:-143}:143"
 | 
						|
        - "${IMAPS_PORT:-993}:993"
 | 
						|
        - "${POP_PORT:-110}:110"
 | 
						|
        - "${POPS_PORT:-995}:995"
 | 
						|
        - "${SIEVE_PORT:-4190}:4190"
 | 
						|
      restart: always
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      hostname: ${MAILCOW_HOSTNAME}
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          aliases:
 | 
						|
            - dovecot
 | 
						|
 | 
						|
    postfix-mailcow:
 | 
						|
      image: mailcow/postfix
 | 
						|
      build: ./data/Dockerfiles/postfix
 | 
						|
      depends_on:
 | 
						|
        unbound-mailcow:
 | 
						|
          condition: service_healthy
 | 
						|
      volumes:
 | 
						|
        - ./data/conf/postfix:/opt/postfix/conf
 | 
						|
        - ./data/assets/ssl:/etc/ssl/mail/:ro
 | 
						|
        - postfix-vol-1:/var/spool/postfix
 | 
						|
        - crypt-vol-1:/var/lib/zeyple
 | 
						|
      environment:
 | 
						|
        - DBNAME=${DBNAME}
 | 
						|
        - DBUSER=${DBUSER}
 | 
						|
        - DBPASS=${DBPASS}
 | 
						|
      ports:
 | 
						|
        - "${SMTP_PORT:-25}:25"
 | 
						|
        - "${SMTPS_PORT:-465}:465"
 | 
						|
        - "${SUBMISSION_PORT:-587}:587"
 | 
						|
      restart: always
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      hostname: ${MAILCOW_HOSTNAME}
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          aliases:
 | 
						|
            - postfix
 | 
						|
 | 
						|
    memcached-mailcow:
 | 
						|
      image: memcached:alpine
 | 
						|
      depends_on:
 | 
						|
        unbound-mailcow:
 | 
						|
          condition: service_healthy
 | 
						|
      restart: always
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          aliases:
 | 
						|
            - memcached
 | 
						|
 | 
						|
    nginx-mailcow:
 | 
						|
      depends_on:
 | 
						|
        - sogo-mailcow
 | 
						|
        - php-fpm-mailcow
 | 
						|
      image: nginx:mainline-alpine
 | 
						|
      healthcheck:
 | 
						|
        test: ["CMD", "ping", "php-fpm-mailcow", "-c", "10"]
 | 
						|
        interval: 10s
 | 
						|
        timeout: 30s
 | 
						|
        retries: 5
 | 
						|
      command: /bin/sh -c "envsubst < /etc/nginx/conf.d/templates/listen_plain.template > /etc/nginx/conf.d/listen_plain.active &&
 | 
						|
        envsubst < /etc/nginx/conf.d/templates/listen_ssl.template > /etc/nginx/conf.d/listen_ssl.active &&
 | 
						|
        envsubst < /etc/nginx/conf.d/templates/server_name.template > /etc/nginx/conf.d/server_name.active &&
 | 
						|
        nginx -g 'daemon off;'"
 | 
						|
      environment:
 | 
						|
        - HTTPS_PORT=${HTTPS_PORT:-443}
 | 
						|
        - HTTP_PORT=${HTTP_PORT:-80}
 | 
						|
        - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
 | 
						|
      volumes:
 | 
						|
        - ./data/web:/web:ro
 | 
						|
        - ./data/conf/rspamd/dynmaps:/dynmaps:ro
 | 
						|
        - ./data/assets/ssl/:/etc/ssl/mail/:ro
 | 
						|
        - ./data/conf/nginx/:/etc/nginx/conf.d/:rw
 | 
						|
      ports:
 | 
						|
        - "${HTTPS_BIND:-0.0.0.0}:${HTTPS_PORT:-443}:${HTTPS_PORT:-443}"
 | 
						|
        - "${HTTP_BIND:-127.0.0.1}:${HTTP_PORT:-80}:${HTTP_PORT:-80}"
 | 
						|
      restart: always
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          ipv4_address: 172.22.1.251
 | 
						|
          aliases:
 | 
						|
            - nginx
 | 
						|
 | 
						|
    acme-mailcow:
 | 
						|
      depends_on:
 | 
						|
        - nginx-mailcow
 | 
						|
      image: mailcow/acme
 | 
						|
      build: ./data/Dockerfiles/acme
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      # All domains to be included in the certificate
 | 
						|
      environment:
 | 
						|
        - CONTAINERS_RESTART=mailcowdockerized_postfix-mailcow_1 mailcowdockerized_dovecot-mailcow_1 mailcowdockerized_nginx-mailcow_1
 | 
						|
        # Additional subject alternate names
 | 
						|
        - ADDITIONAL_SAN=${ADDITIONAL_SAN}
 | 
						|
        - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
 | 
						|
        - DBNAME=${DBNAME}
 | 
						|
        - DBUSER=${DBUSER}
 | 
						|
        - DBPASS=${DBPASS}
 | 
						|
      volumes:
 | 
						|
        - ./data/web/.well-known/acme-challenge:/var/www/acme:rw
 | 
						|
        - ./data/assets/ssl:/var/lib/acme/:rw
 | 
						|
        - /var/run/docker.sock:/var/run/docker.sock:ro
 | 
						|
      # do not restart the container too often. Things get worse when we hit let's encrypt's ratelimit.
 | 
						|
      restart: on-failure:1
 | 
						|
      networks:
 | 
						|
        mailcow-network:
 | 
						|
          aliases:
 | 
						|
            - acme
 | 
						|
 | 
						|
    fail2ban-mailcow:
 | 
						|
      image: mailcow/fail2ban
 | 
						|
      build: ./data/Dockerfiles/fail2ban
 | 
						|
      depends_on:
 | 
						|
        - dovecot-mailcow
 | 
						|
        - postfix-mailcow
 | 
						|
        - sogo-mailcow
 | 
						|
        - php-fpm-mailcow
 | 
						|
      restart: always
 | 
						|
      dns:
 | 
						|
        - 172.22.1.254
 | 
						|
      dns_search: mailcow-network
 | 
						|
      privileged: true
 | 
						|
      network_mode: "host"
 | 
						|
      volumes:
 | 
						|
        - /var/run/docker.sock:/var/run/docker.sock:ro
 | 
						|
        - /lib/modules:/lib/modules:ro
 | 
						|
 | 
						|
    ipv6nat:
 | 
						|
      image: robbertkl/ipv6nat
 | 
						|
      restart: always
 | 
						|
      privileged: true
 | 
						|
      network_mode: "host"
 | 
						|
      volumes:
 | 
						|
        - /var/run/docker.sock:/var/run/docker.sock:ro
 | 
						|
        - /lib/modules:/lib/modules:ro
 | 
						|
 | 
						|
networks:
 | 
						|
  mailcow-network:
 | 
						|
    driver: bridge
 | 
						|
    enable_ipv6: true
 | 
						|
    ipam:
 | 
						|
      driver: default
 | 
						|
      config:
 | 
						|
        - subnet: 172.22.1.0/24
 | 
						|
        - subnet: fd4d:6169:6c63:6f77::/64
 | 
						|
 | 
						|
volumes:
 | 
						|
  vmail-vol-1:
 | 
						|
  mysql-vol-1:
 | 
						|
  dkim-vol-1:
 | 
						|
  redis-vol-1:
 | 
						|
  rspamd-vol-1:
 | 
						|
  postfix-vol-1:
 | 
						|
  crypt-vol-1:
 |