Files
NewSzxcn-Email/deploy/README.md
T
LanQin 913a0ef420 chore(deploy): 增强 Docker 构建与发布流程
- 新增 GitHub Actions Docker 工作流,自动执行前端检查、后端测试并发布 GHCR 镜像。
- 为单容器与多容器部署补充镜像配置、使用说明和环境变量示例。
- 优化各 Dockerfile 的构建缓存与镜像体积,提升构建速度并减少无关文件进入镜像。
2026-06-15 22:05:41 +08:00

2.5 KiB
Raw Blame History

LanQin Email Docker 部署说明

默认:单容器部署

cd deploy
cp .env.example .env
# 修改 LANQIN_PUBLIC_HOSTNAME / LANQIN_ADMIN_EMAIL / LANQIN_ADMIN_PASSWORD
docker compose up -d --build

默认只启动一个业务容器:

lanqin-email

容器内部包含:

  • Go API
  • Web 静态站点
  • Nginx
  • Postfix
  • Dovecot
  • OpenDKIM

常用日志:

docker compose logs -f lanqin-email

使用 GitHub Actions 构建好的镜像

仓库已添加 .github/workflows/docker.yml

  • pull request:检查前端 shadcn 规则、前端构建、后端测试。
  • push 到 main / master:检查通过后发布 Docker 镜像到 GHCR。
  • push tag,例如 v1.0.0:发布对应 tag 镜像。

默认发布镜像:

ghcr.io/<owner>/<repo>:latest
ghcr.io/<owner>/<repo>-api:latest
ghcr.io/<owner>/<repo>-web:latest
ghcr.io/<owner>/<repo>-postfix:latest
ghcr.io/<owner>/<repo>-dovecot:latest
ghcr.io/<owner>/<repo>-opendkim:latest

单容器部署时,把 .env 里的 LANQIN_IMAGE 改成你的 GHCR 镜像:

LANQIN_IMAGE=ghcr.io/<owner>/<repo>:latest

然后在服务器执行:

cd deploy
docker compose pull
docker compose up -d

如果镜像是私有的,服务器需要先登录 GHCR:

echo "<github_token>" | docker login ghcr.io -u <github_user> --password-stdin

可选:多容器调试部署

如果需要分别查看 Postfix / Dovecot / OpenDKIM 日志,可以使用保留的 stack 编排:

cd deploy
docker compose -f docker-compose.stack.yml up -d --build

DNS

进入 Web 管理后台后,在域名管理中查看每个域名需要配置的:

  • MX
  • SPF TXT
  • DKIM TXT
  • DMARC TXT

配置完成后点击“检测”。

邮件服务边界

  • Postfix 读取 /data/lanqin.db 中的 domainsmailboxesaliases
  • Dovecot 读取同一个 SQLite 数据库进行邮箱认证,并使用 /var/mail/vhosts 作为 Maildir 根目录。
  • OpenDKIM 启动时从 SQLite 导出域名 DKIM 私钥到容器内 /etc/opendkim/keys
  • 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。