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