dpl/docs/maintenance/HN_PRODUCTION.md

42 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# HN 生产部署与恢复
2026-10-27 用户授权部署到 sitejp02,并指定主域名 hardnerd.net。本页仅维护 HN;DPL 发布仍单独授权。
## 当前实例
- 主站: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 的上线版本。后续邮件/订阅配置和安装器版本以本文及 [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 池加载)。
- 新配置:`/etc/nginx/conf.d/hn.conf`、`/etc/hn/redis.conf`、`/etc/cron.d/hn-scheduler`,服务单元在 `/etc/systemd/system/`。HN FPM ondemand 最多2子进程,Horizon每组1进程,两个服务各 MemoryMax 640M,Redis上限128MB。
- 生产默认管理员按 ACC-005 约定创建为 ID1,管理员有效且未禁用;未覆盖已有账号。凭据只由 GemDocs 对应字段入口提供,不写本文或日志。
## DNS 与 TLS
Namecheap 中 hardnerd.net 已切到 `bradley.ns.cloudflare.com` / `jewel.ns.cloudflare.com`;Cloudflare 独立 zone `76ae2997fe3ed41820aee0f7a73f4271`,免费方案已激活。根域与 admin A 指向 sitejp02,www CNAME 根域,均已代理;原5条 Namecheap 邮件 MX 与 SPF 已保留,不代表邮件收发可用。
源站 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 已配置独立企业邮箱与Resend;hardnerd-nodes.com 已配置独立订阅网关,运行、DNS、验收与恢复见 [HN_MAIL_GATEWAY](HN_MAIL_GATEWAY.md)。
## 发布、权限与恢复
按 Git 提交、推送,再在 HN 路径更新明确提交;保留 DPL 原 checkout 和分支。依赖安装与 EZ 构建在 HN 目录内完成,运行私密配置不进 Git。备份用 umask077,Git checkout 用022;仅 HN storage/bootstrap缓存允许 hn 写,源代码和发布资源由 root 管理。
首发备份:`/root/codex-backups/hn/20261027-first-deploy/`,包括 DPL/原Nginx/原服务保护基线、HN 初始环境600、建管理员前 HN SQL600、HTTP-only Nginx备份、安装/构建/Certbot日志及服务器验收JSON。目录受 root 保护;恢复前核实当前数据,不盲跑首发脚本。
紧急停止 HN:只停 hn-horizon、hn-fpm、hn-redis、hn-cert-renew.timer,保留数据库/配置/备份;如需撤销入口,将 hn.conf 恢复为该备份中的 HTTP-only 配置,nginx -t 后平滑 reload。不要重启/停止 DPL FPM、DPL Horizon、共享 MariaDB 或原 Redis。DNS 可按登记回滚 Namecheap BasicDNS,旧停放配置留作历史而不作业务恢复。
首发初始化曾因 Git 不跟踪 storage/app 空目录而中断;从守卫续跑点补齐目录后继续迁移,保留已生成密钥和独立数据库,没有重新初始化。HTTPS reload 后首次瞬时探测失败,复查及后续所有源站/公网 TLS 均通过;未因此放宽证书校验。
## 验收与业务范围
- 站点配置回归14测试/31断言、EZ配置测试1项、旧草稿测试7项及正式构建通过;合并后再验证,服务器依赖安装/构建和数据库迁移成功。
- 经白色机在服务器侧验证:主站/后台 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现为独立新站,没有套餐/订单/节点;邮件及辅助域名随后已配置并完成服务器侧收发/投递回调/订阅鉴权验收,详见 [HN_MAIL_GATEWAY](HN_MAIL_GATEWAY.md)。唯一受限订阅测试用户ID2已禁用、轮换令牌且无会话;支付及实际节点联网未配置/验收。