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.配置自动备份策略