在企业或团队使用 GitLab 时,邮件通知功能至关重要。无论是代码合并请求、CI/CD 流水线结果,还是用户注册与密码找回,都依赖邮件服务。本文将介绍如何在 Docker 环境 下配置 GitLab 的邮件服务器,并通过 Docker Compose 部署 mailserver 来实现内部邮件收发。
🛠 前提条件
- 已部署的 GitLab Docker 容器
- 已安装 Docker Engine 与 Docker Compose
- 已创建 GitLab 与邮件服务共享的 Docker 网络 (例如
gitlab_net) - 基本的 Linux 命令行操作能力
📧 GitLab 邮件配置
在 GitLab 的配置文件(通常是 gitlab.rb 或环境变量)中,添加如下配置:
ruby
################################################################################
## GitLab 邮件服务器配置
################################################################################
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "mailserver"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_domain'] = "internal.local"
gitlab_rails['smtp_authentication'] = false
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
gitlab_rails['smtp_pool'] = false
gitlab_rails['gitlab_email_from'] = 'gitlab@internal.local'
gitlab_rails['gitlab_email_display_name'] = 'GitLab'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@internal.local'
gitlab_rails['gitlab_email_subject_suffix'] = ''
这里的关键点是:
smtp_address指向我们即将部署的 mailserver 容器。gitlab_email_from设置发件人地址。gitlab_email_reply_to设置回复地址。
📦 使用 Docker Compose 部署邮件服务器
在 docker-compose.yml 中添加邮件服务:
yaml
version: "3.8"
services:
mail:
image: mailserver/docker-mailserver:latest
container_name: mailserver
deploy:
resources:
limits:
cpus: ${CPUS:-1}
memory: ${MEMORY_LIMIT:-512MB}
restart: always
hostname: mail
domainname: internal.local
env_file: config/mailserver.env
volumes:
- ./config:/tmp/docker-mailserver/
- maildata:/var/mail
- mailstate:/var/mail-state
- maillogs:/var/log/mail
ports:
- "25:25" # SMTP
- "143:143" # IMAP
- "587:587" # SMTP Submission (建议添加)
cap_add:
- NET_ADMIN
networks:
- gitlab_net # 加入 GitLab 所在的网络
volumes:
maildata:
mailstate:
maillogs:
networks:
gitlab_net:
external: true # 使用外部已存在的网络
说明:
- 镜像 :使用
docker-mailserver提供完整的邮件服务。 - 端口:开放 25(SMTP)、143(IMAP)、587(SMTP Submission)。
- 网络 :加入与 GitLab 相同的
gitlab_net网络,保证容器间通信。 - 挂载卷:持久化邮件数据、状态与日志。
🚀 启动服务
执行以下命令:
bash
docker compose up -d mail
确认容器运行正常:
bash
docker compose ps
🔍 验证邮件功能
-
在 GitLab Web 界面中,进入 Admin Area → Settings → Email。
-
发送测试邮件,确认能成功投递。
-
查看
mailserver容器日志:bashdocker logs -f mailserver
⚠️ 注意事项
- 如果 GitLab 与 mailserver 不在同一网络,需要额外配置网络互通。
- 内部域名
internal.local仅适用于内网环境,外部访问需配置真实域名与 DNS。 - 建议开启 587 端口,用于客户端安全提交邮件。
🎯 总结
通过以上步骤,我们完成了:
- 在 GitLab 中配置邮件参数
- 使用 Docker Compose 部署 mailserver
- 验证 GitLab 的邮件通知功能
这样,团队就能在代码协作与 CI/CD 流程中,及时收到邮件提醒,提升工作效率。