docker-compose部署BillionMail

克隆地址

git clone https://github.com/aaPanel/BillionMail

官方推荐docker-compose部署方式

cd /opt && git clone https://github.com/aaPanel/BillionMail && cd BillionMail && cp env_init .env && mkdir ssl && cp -d -n ssl-self-signed/* ssl/ && docker compose up -d || docker-compose up -d

访问地址:

ip:80/roundcube
登录帐号密码:billionmail/billionmail

 

修改docker-compose.yml文件

name: billionmail

services:
    # 移除内置PostgreSQL服务(使用外部MySQL)
    # 移除内置Redis服务(使用外部Redis)

    rspamd-billionmail:
      image: billionmail/rspamd:1.2
      hostname: rspamd
      # 移除对内置Redis的依赖,改为连接外部Redis
      environment:
        - TZ=${TZ}
        - REDISPASS=123456  # 外部Redis密码
        - REDIS_HOST=192.168.0.2  # 外部Redis地址
        - REDIS_PORT=6379  # 外部Redis端口
        - RETENTION_DAYS=${RETENTION_DAYS:-7}
      volumes:
        - ./conf/rspamd/local.d:/etc/rspamd/local.d
        - ./conf/rspamd/statistic.conf:/etc/rspamd/statistic.conf
        - ./conf/rspamd/rspamd.conf:/etc/rspamd/rspamd.conf 
        - ./rspamd-data:/var/lib/rspamd
        - ./logs/rspamd:/var/log/rspamd
      restart: always
      networks:
        billionmail-network:
          aliases:
            - rspamd

    dovecot-billionmail:
      image: billionmail/dovecot:1.5
      hostname: dovecot
      # 移除对内置PostgreSQL和Redis的依赖,改为连接外部服务
      cap_add:
        - NET_BIND_SERVICE
      volumes:
        - ./conf/dovecot/conf.d:/etc/dovecot/conf.d
        - ./conf/dovecot/dovecot.conf:/etc/dovecot/dovecot.conf
        - ./conf/dovecot/rsyslog.conf:/etc/rsyslog.conf
        - ./logs/dovecot:/var/log/mail
        - ./ssl:/etc/ssl/mail
        - ./ssl-self-signed:/etc/ssl/ssl-self-signed
        - ./vmail-data:/var/vmail
        - ./rspamd-data:/var/lib/rspamd
        # 移除PostgreSQL socket挂载(使用外部MySQL无需本地socket)
      environment:
        - DBNAME=${DBNAME}  # 数据库名(需在外部MySQL提前创建)
        - DBUSER=root  # 外部MySQL用户名
        - DBPASS=root  # 外部MySQL密码
        - DB_HOST=192.168.0.2  # 外部MySQL地址
        - DB_PORT=3306  # 外部MySQL端口
        - TZ=${TZ}
        - BILLIONMAIL_HOSTNAME=${BILLIONMAIL_HOSTNAME}
        - REDISPASS=123456  # 外部Redis密码
        - REDIS_HOST=192.168.0.2  # 外部Redis地址
        - REDIS_PORT=6379  # 外部Redis端口
        - RETENTION_DAYS=${RETENTION_DAYS:-7}
      ports:
        - "${IMAP_PORT:-143}:143"
        - "${IMAPS_PORT:-993}:993"
        - "${POP_PORT:-110}:110"
        - "${POPS_PORT:-995}:995"
      restart: always
      ulimits:
        nproc: 65535
        nofile:
          soft: 20000
          hard: 40000
      networks:
        billionmail-network:
          aliases:
            - dovecot

    postfix-billionmail:
      image: billionmail/postfix:1.6
      hostname: postfix
      # 移除对内置PostgreSQL的依赖,改为连接外部MySQL
      volumes:
        - ./conf/postfix/main.cf:/etc/postfix/main.cf
        - ./conf/postfix/master.cf:/etc/postfix/master.cf
        - ./conf/postfix/conf:/etc/postfix/conf
        - ./conf/postfix/sql:/etc/postfix/sql
        - ./conf/postfix/rsyslog.conf:/etc/rsyslog.conf
        - ./logs/postfix:/var/log/mail
        - ./ssl:/etc/ssl/mail
        - ./postfix-data:/var/spool/postfix
        - ./rspamd-data:/var/lib/rspamd
        # 移除PostgreSQL socket挂载
      environment:
        - TZ=${TZ}
        - DBNAME=${DBNAME}  # 外部MySQL数据库名
        - DBUSER=root  # 外部MySQL用户名
        - DBPASS=root  # 外部MySQL密码
        - DB_HOST=192.168.0.2  # 外部MySQL地址
        - DB_PORT=3306  # 外部MySQL端口
        - REDISPASS=123456  # 外部Redis密码
        - REDIS_HOST=192.168.0.2  # 外部Redis地址
        - REDIS_PORT=6379  # 外部Redis端口
        - BILLIONMAIL_HOSTNAME=${BILLIONMAIL_HOSTNAME}
        - RETENTION_DAYS=${RETENTION_DAYS:-7}
      cap_add:
        - NET_BIND_SERVICE
      ports:
        - "${SMTP_PORT:-25}:25"
        - "${SMTPS_PORT:-465}:465"
        - "${SUBMISSION_PORT:-587}:587"
      restart: always
      networks:
        billionmail-network:
          aliases:
            - postfix


    webmail-billionmail:
      image: roundcube/roundcubemail:1.6.10-fpm-alpine
      hostname: roundcube
      # 移除对内置PostgreSQL的依赖,改为连接外部MySQL
      volumes:
        - ./webmail-data:/var/www/html
        - ./conf/webmail/mime.types:/var/roundcube/config/mime.types
        - ./conf/webmail:/var/roundcube/config
        - ./conf/php:/usr/local/etc
        - ./php-sock/:/var/run/
      environment:
        - TZ=${TZ}
        # 数据库类型从pgsql改为mysql
        - ROUNDCUBEMAIL_DB_TYPE=mysql
        - ROUNDCUBEMAIL_DB_HOST=192.168.0.2  # 外部MySQL地址
        - ROUNDCUBEMAIL_DB_PORT=3306  # 外部MySQL端口
        - ROUNDCUBEMAIL_DB_NAME=${DBNAME}  # 外部MySQL数据库名
        - ROUNDCUBEMAIL_DB_USER=root  # 外部MySQL用户名
        - ROUNDCUBEMAIL_DB_PASSWORD=root  # 外部MySQL密码
        - ROUNDCUBEMAIL_DEFAULT_HOST=dovecot
        - ROUNDCUBEMAIL_DEFAULT_PORT=${IMAP_PORT:-143}
        - ROUNDCUBEMAIL_SMTP_SERVER=postfix
        - ROUNDCUBEMAIL_SMTP_PORT=${SMTP_PORT:-25}
        - ROUNDCUBEMAIL_REQUEST_PATH=/roundcube
      restart: always
      networks:
        billionmail-network:
          aliases:
            - webmail

    core-billionmail:
      image: billionmail/core:4.4.2
      hostname: core-manage
      # 移除对内置PostgreSQL的依赖,改为连接外部MySQL
      volumes:
        - ./ssl:/etc/ssl/mail
        - ./ssl-self-signed:/etc/ssl/ssl-self-signed
        - ./conf/core/fail2ban/filter.d:/etc/fail2ban/filter.d
        - ./conf/core/fail2ban/jail.d:/etc/fail2ban/jail.d
        - ./logs/fail2ban:/var/log/fail2ban
        # 移除PostgreSQL socket挂载
        - ./php-sock:/opt/billionmail/php-sock
        - ./rspamd-data:/opt/billionmail/rspamd-data
        - ./webmail-data:/opt/billionmail/webmail-data
        - ./.env:/opt/billionmail/.env
        - ./conf:/opt/billionmail/conf
        - ./logs:/opt/billionmail/logs
        - ./logs/core:/opt/billionmail/core/logs
        - ./core-data:/opt/billionmail/core/data
        - /var/run/docker.sock:/var/run/docker.sock:ro
      environment:
        - TZ=${TZ}
        - FAIL2BAN_INIT=${FAIL2BAN_INIT:-y}
        # 外部MySQL配置
        - DB_HOST=192.168.0.2
        - DB_PORT=3306
        - DB_USER=root
        - DB_PASSWORD=root
        - DB_NAME=${DBNAME}
        # 外部Redis配置
        - REDIS_HOST=192.168.0.2
        - REDIS_PORT=6379
        - REDIS_PASSWORD=123456
      cap_add:
        - NET_BIND_SERVICE
        - NET_ADMIN
        - NET_RAW
      ports:
        - "${HTTP_PORT:-80}:${HTTP_PORT:-80}"
        - "${HTTPS_PORT:-443}:${HTTPS_PORT:-443}"
      restart: always
      networks:
        billionmail-network:
          aliases:
            - core

networks:
  billionmail-network:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: br-billionmail
    ipam:
      driver: default
      config:
        - subnet: ${IPV4_NETWORK:-172.66.1}.0/24

启动即可

docker compose up -d

# 如果拉不到镜像可以配置一下
sudo tee /etc/docker/daemon.json <<-'EOF'
{
 "registry-mirrors": [
  "https://docker.m.daocloud.io",
  "https://docker.imgdb.de",
  "https://docker-0.unsee.tech",
  "https://docker.hlmirror.com",
  "https://docker.1ms.run",
  "https://func.ink",
  "https://lispy.org",
  "https://docker.xiaogenban1993.com"
 ]
}
EOF

systemctl daemon-reload
systemctl restart docker

初始配置

初始配置
安装完成后,通过浏览器访问服务器IP或域名进入管理界面,需完成以下配置:
1. 基础设置
  1.设置系统名称、时区、默认语言(支持简体中文)
  2.配置管理员邮箱和密码
2. 域名验证
  1.添加发信域名(如mail.yourdomain.com)
  2.根据向导配置SPF、DKIM、DMARC记录
  3.验证DNS记录生效(通常需要10-30分钟) 3.SMTP设置   1.配置发信服务器参数   2.测试SMTP连接   3.启用SSL/TLS加密 4.存储配置   1.设置邮件存储路径   2.配置自动备份策略

 

posted @ 2025-09-19 09:32  白玉神驹  阅读(89)  评论(2)    收藏  举报