Billion Mail Docker部署教程:容器化环境下的快速搭建
为什么选择Docker部署Billion Mail?
你是否还在为邮件营销平台繁琐的环境配置而烦恼?服务器依赖冲突、版本不兼容、部署步骤复杂等问题是否让你望而却步?Billion Mail作为一款开源邮件营销平台,通过Docker容器化部署方案,可帮你在15分钟内完成从环境准备到系统可用的全流程搭建。本文将详细介绍如何利用Docker Compose实现Billion Mail的快速部署,即使是Docker新手也能轻松上手。
读完本文后,你将能够:
- 理解Billion Mail的容器化架构设计
- 完成Docker环境的自动化部署
- 配置并启动完整的Billion Mail服务集群
- 验证系统部署状态并进行基础运维
- 解决常见的部署问题
架构概览:Billion Mail容器化设计
Billion Mail采用微服务架构设计,通过Docker容器实现各组件的解耦与隔离。整个系统由7个核心服务组成,通过Docker Compose实现服务编排与网络通信。
flowchart TD
subgraph "Billion Mail服务集群"
direction LR
Client[用户/应用] -->|HTTP/HTTPS| Core[核心服务\ncore-billionmail]
Core -->|API调用| Webmail[Webmail服务\nwebmail-billionmail]
Core -->|数据存储| Pgsql[(PostgreSQL\npgsql-billionmail)]
Core -->|缓存/队列| Redis[(Redis\nredis-billionmail)]
Core -->|安全防护| Fail2ban[Fail2ban]
subgraph "邮件处理服务"
Postfix[SMTP服务\npostfix-billionmail]
Dovecot[IMAP/POP3服务\ndovecot-billionmail]
Rspamd[反垃圾邮件\nrspamd-billionmail]
end
Client -->|SMTP/IMAP| Postfix
Client -->|IMAP/POP3| Dovecot
Postfix -->|垃圾邮件检测| Rspamd
Dovecot -->|用户认证| Pgsql
Postfix -->|邮件存储| Dovecot
end
subgraph "持久化存储"
Pgsql --> PgData[(PostgreSQL数据卷)]
Redis --> RedisData[(Redis数据卷)]
Dovecot --> MailData[(邮件存储卷)]
Core --> Logs[(日志数据卷)]
end
核心服务组件说明:
| 服务名称 | 容器名称 | 主要功能 | 基础镜像 | 数据持久化 |
|---|---|---|---|---|
| 核心服务 | core-billionmail | 系统管理、API接口、Web控制台 | billionmail/core:4.4.2 | core-data卷、日志卷 |
| PostgreSQL | pgsql-billionmail | 核心数据存储 | postgres:17.4-alpine | postgresql-data卷 |
| Redis | redis-billionmail | 缓存、会话存储、任务队列 | redis:7.4.2-alpine | redis-data卷 |
| Postfix | postfix-billionmail | SMTP协议处理、邮件发送 | billionmail/postfix:1.6 | postfix-data卷、日志卷 |
| Dovecot | dovecot-billionmail | IMAP/POP3协议处理、邮件接收 | billionmail/dovecot:1.5 | vmail-data卷、日志卷 |
| Rspamd | rspamd-billionmail | 反垃圾邮件过滤 | billionmail/rspamd:1.2 | rspamd-data卷、日志卷 |
| Webmail | webmail-billionmail | Web邮件客户端 | roundcube/roundcubemail:1.6.10-fpm-alpine | webmail-data卷 |
所有服务通过billionmail-network桥接网络实现内部通信,同时通过端口映射对外提供服务。这种架构设计确保了各组件的独立性和可扩展性,便于后续维护和升级。
环境准备:系统要求与依赖检查
硬件要求
Billion Mail对服务器资源有一定要求,为确保系统稳定运行,建议满足以下配置:
| 资源类型 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2核 | 4核及以上 |
| 内存 | 4GB | 8GB及以上 |
| 磁盘空间 | 40GB SSD | 100GB SSD及以上 |
| 网络 | 100Mbps | 1Gbps |
软件要求
- 操作系统:64位Linux系统(支持x86_64和aarch64架构)
- Docker:20.10.0+
- Docker Compose:2.0.0+
- Git:2.0+(用于获取源码)
端口占用检查
Billion Mail需要使用以下端口,部署前请确保这些端口未被其他服务占用:
| 端口 | 服务 | 协议 | 用途 | 备注 |
|---|---|---|---|---|
| 80 | Core服务 | TCP | HTTP访问 | 可通过环境变量修改 |
| 443 | Core服务 | TCP | HTTPS访问 | 可通过环境变量修改 |
| 25 | Postfix | TCP | SMTP服务 | 标准邮件发送端口 |
| 465 | Postfix | TCP | SMTPS服务 | SSL加密的SMTP |
| 587 | Postfix | TCP | SUBMISSION | 邮件提交端口 |
| 143 | Dovecot | TCP | IMAP服务 | 标准邮件接收端口 |
| 993 | Dovecot | TCP | IMAPS服务 | SSL加密的IMAP |
| 110 | Dovecot | TCP | POP3服务 | 邮局协议版本3 |
| 995 | Dovecot | TCP | POP3S服务 | SSL加密的POP3 |
使用以下命令检查端口占用情况:
# 检查邮件相关端口占用
ss -ltnp | grep -E ":25|465|587|110|143|993|995"
# 检查Web服务端口占用
ss -ltnp | grep -E ":80|443"
部署步骤:从环境准备到服务启动
步骤1:环境依赖自动化部署
Billion Mail提供了自动化安装脚本,可一键完成Docker环境的部署。该脚本支持主流Linux发行版(Ubuntu、Debian、CentOS、RHEL等),会自动检测系统架构并安装适配的Docker版本。
# 获取项目源码
git clone https://gitcode.com/gh_mirrors/bi/Billion-Mail.git
cd Billion-Mail
# 运行安装脚本(需要root权限)
sudo bash install.sh --domain yourdomain.com --TZ Asia/Shanghai
脚本参数说明:
--domain:指定邮件服务器域名(必填)--TZ:指定时区(如Asia/Shanghai,默认UTC)
安装过程说明:
- 系统兼容性检查(架构、操作系统版本)
- Docker与Docker Compose自动安装
- 生成随机配置(管理员账号、数据库密码等)
- 环境变量文件生成
- 防火墙规则配置
注意:安装脚本会自动处理大部分依赖,但在部分特殊系统(如国产Linux)上可能需要手动安装依赖。若安装失败,请检查错误日志并确保系统满足软件要求。
步骤2:环境变量配置
安装脚本执行完成后,会在项目根目录生成.env文件,包含所有必要的环境变量配置。你可以根据实际需求修改以下关键配置:
# 编辑环境变量文件
nano .env
# 关键配置项说明
ADMIN_USERNAME="admin" # 管理员用户名
ADMIN_PASSWORD="SecurePass123" # 管理员密码
BILLIONMAIL_HOSTNAME="mail.yourdomain.com" # 邮件服务器主机名
TZ="Asia/Shanghai" # 时区设置
HTTP_PORT=80 # HTTP端口
HTTPS_PORT=443 # HTTPS端口
DBPASS="StrongDBPassword" # 数据库密码
REDISPASS="StrongRedisPass" # Redis密码
IPV4_NETWORK=172.66.1 # 容器内网网段
安全建议:生产环境中,建议使用随机生成的强密码,可通过以下命令生成安全密码:
# 生成32位随机密码 LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2> /dev/null | head -c 32
步骤3:启动服务集群
完成环境变量配置后,使用Docker Compose启动所有服务:
# 启动服务(后台运行)
docker compose up -d
# 查看服务状态
docker compose ps
正常启动后,服务状态应如下所示:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
billionmail-core-billionmail billionmail/core:4.4.2 "/bin/sh /opt/billio…" core-billionmail 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp
billionmail-dovecot-billionmail billionmail/dovecot:1.5 "/bin/sh /dovecot.sh" dovecot-billionmail 5 minutes ago Up 5 minutes 0.0.0.0:110->110/tcp, 0.0.0.0:143->143/tcp, 0.0.0.0:993->993/tcp, 0.0.0.0:995->995/tcp
billionmail-pgsql-billionmail postgres:17.4-alpine "docker-entrypoint.s…" pgsql-billionmail 5 minutes ago Up 5 minutes 127.0.0.1:25432->5432/tcp
billionmail-postfix-billionmail billionmail/postfix:1.6 "/bin/sh /postfix.sh" postfix-billionmail 5 minutes ago Up 5 minutes 0.0.0.0:25->25/tcp, 0.0.0.0:465->465/tcp, 0.0.0.0:587->587/tcp
billionmail-redis-billionmail redis:7.4.2-alpine "/bin/sh /redis-con…" redis-billionmail 5 minutes ago Up 5 minutes 127.0.0.1:26379->6379/tcp
billionmail-rspamd-billionmail billionmail/rspamd:1.2 "/bin/sh /rspamd.sh" rspamd-billionmail 5 minutes ago Up 5 minutes
billionmail-webmail-billionmail roundcube/roundcubemail:1.6.10-fpm-alpine "/docker-entrypoint.…" webmail-billionmail 5 minutes ago Up 5 minutes
步骤4:初始化数据库
首次启动时,需要初始化数据库结构和默认数据:
# 进入core容器
docker compose exec core-billionmail bash
# 执行数据库初始化命令
cd /opt/billionmail/core
go run main.go migrate up
# 创建初始管理员用户(如果install.sh未自动创建)
go run main.go create-admin --username $ADMIN_USERNAME --password $ADMIN_PASSWORD
# 退出容器
exit
系统验证:部署结果检查与验证
服务状态验证
使用以下命令检查各服务的运行状态和日志:
# 检查服务健康状态
docker compose healthcheck
# 查看核心服务日志
docker compose logs -f core-billionmail
# 查看Postfix邮件服务日志
docker compose logs -f postfix-billionmail
核心服务正常启动的日志特征:
core-billionmail | 2025-09-19T08:30:00Z [INFO] HTTP server started on :80
core-billionmail | 2025-09-19T08:30:00Z [INFO] HTTPS server started on :443
core-billionmail | 2025-09-19T08:30:01Z [INFO] Database connection established
core-billionmail | 2025-09-19T08:30:01Z [INFO] Redis cache connected
core-billionmail | 2025-09-19T08:30:02Z [INFO] All services initialized successfully
Web控制台访问验证
打开浏览器,访问以下地址进入Billion Mail管理控制台:
- HTTP:
http://服务器IP地址 - HTTPS:
https://服务器IP地址或https://BILLIONMAIL_HOSTNAME
使用.env文件中配置的ADMIN_USERNAME和ADMIN_PASSWORD登录系统。成功登录后,你应该能看到系统概览页面,显示各服务状态和资源使用情况。
邮件功能测试
使用telnet或邮件客户端测试SMTP发送功能:
# 测试SMTP服务连接
telnet localhost 25
# 预期响应
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.yourdomain.com ESMTP Postfix (Debian/GNU)
发送测试邮件:
EHLO test.com
MAIL FROM: <test@yourdomain.com>
RCPT TO: <recipient@example.com>
DATA
Subject: Test Email from Billion Mail
This is a test email sent from my Billion Mail server.
.
QUIT
常见问题解决与最佳实践
端口冲突问题
若启动时提示端口被占用,可通过以下步骤解决:
-
查找占用端口的进程:
# 以SMTP端口25为例 ss -ltnp | grep :25 -
停止占用端口的服务或修改Billion Mail的端口配置:
# 修改.env文件中的端口配置 SMTP_PORT=2525 # 将SMTP端口改为2525 SMTPS_PORT=4650 # 将SMTPS端口改为4650 -
重新启动服务:
docker compose down docker compose up -d
数据持久化与备份
重要数据目录说明:
| 宿主机目录 | 容器内路径 | 用途 | 备份建议 |
|---|---|---|---|
| ./postgresql-data | /var/lib/postgresql/data | PostgreSQL数据库数据 | 每日备份,保留30天 |
| ./vmail-data | /var/vmail | 用户邮件存储 | 增量备份,定期归档 |
| ./redis-data | /data | Redis缓存数据 | 每小时备份 |
| ./logs | /var/log | 系统日志 | 日志轮转,保留7天 |
自动化备份脚本示例:
#!/bin/bash
# backup-billionmail.sh
BACKUP_DIR="/backup/billionmail"
DATE=$(date +%Y%m%d)
RETENTION_DAYS=7
# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE
# 备份PostgreSQL数据库
docker compose exec -T pgsql-billionmail pg_dump -U $DBUSER $DBNAME > $BACKUP_DIR/$DATE/postgres.sql
# 备份邮件数据(仅增量)
rsync -av --link-dest=$BACKUP_DIR/$(date -d "yesterday" +%Y%m%d)/vmail ./vmail-data $BACKUP_DIR/$DATE/
# 备份Redis数据
docker compose exec -T redis-billionmail redis-cli -a $REDISPASS save
cp ./redis-data/dump.rdb $BACKUP_DIR/$DATE/redis-dump.rdb
# 删除过期备份
find $BACKUP_DIR -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \;
性能优化建议
-
资源限制配置:编辑
docker-compose.yml,为各服务添加资源限制:services: core-billionmail: deploy: resources: limits: cpus: '2' memory: 2G reservations: cpus: '1' memory: 1G -
Redis性能优化:修改
conf/redis/redis-conf.sh,调整内存策略:# 添加Redis配置 echo "maxmemory 1G" >> /etc/redis.conf echo "maxmemory-policy volatile-lru" >> /etc/redis.conf -
数据库优化:调整PostgreSQL配置:
# 在docker-compose.yml中添加环境变量 environment: - POSTGRES_PARAMS=--shared_buffers=512MB --work_mem=32MB
总结与后续步骤
通过Docker Compose部署Billion Mail,你已成功搭建了一个功能完整、架构可靠的邮件营销平台。这种部署方式不仅简化了环境配置,还提供了良好的可维护性和可扩展性。
后续建议操作:
-
安全加固:
- 配置SSL/TLS证书(Let's Encrypt)
- 启用Fail2ban防护(默认已启用)
- 限制管理IP访问(修改
IP_WHITELIST_ENABLE=true)
-
系统监控:
- 部署Prometheus + Grafana监控服务状态
- 设置关键指标告警(CPU、内存、磁盘空间)
-
功能扩展:
- 集成第三方API服务(在
conf/supplier/template/添加模板) - 配置邮件模板和自动化营销 campaign
- 集成第三方API服务(在
Billion Mail的Docker化部署方案为快速搭建企业级邮件营销平台提供了便利,同时保持了系统的灵活性和可定制性。如需进一步了解高级配置和功能使用,请参考官方文档或项目GitHub仓库。
附录:常用管理命令参考
| 命令 | 用途 |
|---|---|
docker compose up -d |
启动所有服务 |
docker compose down |
停止所有服务 |
docker compose logs -f [服务名] |
查看服务日志 |
docker compose exec [服务名] bash |
进入容器内部 |
docker compose pull |
更新服务镜像 |
docker compose restart [服务名] |
重启指定服务 |
docker system prune -a |
清理未使用的镜像和容器 |
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00