5a1cc158a1
- 将 `docker-compose` 中的数据、邮箱和 DKIM 存储从命名卷改为本地目录挂载。 - 删除不再需要的 `volumes` 声明,简化部署配置。
LanQin Email Docker 部署说明
最简单部署:单容器镜像版
服务器上不需要源码构建,只要 docker-compose.yml 和 .env 即可。
cd deploy
cp .env.example .env
# 修改 LANQIN_PUBLIC_HOSTNAME / LANQIN_PUBLIC_BASE_URL / LANQIN_ADMIN_EMAIL / LANQIN_ADMIN_PASSWORD
docker compose pull
docker compose up -d
也可以使用脚本:
cd deploy
bash install.sh
第一次执行会生成 .env 并提示你修改配置;修改完成后再次执行 bash install.sh。
默认只启动一个业务容器:
lanqin-email
容器内部包含:
- Go API
- Web 静态站点
- Nginx
- Postfix
- Dovecot
- Rspamd
常用命令:
# 查看日志
docker compose logs -f lanqin-email
# 更新镜像并重启
docker compose pull
docker compose up -d
# 停止
docker compose down
GHCR 镜像权限
默认镜像:
ghcr.io/lanqin996/lanqin-email:latest
ghcr.io/lanqin996/lanqin-email-api:latest
ghcr.io/lanqin996/lanqin-email-web:latest
ghcr.io/lanqin996/lanqin-email-postfix:latest
ghcr.io/lanqin996/lanqin-email-dovecot:latest
ghcr.io/lanqin996/lanqin-email-rspamd:latest
如果拉取时报:
unauthorized
说明 GHCR Package 还是私有,二选一:
- 到 GitHub Packages 把镜像改成 Public。
- 在服务器登录 GHCR:
echo "<github_token>" | docker login ghcr.io -u <github_user> --password-stdin
本地源码构建
如果你是在完整源码仓库里本机构建,使用 build override:
cd deploy
cp .env.example .env
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
这样会使用 deploy/all-in-one/Dockerfile 构建单容器镜像。
可选:多容器调试部署
如果需要分别查看 Postfix / Dovecot / Rspamd 日志,可以使用 stack 编排。
拉取镜像版:
cd deploy
docker compose -f docker-compose.stack.yml up -d
源码构建版:
cd deploy
docker compose -f docker-compose.stack.yml -f docker-compose.stack.build.yml up -d --build
DNS
进入 Web 管理后台后,在域名管理中查看每个域名需要配置的:
- MX
- SPF TXT
- DKIM TXT
- DMARC TXT
配置完成后点击“检测”。
邮件服务边界
- Postfix 读取
/data/lanqin.db中的domains、mailboxes、aliases。 - Dovecot 读取同一个 SQLite 数据库进行邮箱认证,并使用
/var/mail/vhosts作为 Maildir 根目录。 - Rspamd 通过 milter 接入 Postfix,负责 DKIM 签名和垃圾邮件标记。
- Rspamd 会周期性从 SQLite 导出域名 DKIM 私钥到容器内
/var/lib/rspamd/dkim。 - Go API 是 Webmail 和管理后台唯一入口;浏览器不直接连接 SMTP/IMAP。
- Go API 会读取
LANQIN_MAILDIR_ROOT=/var/mail/vhosts,周期扫描 Maildir,把 Postfix/Dovecot 入站邮件同步成 Webmail 索引。
生产注意
- 建议在服务器或边缘网关配置 HTTPS。
- 云厂商通常默认封禁 25 端口,需要单独申请解封。
- SQLite 适合 V1 单机部署;多节点部署前迁移到 PostgreSQL,并把 Postfix/Dovecot maps 改为 PostgreSQL。