Skip to content

Docker 메일 서버 구축

  • Docker를 사용한 기본적인 메일 서버 환경 구축
    • SMTP/IMAP3 - Docker Mailserver 프로젝트 사용
    • Web GUI - Roundcube 프로젝트 사용

Prerequirements

  • DNS 서버 설정
    • test.example.com.
      • A 10.1.0.10
      • MX 10 mail.test.example.com
    • mail.test.example.com.
      • A 10.1.0.10
  • 서버 시스템 설정
    • Rocky Linux/EPEL
      • dnf install docker docker-compose -y
    • Arch linux
      • pacman -Sy docker docker-compose
    • Debian
      • apt install docker docker-compose -y

Docker Mailserver

Roundcube

통합 설정

  • Docker Mailserver의 compose와 Roundcube의 compose를 합쳐 하나의 Docker Compose로 실행 가능

    services:
    # Roundcube
      roundcubemail:
        image: roundcube/roundcubemail:latest
        container_name: roundcubemail
    #    restart: unless-stopped
        volumes:
          - ./www:/var/www/html
          - ./db/sqlite:/var/roundcube/db
        ports:
          - 9002:80
        environment:
          - ROUNDCUBEMAIL_DB_TYPE=sqlite
          - ROUNDCUBEMAIL_SKIN=elastic
          - ROUNDCUBEMAIL_DEFAULT_HOST=tls://mail.test.example.com
          - ROUNDCUBEMAIL_SMTP_SERVER=tls://mail.test.example.com
    
    # Docker Mailserver
      mailserver:
        image: ghcr.io/docker-mailserver/docker-mailserver:latest
        container_name: mailserver
        # Provide the FQDN of your mail server here (Your DNS MX record should point to this value)
        hostname: mail.test.example.com
        ports:
          - "25:25"    # SMTP  (explicit TLS => STARTTLS, Authentication is DISABLED => use port 465/587 instead)
          - "143:143"  # IMAP4 (explicit TLS => STARTTLS)
          - "465:465"  # ESMTP (implicit TLS)
          - "587:587"  # ESMTP (explicit TLS => STARTTLS)
          - "993:993"  # IMAP4 (implicit TLS)
        volumes:
          - ./docker-data/dms/mail-data/:/var/mail/
          - ./docker-data/dms/mail-state/:/var/mail-state/
          - ./docker-data/dms/mail-logs/:/var/log/mail/
          - ./docker-data/dms/config/:/tmp/docker-mailserver/
          - /etc/localtime:/etc/localtime:ro
        restart: always
        stop_grace_period: 1m
        # Uncomment if using `ENABLE_FAIL2BAN=1`:
        # cap_add:
        #   - NET_ADMIN
        healthcheck:
          test: "ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1"
          timeout: 3s
          retries: 0
    
  • Compose

    $ docker compose up --detach
    

    complete_docker_compose

  • 이후 설정은 개별 설정과 동일

Test

  • 로그인 example_login

  • 메인 화면 example_main

  • 메일 전송 example_send

  • 메일 수신 (example) example_inbox

  • 메일 수신 (cju) cju_inbox