docs: record isolated HN production deployment and recovery
This commit is contained in:
parent
2e5cec6a05
commit
1477b56ba7
@ -1,5 +1,7 @@
|
||||
# 发布与恢复
|
||||
|
||||
HN 已于2026-10-27独立部署,主站 hardnerd.net、后台 admin.hardnerd.net;版本、服务、备份与验收唯一正文见 [HN_PRODUCTION](HN_PRODUCTION.md)。以下原生产描述属于 DPL,不能套用到 HN。
|
||||
|
||||
## 目标与连接
|
||||
|
||||
本项目生产站点为 https://dp-link.net,后台 /dove;后端目录 /www/wwwroot/dp-link.net,服务器逻辑名 site-jp02。通过既定白色跳板连接;项目与连接入口参见 [dpl 档案](/Users/hellcat/Documents/CoDocs/10-项目/dpl.md) 和 [私有资源索引](/Users/hellcat/Documents/CoDocs/30-私有资源/README.md),不把它们的内容提交到公开仓库。
|
||||
|
||||
41
docs/maintenance/HN_PRODUCTION.md
Normal file
41
docs/maintenance/HN_PRODUCTION.md
Normal file
@ -0,0 +1,41 @@
|
||||
# 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 的上线版本。后续只补本文档的提交以服务器 HEAD 为准。
|
||||
- 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`,续期后专用 deploy hook 检查并平滑 reload Nginx。Cloudflare 完整(严格)已保存并回读;先通过源站证书验证,再启用严格校验,没有降低 TLS 校验。
|
||||
|
||||
未建立新的白色机网站反代;本机不访问线上。服务器侧运维请求走已登记 SSH 路线。hardnerd.dev 与 hardnerd-nodes.com 的系统/订阅用途为既有用户指定,本次未配置,不用主站代替它们。
|
||||
|
||||
## 发布、权限与恢复
|
||||
|
||||
按 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.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现为独立新站,仅默认管理员,没有套餐/订单/节点;邮件当前log驱动、支付和辅助域名未配置,未测试真实付款/发信/订阅联网。业务运营配置不等于本次基础部署完成。
|
||||
@ -15,6 +15,7 @@
|
||||
|
||||
| 文件 | 用途 |
|
||||
| --- | --- |
|
||||
| HN_PRODUCTION.md | HN生产版本、主域名/后台、独立运行服务、TLS、服务器验收与回退 |
|
||||
| SITE_PROFILES.md | dpl / hn 独立部署参数、主题选择、开发与发布隔离 |
|
||||
| THEME_DESIGNS.md | tpl-a 等可复用设计方案、定稿与绑定状态、预览和验证边界 |
|
||||
| XBOARD_THEME_SURVEY.md | Xboard 生态主题一手来源、同名项目区别与本地库存范围 |
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# dpl / hn 独立实例与主题
|
||||
|
||||
2026-10-27 用户确定 hn 先使用 `EZ`。当前独立工作树的默认值与 `.env.hn.example` 已改为 EZ,旧 Hardnerd 功能草稿保留为显式选项;已批准的 `tpl-a` 继续独立保存、不绑定 hn,见 [THEME_DESIGNS](THEME_DESIGNS.md)。本次仅修改本地配置,未合入 dpl 主项目、未推送或部署。
|
||||
2026-10-27 用户确定 hn 先使用 `EZ`。当前独立工作树的默认值与 `.env.hn.example` 已改为 EZ,旧 Hardnerd 功能草稿保留为显式选项;已批准的 `tpl-a` 继续独立保存、不绑定 hn,见 [THEME_DESIGNS](THEME_DESIGNS.md)。2026-10-27 已独立部署 HN 到 sitejp02,主域名 hardnerd.net;DPL 未发布。当前生产和回退见 [HN_PRODUCTION](HN_PRODUCTION.md)。
|
||||
|
||||
## 配置与边界
|
||||
|
||||
@ -61,7 +61,7 @@ npm --prefix frontends run dev:hn
|
||||
|
||||
## 发布与恢复
|
||||
|
||||
本次未推送、未部署到服务器。以后发布按 Git:提交并推送共享版本,在指定 hn 服务器 checkout 更新明确提交,初始化锁定子模块、安装依赖并构建。版本升级前备份 hn 自己的数据库/配置;dpl 发布单独授权、单独验收。
|
||||
2026-10-27 HN 首发已按 Git 提交、推送并在 sitejp02 更新到明确提交;实际版本、独立服务、TLS、备份和服务器验收见 [HN_PRODUCTION](HN_PRODUCTION.md)。后续发布按 Git:提交并推送共享版本,在指定 hn 服务器 checkout 更新明确提交,初始化锁定子模块、安装依赖并构建。版本升级前备份 hn 自己的数据库/配置;dpl 发布单独授权、单独验收。
|
||||
|
||||
```bash
|
||||
git submodule update --init frontends/ez-theme
|
||||
|
||||
@ -2,6 +2,10 @@
|
||||
|
||||
文档核对日期:2026-10-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尚未部署。
|
||||
|
||||
## admin.hn.loc 本地后台入口(2026-10-27,已启用)
|
||||
|
||||
按用户要求新增独立后台域名admin.hn.loc,根路径内部映射现有管理应用,资源与API同源,双回环监听。浏览器登录页显示正常、无警告错误;管理HTML/8项资源200,真实管理员接口登录及权限200、访客403,仅撤销本次新增验收会话。hn.loc/dpl.loc回归200,原hn.loc配置未变;未改账号、认证或线上。备份与回退见 [SITE_PROFILES](SITE_PROFILES.md)。公告与商城须知为独立逻辑,代码核对结果也归入该正文,未发布测试公告。
|
||||
|
||||
Loading…
Reference in New Issue
Block a user