首页
/ Billion Mail Docker部署教程:容器化环境下的快速搭建

Billion Mail Docker部署教程:容器化环境下的快速搭建

2026-02-05 05:24:01作者:温艾琴Wonderful

为什么选择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)

安装过程说明

  1. 系统兼容性检查(架构、操作系统版本)
  2. Docker与Docker Compose自动安装
  3. 生成随机配置(管理员账号、数据库密码等)
  4. 环境变量文件生成
  5. 防火墙规则配置

注意:安装脚本会自动处理大部分依赖,但在部分特殊系统(如国产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_USERNAMEADMIN_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

常见问题解决与最佳实践

端口冲突问题

若启动时提示端口被占用,可通过以下步骤解决:

  1. 查找占用端口的进程:

    # 以SMTP端口25为例
    ss -ltnp | grep :25
    
  2. 停止占用端口的服务或修改Billion Mail的端口配置:

    # 修改.env文件中的端口配置
    SMTP_PORT=2525       # 将SMTP端口改为2525
    SMTPS_PORT=4650      # 将SMTPS端口改为4650
    
  3. 重新启动服务:

    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 {} \;

性能优化建议

  1. 资源限制配置:编辑docker-compose.yml,为各服务添加资源限制:

    services:
      core-billionmail:
        deploy:
          resources:
            limits:
              cpus: '2'
              memory: 2G
            reservations:
              cpus: '1'
              memory: 1G
    
  2. Redis性能优化:修改conf/redis/redis-conf.sh,调整内存策略:

    # 添加Redis配置
    echo "maxmemory 1G" >> /etc/redis.conf
    echo "maxmemory-policy volatile-lru" >> /etc/redis.conf
    
  3. 数据库优化:调整PostgreSQL配置:

    # 在docker-compose.yml中添加环境变量
    environment:
      - POSTGRES_PARAMS=--shared_buffers=512MB --work_mem=32MB
    

总结与后续步骤

通过Docker Compose部署Billion Mail,你已成功搭建了一个功能完整、架构可靠的邮件营销平台。这种部署方式不仅简化了环境配置,还提供了良好的可维护性和可扩展性。

后续建议操作

  1. 安全加固

    • 配置SSL/TLS证书(Let's Encrypt)
    • 启用Fail2ban防护(默认已启用)
    • 限制管理IP访问(修改IP_WHITELIST_ENABLE=true
  2. 系统监控

    • 部署Prometheus + Grafana监控服务状态
    • 设置关键指标告警(CPU、内存、磁盘空间)
  3. 功能扩展

    • 集成第三方API服务(在conf/supplier/template/添加模板)
    • 配置邮件模板和自动化营销 campaign

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 清理未使用的镜像和容器
登录后查看全文
热门项目推荐
相关项目推荐