fix: support proxied deployments during updates

This commit is contained in:
zxyszx
2026-08-03 16:47:29 +08:00
parent 7eac123f0a
commit 65bc16bd92
5 changed files with 32 additions and 11 deletions
+3 -3
View File
@@ -161,7 +161,7 @@ jobs:
type=raw,value=latest type=raw,value=latest
type=sha,prefix=sha- type=sha,prefix=sha-
labels: | labels: |
org.opencontainers.image.title=LanQin Email ${{ matrix.name }} org.opencontainers.image.title=NewSzxcn Email ${{ matrix.name }}
org.opencontainers.image.version=${{ steps.image.outputs.tag }} org.opencontainers.image.version=${{ steps.image.outputs.tag }}
- name: Build and push - name: Build and push
@@ -227,7 +227,7 @@ jobs:
fi fi
cat > release-notes.md <<EOF cat > release-notes.md <<EOF
# LanQin Email ${tag} # NewSzxcn Email ${tag}
自建邮箱 Webmail 全栈方案,包含 Web、API、Postfix、Dovecot、Rspamd 等组件。 自建邮箱 Webmail 全栈方案,包含 Web、API、Postfix、Dovecot、Rspamd 等组件。
@@ -265,7 +265,7 @@ jobs:
shell: bash shell: bash
run: | run: |
tag="${{ needs.release.outputs.tag }}" tag="${{ needs.release.outputs.tag }}"
title="LanQin Email ${tag}" title="NewSzxcn Email ${tag}"
if gh release view "${tag}" >/dev/null 2>&1; then if gh release view "${tag}" >/dev/null 2>&1; then
gh release edit "${tag}" --title "${title}" --notes-file release-notes.md --latest gh release edit "${tag}" --title "${title}" --notes-file release-notes.md --latest
else else
+9
View File
@@ -20,6 +20,15 @@ LANQIN_RSPAMD_IMAGE=ghcr.io/zxyszx/newszxcn-email-rspamd:latest
# 手动部署可执行:openssl rand -hex 24 # 手动部署可执行:openssl rand -hex 24
LANQIN_UPDATE_TOKEN= LANQIN_UPDATE_TOKEN=
# 可选端口绑定。使用宿主机反向代理时,可将 HTTP 设为 127.0.0.1:8088。
LANQIN_HTTP_BIND=80
LANQIN_HTTPS_BIND=443
LANQIN_SMTP_BIND=25
LANQIN_SMTPS_BIND=465
LANQIN_SUBMISSION_BIND=587
LANQIN_IMAPS_BIND=993
LANQIN_POP3S_BIND=995
# ========================= # =========================
# 对外访问地址 # 对外访问地址
# ========================= # =========================
+8
View File
@@ -154,6 +154,14 @@ docker compose -f docker-compose.stack.yml -f docker-compose.stack.build.yml up
## 邮件客户端 TLS 证书 ## 邮件客户端 TLS 证书
Web 站点可以由宿主机 Nginx / 宝塔反代到容器 `80`,但 SMTP/IMAP/POP3 端口不会使用 Web 反代的证书。 Web 站点可以由宿主机 Nginx / 宝塔反代到容器 `80`,但 SMTP/IMAP/POP3 端口不会使用 Web 反代的证书。
此时可在 `.env` 调整 Web 端口绑定,避免与宿主机 Nginx 的 `80/443` 冲突:
```dotenv
LANQIN_HTTP_BIND=127.0.0.1:8088
LANQIN_HTTPS_BIND=127.0.0.1:8443
```
宿主机 Nginx 再反向代理到 `http://127.0.0.1:8088`。不使用宿主机反向代理时保留默认的 `80``443` 即可。
如果第三方客户端连接 `993/995` 时提示证书是 `localhost`,说明 Dovecot 仍在使用容器自带的测试证书。LanQin API 的 SMTP `465/587` submission 不会使用自签测试证书;启用前必须配置可读的真实证书。 如果第三方客户端连接 `993/995` 时提示证书是 `localhost`,说明 Dovecot 仍在使用容器自带的测试证书。LanQin API 的 SMTP `465/587` submission 不会使用自签测试证书;启用前必须配置可读的真实证书。
生产环境请把域名证书挂载进容器,并在 `.env` 指向证书文件: 生产环境请把域名证书挂载进容器,并在 `.env` 指向证书文件:
+7 -7
View File
@@ -6,13 +6,13 @@ services:
LANQIN_UPDATE_SERVICE_URL: http://updater:8080/v1/update LANQIN_UPDATE_SERVICE_URL: http://updater:8080/v1/update
LANQIN_UPDATE_SERVICE_TOKEN: ${LANQIN_UPDATE_TOKEN:-} LANQIN_UPDATE_SERVICE_TOKEN: ${LANQIN_UPDATE_TOKEN:-}
ports: ports:
- "80:80" - "${LANQIN_HTTP_BIND:-80}:80"
- "443:443" - "${LANQIN_HTTPS_BIND:-443}:443"
- "25:25" - "${LANQIN_SMTP_BIND:-25}:25"
- "465:465" - "${LANQIN_SMTPS_BIND:-465}:465"
- "587:587" - "${LANQIN_SUBMISSION_BIND:-587}:587"
- "993:993" - "${LANQIN_IMAPS_BIND:-993}:993"
- "995:995" - "${LANQIN_POP3S_BIND:-995}:995"
volumes: volumes:
- ./data:/data - ./data:/data
- ./mail:/var/mail/vhosts - ./mail:/var/mail/vhosts
+5 -1
View File
@@ -210,7 +210,11 @@ do_update() {
remember_current_image remember_current_image
log "正在拉取最新版..." log "正在拉取最新版..."
compose pull compose pull
compose up -d --remove-orphans if ! compose up -d --remove-orphans; then
warn "新版本容器启动失败,正在自动回滚。"
do_rollback
fail "更新失败,已回滚到原镜像。"
fi
if ! wait_for_health 90; then if ! wait_for_health 90; then
warn "新版本健康检查失败,正在自动回滚。" warn "新版本健康检查失败,正在自动回滚。"
do_rollback do_rollback