diff --git a/docs/maintenance/HN_MAIL_GATEWAY.md b/docs/maintenance/HN_MAIL_GATEWAY.md new file mode 100644 index 0000000..e8fd84a --- /dev/null +++ b/docs/maintenance/HN_MAIL_GATEWAY.md @@ -0,0 +1,56 @@ +# HN 邮件与订阅网关 + +2026-10-27,按用户“参考DPL”授权配置;所有凭据、数据库与运行实例独立,未向DPL发布。主站与后台见 [HN_PRODUCTION](HN_PRODUCTION.md)。本文是实现、验收和恢复的唯一正文。 + +## 域名与渠道 + +- `hardnerd.net` / `admin.hardnerd.net`:HN主站/后台,sitejp02。 +- `hardnerd.dev`:系统邮件域名,保留Namecheap BasicDNS和Private Email MX/SPF、privateemail DKIM。用户实际建立的是 `mail@hardnerd.dev`,保留其名称。 +- Resend:独立账号ACC-RESEND-HN,Tokyo,domain ID `db1cf9ac-3d57-41b5-9fd0-f567ab40b520`。`resend._domainkey` TXT、`rsend` CNAME到`rsend-apne1.forge.rmta.net`、`send` CNAME到`send.forge.rmta.net`均verified。Resend receiving关闭;企业收件走IMAP。 +- 邮箱:Namecheap Private Email Launch,订阅4476265,1/1邮箱、5GB;后台已显示服务有效至2027-10-27、自动续费开启,不代表将来扣款成功。 +- `hardnerd-nodes.com`:独立Cloudflare Free zone `1043df03492d50f87d92300a6729362e`,NS `bradley.ns.cloudflare.com` / `jewel.ns.cloudflare.com`,权威/公共解析及active状态已核实。root A与c2 A指向gateway-01,www CNAME根域,均橙云;原Namecheap转发MX/SPF保留,不作为HN业务邮箱。 +- 正式订阅基址 `https://c2.hardnerd-nodes.com` 已写入仅HN的 `subscribe_url`,生成链接主机已回读。root/www跳到hardnerd.net;c2只开放 `/s/` 和 `/api/v1/client/subscribe`,其他路径404,不提供公开管理端。 +- Cloudflare完整(严格)在源站证书验证通过后保存;Cache Rule `d765537a713747faa2a6e9cd1009c8a9` 对所有请求绕过缓存。Bot Fight/Under Attack未开启,未关闭BIC或改账号安全设置。 + +## HN 邮件运行配置 + +`/www/wwwroot/hardnerd.net/.env`、HN库的 `mail_flow` 设置;SMTP465 SSL与IMAP993 TLS均校验证书。旧Laravel读取 `MAIL_DRIVER`,已明确设smtp,不能只设MAIL_MAILER。发件名称hardnerd、地址及Reply-To均为自有邮箱,页脚主站hardnerd.net,空MAIL_LOGO_PATH避免沿用DPL图片。 + +验证码/登录链接/工单回复优先Resend,其他走企业SMTP;额度100/3000且使用官方用量与本地预占,规则沿 [BUSINESS_RULES](BUSINESS_RULES.md)。Resend密钥、IMAP密码与回调签名秘密在HN库加密;SMTP密码只在私有环境,未复制进普通后台可读设置。ACC-HN-MAIL与ACC-RESEND-HN私有字段按GemDocs读取,本文不存值。 + +Webhook `https://hardnerd.net/api/v1/guest/resend/webhook`,ID `dafe1822-894f-4aff-97c9-0dc669d416b8`,enabled;订阅sent/delivered/delivery_delayed/bounced/failed/complained/suppressed。未签名401,签名诊断200;真实测试sent和delivered均回调200,投递事件和时间已入库。 + +IMAP来信加密保存;来信自动回复启用,普通SMTP发送,按北京时间每天每发件人最多一次,既有过滤避免自身/退信/自动邮件循环。管理员运行汇报保持关闭,没有借用DPL master或Telegram目的地;HN尚无独立汇报路由,不能宣称已接入日报。外部普通来信自动回复未做额外真实发送验收。 + +只重启过HN的hn-fpm、hn-horizon;DPL邮件配置和工作进程未改。 + +## 独立网关 + +Git分支 `codex/hn-production`。首个网关安装器d8a5091,首启等待/安全续跑修复 `ad9a4fe5877f3f9741e79f8250257d707e768189`;后续文档提交以服务器HEAD为准。发布先推送后部署;原Git获取较慢最终成功,修复提交经已推送Git bundle导入,不使用源码打包覆盖。 + +- gateway-01 / VPS-006 -> `/opt/hn-gateway/provision`,实现 `scripts/hn/gateway/`,只经白色机SSH。 +- 本地代码:HN独立工作树相同目录下的scripts;本地Web域名不适用(运维容器);线上订阅域名见上;白色机网站反代未建立。 +- 容器 `hn-subscribe-gateway` / `hn-subscribe-admin`;宿主端口仅 `127.0.0.1:28080/28443/26444`。管理端只环回26444,无公网vhost。默认管理员按ACC-005建立,未改旧管理员。 +- 网络hn_sgw_net,172.28.32.0/24;卷hn_sgw_config / hn_sgw_logs;状态 `/var/lib/hn-sgw`,admin.env600。管理后端只指向hardnerd.net。白色机IP104.168.30.40为运维验收白名单,其他继承独立过滤库与管理规则。 +- gateway内存160MB/0.5CPU,admin128MB/0.5CPU;启动前可用内存538MB,端口/子网/磁盘/固定镜像均检查。既有DPL/FUC资源不停止、不复用HN卷。 +- 宿主 `/etc/nginx/conf.d/hn-subscribe.conf`、独立Cloudflare可信IP include与proxy include。宿主验证容器证书,容器验证HN上游证书,均不跳过TLS;已知域名SNI固定。 +- 初启镜像下载公开云IP列表再启动Nginx;安装器等待其初始化,失败后只允许相同凭据安全续跑,不重建身份或覆盖变更。 +- 独立证书SAN含c2/root/www,到2027-01-25;目录 `/etc/hn-gateway-letsencrypt`,ACME账户从同宿主既有已接受条款的账户复制到独立目录,未创建新账户或运行全局hooks。 +- hn-gateway-cert.timer专属续期,renew-gateway.sh仅重载两个HN容器和宿主Nginx;hn-gateway-cloudflare-ips.timer维护HN可信代理段。独立续期dry-run通过,未改DPL/FUC续期。 + +## 验收证据与边界 + +证据本地忽略目录 `codex/output/hn-mail-20261027/`;远端私有备份下保存配置/SQL/回调与测试收据,不能输出其中秘密。 + +- 两封SendEmailJob测试只发用户新建邮箱:Resend verification一封、conventional other一封;没有跨渠道重复发送。IMAP实收2封、SPF和DKIM均pass、HN正文/页脚正确、无DPL品牌;IMAP入库2封。Resend已投递且有时间;SMTP仅记submitted,真实收件另证,未伪造SMTP回执。 +- 白色机实际HTTPS请求:HN主站和DPL主站200,订阅root404;源站TLS校验通过。c2有效受限用户输出sing-box JSON与Clash YAML结构,invalid token403,管理路径404,no-store与过滤响应头存在。 +- 为保留审计同时避免令牌进入URL日志,真实有效令牌测试放GET JSON body,未持久改变原HN主站日志配置;非秘密invalid token验证了常规查询路径和短路径。没有对外展示或记录有效订阅URL。 +- 限时非管理员QA用户ID2,example.invalid、1MB/30分钟、无权限组/无节点;结束已禁用、额度清零、到期、令牌轮换且会话0,未删除审计证据。套餐/节点为空,未声称实际代理联网通过。 +- 四个原DPL/FUC容器ID、启动时间、重启次数与既有Nginx配置hash基线一致。HN主站外其他站点配置未改。未发布DPL功能代码。 +- 已完成服务器侧验收,未做线上页面验收。支付、真实节点联网及外部自动回复额外发送未验收。 + +## 备份与回退 + +邮件备份 `/root/codex-backups/hn/20261027-mail-setup/`:hn.sql、hn.env.before、applied.json、subscribe-url-before.json、邮件测试收据;resend-webhook.json含秘密只限root。恢复前先备份当前业务数据,不能用初次SQL覆盖后续运营数据。紧急停用HN mail_flow或恢复旧HN邮件环境/设置,仅重启HN FPM/Horizon;不要重置DPL或邮箱密码。回调可在HN Resend账号禁用,保留记录。 + +网关备份 `/root/codex-backups/hn-gateway/20261027-first-install/`:原容器/配置保护基线、HTTP-only vhost及证书日志。回退顺序:先恢复HN subscribe_url为原值,再只停HN两个timer及HN compose容器,将HN vhost恢复HTTP-only或退出,nginx -t后平滑reload;保留卷、证书、admin.env及备份。不得执行全局docker prune/down,不停旧容器、不撤销旧证书或重启共享服务。 diff --git a/docs/maintenance/HN_PRODUCTION.md b/docs/maintenance/HN_PRODUCTION.md index 7d6e6e8..8746563 100644 --- a/docs/maintenance/HN_PRODUCTION.md +++ b/docs/maintenance/HN_PRODUCTION.md @@ -7,7 +7,7 @@ - 主站:https://hardnerd.net/;www.hardnerd.net 301 到主站。 - 后台:https://admin.hardnerd.net/,根路径内部映射 HN 数据库内随机 secure_path;API 仍要求管理员认证。 - 服务器:site-jp02 / VPS-005,路径 `/www/wwwroot/hardnerd.net`,经白色机 SSH;连接资料按 GemDocs 凭据入口取用,不写入仓库。 -- Git 发布分支:`codex/hn-production`;首发功能提交 `2e5cec6a05e4ba6bb4bad9ec814f8d099bcd2bfe`,合并当时本地 master;不是 DPL 的上线版本。后续只补本文档的提交以服务器 HEAD 为准。 +- Git 发布分支:`codex/hn-production`;首发功能提交 `2e5cec6a05e4ba6bb4bad9ec814f8d099bcd2bfe`,合并当时本地 master;不是 DPL 的上线版本。后续邮件/订阅配置和安装器版本以本文及 [HN_MAIL_GATEWAY](HN_MAIL_GATEWAY.md) 为准;只更新HN专用分支。 - EZ 锁定源码 `2c0581386d86006315e6eba2f5970c923892caba`;后台子模块 `ef5f43da335092cbff8fdf0ad7ff9b4d92d7d0d7`;两者均正常 Git 初始化,未修改第三方构建源。 - `SITE_PROFILE=hn`、`SITE_THEME=EZ`、生产环境、debug 关闭、HTTPS 安全会话;独立 APP_KEY、数据库、SQL 用户、Redis 密码/前缀、storage、日志、会话与队列。未复制本地演示库或 DPL 业务数据。 - MariaDB 数据库/账号 hn(仅 hn.* 授权),Redis `127.0.0.1:6387`;Unix 用户 hn。服务 `hn-redis`、`hn-fpm`、`hn-horizon`,独立 FPM socket `/run/php/hn.sock`、独立主配置 `/etc/php/8.4/hn-fpm.conf`(不向 DPL 共用 FPM 池加载)。 @@ -20,7 +20,7 @@ Namecheap 中 hardnerd.net 已切到 `bradley.ns.cloudflare.com` / `jewel.ns.clo 源站 Let's Encrypt 证书含根域、www、admin,有效期至 2027-01-25;Certbot webroot `/var/lib/hn/acme`,HTTP 仅开放 ACME 并将其他请求跳到 HTTPS。证书目录 `/etc/letsencrypt/live/hardnerd.net`,已安装仅处理本证书的 `hn-cert-renew.timer` / `hn-cert-renew.service`,每日03:30加最多1小时随机延迟检查,Persistent补跑;续期后专用 deploy hook 检查并平滑 reload Nginx。续期 `certbot renew --cert-name hardnerd.net --dry-run` 已通过(退出0),timer下一次触发时间已回读。Cloudflare 完整(严格)已保存并回读;先通过源站证书验证,再启用严格校验,没有降低 TLS 校验。 -未建立新的白色机网站反代;本机不访问线上。服务器侧运维请求走已登记 SSH 路线。hardnerd.dev 与 hardnerd-nodes.com 的系统/订阅用途为既有用户指定,本次未配置,不用主站代替它们。 +未建立新的白色机网站反代;本机不访问线上。服务器侧运维请求走已登记 SSH 路线。hardnerd.dev 已配置独立企业邮箱与Resend;hardnerd-nodes.com 已配置独立订阅网关,运行、DNS、验收与恢复见 [HN_MAIL_GATEWAY](HN_MAIL_GATEWAY.md)。 ## 发布、权限与恢复 @@ -38,4 +38,4 @@ Namecheap 中 hardnerd.net 已切到 `bradley.ns.cloudflare.com` / `jewel.ns.clo - 经白色机在服务器侧验证:主站/后台 HTTPS200,www301,响应经 Cloudflare;公开配置 app_name=hardnerd,EZ主模块200,源站三个域名证书校验通过,.env访问403/404(www跳转后拒绝)。 - 后台HTML及8项资源200,真实默认管理员登录200、管理配置接口200、访客403;仅本次新建验收令牌已撤销。 - DPL HEAD `7e8fbf60bd62ed5c6093099d574e0f234994a088` 未变;全部原 Nginx 配置SHA256未变;DPL Horizon、共享FPM、Nginx主进程、MariaDB、原Redis均active且启动时间未变,DPL公网HTTP200。Nginx仅平滑加载新增HN虚拟主机。 -- 已完成服务器侧验收,未做线上页面验收。HN现为独立新站,仅默认管理员,没有套餐/订单/节点;邮件当前log驱动、支付和辅助域名未配置,未测试真实付款/发信/订阅联网。业务运营配置不等于本次基础部署完成。 +- 已完成服务器侧验收,未做线上页面验收。HN现为独立新站,没有套餐/订单/节点;邮件及辅助域名随后已配置并完成服务器侧收发/投递回调/订阅鉴权验收,详见 [HN_MAIL_GATEWAY](HN_MAIL_GATEWAY.md)。唯一受限订阅测试用户ID2已禁用、轮换令牌且无会话;支付及实际节点联网未配置/验收。 diff --git a/docs/maintenance/README.md b/docs/maintenance/README.md index 0279a9c..80b056a 100644 --- a/docs/maintenance/README.md +++ b/docs/maintenance/README.md @@ -15,6 +15,7 @@ | 文件 | 用途 | | --- | --- | +| HN_MAIL_GATEWAY.md | HN独立企业邮箱/Resend、辅助域名、订阅网关、验收及恢复 | | HN_PRODUCTION.md | HN生产版本、主域名/后台、独立运行服务、TLS、服务器验收与回退 | | SITE_PROFILES.md | dpl / hn 独立部署参数、主题选择、开发与发布隔离 | | THEME_DESIGNS.md | tpl-a 等可复用设计方案、定稿与绑定状态、预览和验证边界 | diff --git a/docs/maintenance/STATUS.md b/docs/maintenance/STATUS.md index f8e22e2..fa8378e 100644 --- a/docs/maintenance/STATUS.md +++ b/docs/maintenance/STATUS.md @@ -4,7 +4,11 @@ ## HN 首次线上部署(2026-10-27,服务器侧验收完成) -用户指定 sitejp02、主域名 hardnerd.net,已使用独立数据库和 EZ 上线;后台 admin.hardnerd.net,默认管理员已创建并验证。Git功能提交2e5cec6已推送HN专用分支并在服务器部署;Cloudflare代理/严格HTTPS、源站证书、前后台及权限通过,唯一验收会话已撤销。DPL提交/既有Nginx配置/原服务启动时间不变,DPL公网200。未做线上页面验收;套餐、节点、真实邮件/支付及辅助域名未配置。具体服务、证据、恢复与限制见 [HN_PRODUCTION](HN_PRODUCTION.md)。下文“未推送/部署”是各历史阶段当时状态,不代表当前HN尚未部署。 +用户指定 sitejp02、主域名 hardnerd.net,已使用独立数据库和 EZ 上线;后台 admin.hardnerd.net,默认管理员已创建并验证。Git功能提交2e5cec6已推送HN专用分支并在服务器部署;Cloudflare代理/严格HTTPS、源站证书、前后台及权限通过,唯一验收会话已撤销。DPL提交/既有Nginx配置/原服务启动时间不变,DPL公网200。未做线上页面验收;套餐、节点及支付未配置。邮件及辅助域名随后已接通,见下节。具体服务、证据、恢复与限制见 [HN_PRODUCTION](HN_PRODUCTION.md)。下文“未推送/部署”是各历史阶段当时状态,不代表当前HN尚未部署。 + +## HN 邮件与独立订阅网关(2026-10-27,服务器侧验收完成) + +mail@hardnerd.dev 的SMTP465/IMAP993及Resend独立账号已接通,两封实际测试邮件收件及SPF/DKIM通过;Resend实际回调200、已投递时间入库,IMAP入库2封,自身邮件不自动回复。来信自动回复已启用但未发送额外外部测试;管理员运行汇报未借用DPL目的地。c2.hardnerd-nodes.com 经Cloudflare严格TLS转发到独立HN网关,Clash/sing-box格式、鉴权、no-store及非订阅拒绝通过;限时QA账号已禁用、令牌轮换。证书续期模拟通过,原DPL/FUC容器及Nginx配置基线不变。没有可运营套餐/节点,未测真实付款、实际代理联网或线上页面。配置、证据、版本与回退见 [HN_MAIL_GATEWAY](HN_MAIL_GATEWAY.md)。 ## admin.hn.loc 本地后台入口(2026-10-27,已启用)