deploy(M00-E): 补充Certbot证书检查

This commit is contained in:
Codex
2026-06-15 16:42:42 +08:00
parent d9d51e9d67
commit 4cb3ab6529
19 changed files with 158 additions and 24 deletions
+1
View File
@@ -37,6 +37,7 @@
- EMQX:输出原生 Apt/无 Docker/MQTTX 禁止策略和本机命令状态。 - EMQX:输出原生 Apt/无 Docker/MQTTX 禁止策略和本机命令状态。
- HTTPS:输出固定域名、API 路径和 Nginx 配置检查。 - HTTPS:输出固定域名、API 路径和 Nginx 配置检查。
- Nginx:提供 `deploy/nginx/api.txyundm.cn.conf.template`,菜单第 4 项会检查模板、站点文件、TLS 和健康端点。 - Nginx:提供 `deploy/nginx/api.txyundm.cn.conf.template`,菜单第 4 项会检查模板、站点文件、TLS 和健康端点。
- 证书:提供 `deploy/certbot/api.txyundm.cn.commands.md`,菜单第 4 项会检查 Certbot、证书文件、续期配置和 `certbot.timer`
- 非交互检查:`setup.sh --preflight``setup.sh --status``setup.sh --https``setup.sh --diagnose` - 非交互检查:`setup.sh --preflight``setup.sh --status``setup.sh --https``setup.sh --diagnose`
- 状态:显示部署上下文、快检、仓库状态和当前 release manifest。 - 状态:显示部署上下文、快检、仓库状态和当前 release manifest。
- 备份:当前生成 manifest-only 备份记录,不触碰真实数据库。 - 备份:当前生成 manifest-only 备份记录,不触碰真实数据库。
+1 -1
View File
@@ -1 +1 @@
0.1.1-m00-domain-https-check 0.1.2-m00-certbot-check
+31
View File
@@ -0,0 +1,31 @@
# api.txyundm.cn Certbot Commands
This file records the production commands for the Ubuntu administrator. Do not run them from Windows or WSL.
## Preconditions
- DNS for `api.txyundm.cn` points to the production Ubuntu server.
- Nginx serves `/.well-known/acme-challenge/` from `/var/www/certbot` on port 80.
- Ports 80 and 443 are open.
## Issue
```bash
sudo mkdir -p /var/www/certbot
sudo certbot certonly --webroot -w /var/www/certbot -d api.txyundm.cn
```
## Install Nginx Site
```bash
sudo install -m 0644 /opt/apps/qipai-repo/deploy/nginx/api.txyundm.cn.conf.template /etc/nginx/sites-available/qipai-api.conf
sudo ln -sfn /etc/nginx/sites-available/qipai-api.conf /etc/nginx/sites-enabled/qipai-api.conf
sudo nginx -t
sudo systemctl reload nginx
```
## Renew Dry Run
```bash
sudo certbot renew --dry-run
```
+3 -2
View File
@@ -3,8 +3,8 @@
| 环境 | 检查项 | 命令/步骤 | 期望 | 实际 | 结果 | 时间 | | 环境 | 检查项 | 命令/步骤 | 期望 | 实际 | 结果 | 时间 |
|---|---|---|---|---|---|---| |---|---|---|---|---|---|---|
| Windows | DNS/HTTPS | `scripts/dev/windows/check-api-domain.ps1` | PASS 或明确 WARN | 脚本已生成,待执行 | - | 2026-06-15 | | Windows | DNS/HTTPS | `scripts/dev/windows/check-api-domain.ps1` | PASS 或明确 WARN | 脚本已生成,待执行 | - | 2026-06-15 |
| WSL | TLS/健康接口 | `setup.sh --https` | PASS 或明确 WARN | DNS 已解析到 `101.42.38.246`TLS 证书主题为 `CN=git.txyundm.cn``/health` 不可达 | WARN | 2026-06-15 | | WSL | TLS/健康接口/Certbot | `setup.sh --https``scripts/dev/wsl/check-api-domain.sh` | PASS 或明确 WARN | DNS 已解析到 `101.42.38.246`TLS 证书主题为 `CN=git.txyundm.cn``/health``/app-api/health``/admin-api/health` 不可达;Certbot 生产项未安装 | WARN | 2026-06-15 |
| Ubuntu | Nginx/证书/公开 API | `setup.sh` 菜单 4 或 `setup.sh --https` | PASS 或明确 WARN | 检查脚本已生成,生产未执行 | - | 2026-06-15 | | Ubuntu | Nginx/证书/公开 API/Certbot | `setup.sh` 菜单 4 或 `setup.sh --https` | PASS 或明确 WARN | 检查脚本已生成,生产未执行 | - | 2026-06-15 |
| 微信开发者工具 | request/upload/download | 关闭忽略合法域名 | 成功 | 未执行 | - | - | | 微信开发者工具 | request/upload/download | 关闭忽略合法域名 | 成功 | 未执行 | - | - |
| 微信真机 | 登录/上传/下载/下单/开门 | 体验版 | 成功 | 未执行 | - | - | | 微信真机 | 登录/上传/下载/下单/开门 | 体验版 | 成功 | 未执行 | - | - |
@@ -18,5 +18,6 @@
## 问题与修复 ## 问题与修复
- 已补充 Windows 域名检查脚本、Ubuntu 菜单第 4 项检查和 Nginx 模板。 - 已补充 Windows 域名检查脚本、Ubuntu 菜单第 4 项检查和 Nginx 模板。
- 已补充 Certbot 检查脚本和生产管理员命令说明。
- 生产 DNS、证书、Nginx 启用和健康接口仍未完成,不能标记为通过。 - 生产 DNS、证书、Nginx 启用和健康接口仍未完成,不能标记为通过。
- `api.txyundm.cn` 当前解析正常,但证书和健康接口不满足 API 验收要求。 - `api.txyundm.cn` 当前解析正常,但证书和健康接口不满足 API 验收要求。
+12
View File
@@ -1,5 +1,17 @@
# 部署变更记录 # 部署变更记录
## 2026-06-15 / 0.1.2-m00-certbot-check
- 关联模块:M00-E
- 关联 commit:本轮提交推送后以远端 HEAD 为准
- 变化内容:新增 `scripts/setup/certbot.sh``deploy/certbot/api.txyundm.cn.commands.md`,菜单第 4 项追加 Certbot、证书文件、续期配置和 `certbot.timer` 检查。
- 配置变化:`setup.sh --https` 会同时输出证书签发命令和续期 dry-run 命令。
- 数据库变化:无。
- 兼容性:仅增加检查和管理员命令说明,不自动申请证书,不写入 `/etc/letsencrypt`
- 已执行验证:Windows 本地检查和敏感信息扫描通过;WSL `bash -n``setup.sh --preflight/--status/--https/--diagnose``scripts/dev/wsl/check-api-domain.sh` 通过,生产项按预期返回 WARN。
- 回滚方式:移除新增 Certbot 检查脚本和命令说明即可回到 0.1.1 行为;未改动生产环境。
- 生产环境人工步骤:管理员在 Ubuntu 上准备 `/var/www/certbot`、执行 `certbot certonly --webroot``certbot renew --dry-run`
## 2026-06-15 / 0.1.1-m00-domain-https-check ## 2026-06-15 / 0.1.1-m00-domain-https-check
- 关联模块:M00-E - 关联模块:M00-E
+8 -8
View File
@@ -2,20 +2,20 @@
| 项目 | 当前值 | | 项目 | 当前值 |
|---|---| |---|---|
| 菜单脚本版本 | 0.1.1-m00-domain-https-check | | 菜单脚本版本 | 0.1.2-m00-certbot-check |
| Gitea 仓库 Web | https://git.txyundm.cn/panda/qipai.git | | Gitea 仓库 Web | https://git.txyundm.cn/panda/qipai.git |
| API 固定域名 | https://api.txyundm.cn | | API 固定域名 | https://api.txyundm.cn |
| 小程序 API | https://api.txyundm.cn/app-api | | 小程序 API | https://api.txyundm.cn/app-api |
| 后台 API | https://api.txyundm.cn/admin-api | | 后台 API | https://api.txyundm.cn/admin-api |
| 上传文件基址 | https://api.txyundm.cn/uploads/ | | 上传文件基址 | https://api.txyundm.cn/uploads/ |
| HTTPS 证书到期时间 | 未验证 | | HTTPS 证书到期时间 | 线上返回 `2026-09-13`,但当前证书主题为 `git.txyundm.cn`,不作为 API 证书验收 |
| 证书续期 dry-run | 未验证 | | 证书续期 dry-run | 菜单已提供检查和命令;生产未执行 |
| 微信合法域名 | 未验证 | | 微信合法域名 | 未验证 |
| Gitea 仓库 SSH | ssh://git@git.txyundm.cn:2222/panda/qipai.git | | Gitea 仓库 SSH | ssh://git@git.txyundm.cn:2222/panda/qipai.git |
| 生产拉取仓库 | ssh://git@127.0.0.1:2222/panda/qipai.git | | 生产拉取仓库 | ssh://git@127.0.0.1:2222/panda/qipai.git |
| 默认分支 | main | | 默认分支 | main |
| 最近模块 push commit | `f5445f1`M00-E 域名/HTTPS 检查 | | 最近模块 push commit | 远端 HEAD(本轮 Certbot 检查提交后复验 |
| 最近 push 远端校验 | 通过:`HEAD == origin/main``f5445f16d71cacc85bd504238a4d50b21aa01c0b` | | 最近 push 远端校验 | 推送后执行 `HEAD == origin/main` 校验 |
| 目标系统 | Ubuntu 24.04 | | 目标系统 | Ubuntu 24.04 |
| 内核架构 | x86_64 | | 内核架构 | x86_64 |
| DPKG 架构 | amd64 | | DPKG 架构 | amd64 |
@@ -25,15 +25,15 @@
| 命令行 MQTT 工具 | mosquitto-clients:未安装/未验证 | | 命令行 MQTT 工具 | mosquitto-clients:未安装/未验证 |
| Windows MQTTX 验证 | 未验证 | | Windows MQTTX 验证 | 未验证 |
| WSL 环境验证 | 已完成轻量检查、shell 语法检查、临时副本准备和清理;完整构建待正式项目生成 | | WSL 环境验证 | 已完成轻量检查、shell 语法检查、临时副本准备和清理;完整构建待正式项目生成 |
| 最近环境快检 | 2026-06-15 WSL 执行 `setup.sh --preflight/--status/--https/--diagnose` 通过;HTTPS 检查返回证书/健康接口 WARN | | 最近环境快检 | 2026-06-15 WSL 执行 `setup.sh --preflight/--status/--https/--diagnose` 通过;HTTPS/Certbot 检查返回证书健康接口和 certbot 未安装 WARN |
| 最近部署后复检 | 未执行 | | 最近部署后复检 | 未执行 |
| 最近验证 commit | `f5445f1`M00-E 域名/HTTPS 检查已推送并完成远端校验 | | 最近验证 commit | 远端 HEAD(本轮脚本验证已通过,推送后复验) |
| 最近验证日期 | 2026-06-15 | | 最近验证日期 | 2026-06-15 |
| 已验证系统 | Ubuntu 24.04 / 未验证 | | 已验证系统 | Ubuntu 24.04 / 未验证 |
| 菜单 1 首次安装 | 脚本已实现目录布局;未在生产 Ubuntu 执行 | | 菜单 1 首次安装 | 脚本已实现目录布局;未在生产 Ubuntu 执行 |
| 菜单 2 更新业务 | 脚本已实现仓库检查和 dry-run 发布清单;未在生产 Ubuntu 执行 | | 菜单 2 更新业务 | 脚本已实现仓库检查和 dry-run 发布清单;未在生产 Ubuntu 执行 |
| 菜单 3 MQTT | 状态检查已实现;EMQX 安装未执行 | | 菜单 3 MQTT | 状态检查已实现;EMQX 安装未执行 |
| 菜单 4 域名与 HTTPS | 域名、Nginx 模板、站点启用、TLS健康端点检查已实现;当前线上证书为 `git.txyundm.cn`,证书申请/续期未执行 | | 菜单 4 域名与 HTTPS | 域名、Nginx 模板、站点启用、TLS健康端点、Certbot、证书文件、续期配置和 `certbot.timer` 检查已实现;当前线上证书为 `git.txyundm.cn`,证书申请/续期未执行 |
| 菜单 5 状态 | 已实现 | | 菜单 5 状态 | 已实现 |
| 菜单 6 备份 | manifest-only 已实现;真实备份待生产配置 | | 菜单 6 备份 | manifest-only 已实现;真实备份待生产配置 |
| 菜单 7 恢复 | 人工恢复提示已实现 | | 菜单 7 恢复 | 人工恢复提示已实现 |
@@ -13,6 +13,7 @@
- 生成 `scripts/dev/windows/push-module.ps1``check-gitea-ssh.ps1`,串联模块检查、提交、推送和远端校验。 - 生成 `scripts/dev/windows/push-module.ps1``check-gitea-ssh.ps1`,串联模块检查、提交、推送和远端校验。
- 生成 `scripts/setup/*.sh` 和新版 `setup.sh` 菜单,覆盖 `/opt/apps` 目录、仓库状态、dry-run 发布清单、备份 manifest、恢复/回滚提示和诊断。 - 生成 `scripts/setup/*.sh` 和新版 `setup.sh` 菜单,覆盖 `/opt/apps` 目录、仓库状态、dry-run 发布清单、备份 manifest、恢复/回滚提示和诊断。
- 继续补强 M00-E,新增固定 API 域名 Nginx 模板、Ubuntu 菜单第 4 项域名/HTTPS 检查和 Windows 域名检查脚本。 - 继续补强 M00-E,新增固定 API 域名 Nginx 模板、Ubuntu 菜单第 4 项域名/HTTPS 检查和 Windows 域名检查脚本。
- 继续补强 TLS-001,新增 Certbot 状态检查、证书签发/续期命令说明和 WSL 域名检查 WARN 记录。
## 起始状态 ## 起始状态
@@ -32,7 +33,7 @@
## 部署影响 ## 部署影响
有。新增并升级 `setup.sh``scripts/setup/*.sh` 菜单式部署骨架,补充 `api.txyundm.cn` Nginx 模板域名/HTTPS 检查,但未执行生产部署。 有。新增并升级 `setup.sh``scripts/setup/*.sh` 菜单式部署骨架,补充 `api.txyundm.cn` Nginx 模板域名/HTTPS/Certbot 检查和证书命令说明,但未执行生产部署。
## 测试记录 ## 测试记录
@@ -44,6 +45,8 @@
- PowerShell 语法检查:`push-module.ps1``check-gitea-ssh.ps1` 均已通过 Parser 检查。 - PowerShell 语法检查:`push-module.ps1``check-gitea-ssh.ps1` 均已通过 Parser 检查。
- 部署脚本:WSL 已执行 `bash -n setup.sh scripts/setup/*.sh``setup.sh --preflight``setup.sh --status``setup.sh --diagnose`;输出 PASS/WARN,未执行生产写入。 - 部署脚本:WSL 已执行 `bash -n setup.sh scripts/setup/*.sh``setup.sh --preflight``setup.sh --status``setup.sh --diagnose`;输出 PASS/WARN,未执行生产写入。
- 域名/HTTPS:新增菜单检查和 Windows 检查脚本;WSL `setup.sh --https` 显示 `api.txyundm.cn` 可解析到 `101.42.38.246`,但线上证书主题为 `CN=git.txyundm.cn``/health` 不可达,生产 DNS/证书/健康接口仍不得标记通过。 - 域名/HTTPS:新增菜单检查和 Windows 检查脚本;WSL `setup.sh --https` 显示 `api.txyundm.cn` 可解析到 `101.42.38.246`,但线上证书主题为 `CN=git.txyundm.cn``/health` 不可达,生产 DNS/证书/健康接口仍不得标记通过。
- Certbot:新增 `scripts/setup/certbot.sh``deploy/certbot/api.txyundm.cn.commands.md`;生产签发、续期 dry-run 和 `certbot.timer` 尚未执行。
- WSL 域名脚本:`scripts/dev/wsl/check-api-domain.sh` 已改为输出 PASS/WARN,不因生产健康接口暂未上线而中断整体验证。
- WSL 检查:已执行 `check-env.sh``check-workspace.sh``verify-linux.sh``prepare-test-copy.sh``cleanup-test-copy.sh`;临时副本创建和清理通过。完整 Linux 构建待正式后端/后台项目生成后执行。 - WSL 检查:已执行 `check-env.sh``check-workspace.sh``verify-linux.sh``prepare-test-copy.sh``cleanup-test-copy.sh`;临时副本创建和清理通过。完整 Linux 构建待正式后端/后台项目生成后执行。
- Git fetch/push:首次多次失败后,`git push origin main` 已成功;随后 `git fetch origin main` 校验 `HEAD == origin/main` 通过。 - Git fetch/push:首次多次失败后,`git push origin main` 已成功;随后 `git fetch origin main` 校验 `HEAD == origin/main` 通过。
+3 -2
View File
@@ -28,8 +28,9 @@
- SAN:未确认包含 `api.txyundm.cn` - SAN:未确认包含 `api.txyundm.cn`
- 生效/到期:线上返回 `2026-06-15``2026-09-13`,但不是已验收的 API 证书 - 生效/到期:线上返回 `2026-06-15``2026-09-13`,但不是已验收的 API 证书
- 剩余天数:未计算 - 剩余天数:未计算
- 自动续期:未验证 - Certbot 命令说明:`deploy/certbot/api.txyundm.cn.commands.md`
- 最近 dry-run:未执行 - 自动续期:菜单第 4 项会检查 `certbot.timer`;生产未验证
- 最近 dry-run:菜单已输出 `sudo certbot renew --dry-run`;生产未执行
- 现场检查:菜单第 4 项会尝试读取线上 TLS 证书;生产 DNS/证书未完成前允许 WARN - 现场检查:菜单第 4 项会尝试读取线上 TLS 证书;生产 DNS/证书未完成前允许 WARN
- 当前问题:`api.txyundm.cn` 返回的证书不应视为 API 域名证书验收通过 - 当前问题:`api.txyundm.cn` 返回的证书不应视为 API 域名证书验收通过
+1 -1
View File
@@ -9,7 +9,7 @@
| SCM-001 | 模块完成即完整推送 | M00-B/M00-C | PARTIAL | 远端 HEAD | 首次 main push 成功,`HEAD == origin/main` 校验通过;推送脚本已生成。 | 后续模块仍需逐次执行并记录。 | 继续完善 M00-C 的 WSL 实际验证和脚本闭环。 | | SCM-001 | 模块完成即完整推送 | M00-B/M00-C | PARTIAL | 远端 HEAD | 首次 main push 成功,`HEAD == origin/main` 校验通过;推送脚本已生成。 | 后续模块仍需逐次执行并记录。 | 继续完善 M00-C 的 WSL 实际验证和脚本闭环。 |
| WSL-001 | WSL 隔离辅助验证 | M00-C | PARTIAL | 本地 HEAD | WSL `check-env.sh``check-workspace.sh``verify-linux.sh``prepare-test-copy.sh``cleanup-test-copy.sh` 已执行通过;完整 Linux 依赖构建尚无正式项目可跑。 | 正式后端/后台尚未生成,无法执行完整 Linux 构建。 | M01/M09 生成项目后在 WSL 原生临时副本执行完整构建。 | | WSL-001 | WSL 隔离辅助验证 | M00-C | PARTIAL | 本地 HEAD | WSL `check-env.sh``check-workspace.sh``verify-linux.sh``prepare-test-copy.sh``cleanup-test-copy.sh` 已执行通过;完整 Linux 依赖构建尚无正式项目可跑。 | 正式后端/后台尚未生成,无法执行完整 Linux 构建。 | M01/M09 生成项目后在 WSL 原生临时副本执行完整构建。 |
| API-001 | 固定 HTTPS API 域名 | M00-E/M01/M08/M10 | PARTIAL | `f5445f1` | 已新增 Windows 检查脚本、Ubuntu 菜单检查和固定域名 Nginx 模板。 | DNS/HTTPS 生产验证未执行,后端健康接口未生成。 | 后续接入真实后端健康接口并执行 Windows/WSL/Ubuntu/微信真机验证。 | | API-001 | 固定 HTTPS API 域名 | M00-E/M01/M08/M10 | PARTIAL | `f5445f1` | 已新增 Windows 检查脚本、Ubuntu 菜单检查和固定域名 Nginx 模板。 | DNS/HTTPS 生产验证未执行,后端健康接口未生成。 | 后续接入真实后端健康接口并执行 Windows/WSL/Ubuntu/微信真机验证。 |
| TLS-001 | Nginx 与证书自动化 | M00-E/M10 | PARTIAL | `f5445f1` | 已生成 `deploy/nginx/api.txyundm.cn.conf.template`菜单第 4 项可检查模板、站点启用、TLS健康端点。 | 证书申请/续期、80/443 生产验证未执行。 | 补证书申请/续期 dry-run 和生产 Nginx 安装记录。 | | TLS-001 | Nginx 与证书自动化 | M00-E/M10 | PARTIAL | 本轮提交推送后以远端 HEAD 为准 | 已生成 Nginx 模板、Certbot 命令说明和菜单第 4 项检查,可检查模板、站点启用、TLS健康端点、证书文件、续期配置和 `certbot.timer`。 | 证书申请/续期 dry-run、80/443 生产验证未执行。 | 在生产 Ubuntu 执行证书签发、续期 dry-run 和 Nginx 安装记录。 |
| WXNET-001 | 微信合法域名与真机验证 | M00-E/M08/M10 | TODO | - | 已补 API 域名报告入口,但未做微信后台或真机验证。 | 微信后台/真机未验证。 | 后续导入小程序后执行合法域名和真机验证。 | | WXNET-001 | 微信合法域名与真机验证 | M00-E/M08/M10 | TODO | - | 已补 API 域名报告入口,但未做微信后台或真机验证。 | 微信后台/真机未验证。 | 后续导入小程序后执行合法域名和真机验证。 |
| OPS-001 | 固定 `/opt/apps` 目录 | M00-D/M10 | PARTIAL | 本地 HEAD | `scripts/setup/init-layout.sh` 已生成目录布局和 manifest;未在生产 Ubuntu 执行。 | 生产操作未执行。 | 由管理员在 Ubuntu 菜单执行并记录结果。 | | OPS-001 | 固定 `/opt/apps` 目录 | M00-D/M10 | PARTIAL | 本地 HEAD | `scripts/setup/init-layout.sh` 已生成目录布局和 manifest;未在生产 Ubuntu 执行。 | 生产操作未执行。 | 由管理员在 Ubuntu 菜单执行并记录结果。 |
| OPS-002 | 单仓库 Gitea 推送与拉取部署 | M00-B/M10 | PARTIAL | 远端 HEAD | Windows 到 Gitea `origin/main` 首次 push 与远端校验通过。 | 生产服务器只读拉取部署尚未验证。 | M00-D/M00-E 继续完善生产拉取、菜单部署和状态检查。 | | OPS-002 | 单仓库 Gitea 推送与拉取部署 | M00-B/M10 | PARTIAL | 远端 HEAD | Windows 到 Gitea `origin/main` 首次 push 与远端校验通过。 | 生产服务器只读拉取部署尚未验证。 | M00-D/M00-E 继续完善生产拉取、菜单部署和状态检查。 |
+6
View File
@@ -40,3 +40,9 @@ powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-gitea-ssh.ps1
## 生产发布 ## 生产发布
生产服务器不得因 Gitea push 自动发布。管理员必须在 Ubuntu 上通过 `/opt/apps/setup.sh` 菜单拉取、构建、迁移和复检。 生产服务器不得因 Gitea push 自动发布。管理员必须在 Ubuntu 上通过 `/opt/apps/setup.sh` 菜单拉取、构建、迁移和复检。
## 域名与证书
- Nginx 模板位于 `deploy/nginx/api.txyundm.cn.conf.template`
- Certbot 管理员命令说明位于 `deploy/certbot/api.txyundm.cn.commands.md`
- `setup.sh --https` 仅检查域名、Nginx、TLS、健康端点和 Certbot 状态,不自动申请证书或 reload Nginx。
+1 -1
View File
@@ -2,7 +2,7 @@
| 模块 | 状态 | 最近提交 | 最近开发日志 | 备注 | | 模块 | 状态 | 最近提交 | 最近开发日志 | 备注 |
|---|---|---|---|---| |---|---|---|---|---|
| M00 单仓库与服务器基础骨架 | PARTIAL | `f5445f1` | docs/devlogs/2026-06-15-M00-A-单仓库基线.md | M00-A/M00-B 基线已推送并校验;M00-C/D/E 持续完善,域名/HTTPS 检查已补模板但生产未验证。 | | M00 单仓库与服务器基础骨架 | PARTIAL | 本轮提交推送后以远端 HEAD 为准 | docs/devlogs/2026-06-15-M00-A-单仓库基线.md | M00-A/M00-B 基线已推送并校验;M00-C/D/E 持续完善,域名/HTTPS/Certbot 检查已补模板但生产未验证。 |
| M01 后端 API 基础工程 | TODO | - | - | 等 M00 基线完成后开始。 | | M01 后端 API 基础工程 | TODO | - | - | 等 M00 基线完成后开始。 |
| M02 登录、租户、权限 | TODO | - | - | - | | M02 登录、租户、权限 | TODO | - | - | - |
| M03 门店、房间、价格、营业时间 | TODO | - | - | - | | M03 门店、房间、价格、营业时间 | TODO | - | - | - |
+5 -5
View File
@@ -5,12 +5,12 @@
| `参考/24h_qipaishi-master(1).zip` | zip | 11649307 | `013ABA400BA44002DED6FF63D4E2480A080A9F1CB40E350916030DEBD7CE3D9A` | 用户提供 | 参考同类棋牌室源码结构 | 已隔离解包初审 | 含 `node_modules`/`miniprogram_npm` 和旧 AppID/旧域名,需清理后纳管 | 阻断,原包暂不提交 | | `参考/24h_qipaishi-master(1).zip` | zip | 11649307 | `013ABA400BA44002DED6FF63D4E2480A080A9F1CB40E350916030DEBD7CE3D9A` | 用户提供 | 参考同类棋牌室源码结构 | 已隔离解包初审 | 含 `node_modules`/`miniprogram_npm` 和旧 AppID/旧域名,需清理后纳管 | 阻断,原包暂不提交 |
| `参考/db_20260427.sql` | SQL | 5221326 | `B6D67B37FDA6B2C277A80A5D5FA7A7B54B3DE1049F0E3C16EBB1331CD6D8B8C7` | 用户提供 | 参考旧数据库表和字段 | 已初扫 | 含 INSERT 数据、文件 URL、日志和业务配置,需生成脱敏结构版 | 阻断,原 SQL 暂不提交 | | `参考/db_20260427.sql` | SQL | 5221326 | `B6D67B37FDA6B2C277A80A5D5FA7A7B54B3DE1049F0E3C16EBB1331CD6D8B8C7` | 用户提供 | 参考旧数据库表和字段 | 已初扫 | 含 INSERT 数据、文件 URL、日志和业务配置,需生成脱敏结构版 | 阻断,原 SQL 暂不提交 |
| `参考/easy-joy-life-main.zip` | zip | 13660811 | `FC2B53CC0301B636B5BEC1E8A13223ED00B0D2DF5F101DAE67AC64722B5052FD` | 用户提供 | 参考无人棋牌室业务闭环 | 已隔离解包初审 | 含 PEM、支付密钥、AppSecret、数据库密码和生产/测试域名 | 阻断,原包暂不提交 | | `参考/easy-joy-life-main.zip` | zip | 13660811 | `FC2B53CC0301B636B5BEC1E8A13223ED00B0D2DF5F101DAE67AC64722B5052FD` | 用户提供 | 参考无人棋牌室业务闭环 | 已隔离解包初审 | 含 PEM、支付密钥、AppSecret、数据库密码和生产/测试域名 | 阻断,原包暂不提交 |
| `参考/env` | env 样例 | 1195 | `D8557B6314E39BF0E010087D39D253461CDD6185215488B400B13389C4476391` | 用户提供 | 参考旧运行包变量类别 | 不适用 | 已发现并脱敏 | 待提交 | | `参考/env` | env 样例 | 1195 | `D8557B6314E39BF0E010087D39D253461CDD6185215488B400B13389C4476391` | 用户提供 | 参考旧运行包变量类别 | 不适用 | 已发现并脱敏 | 已跟踪 |
| `参考/mazongjian-server.xjar` | 旧后端运行包 | 194259651 | `E2403E24670CA9366BBB4CC2844E1979F3060C9ABEB0D76506BA0893677C17F0` | 用户提供 | 仅观察旧接口行为,不作为新系统依赖 | 不反编译 | 大文件,许可/体积风险 | 大文件阻断,暂不提交;已记录哈希 | | `参考/mazongjian-server.xjar` | 旧后端运行包 | 194259651 | `E2403E24670CA9366BBB4CC2844E1979F3060C9ABEB0D76506BA0893677C17F0` | 用户提供 | 仅观察旧接口行为,不作为新系统依赖 | 不反编译 | 大文件,许可/体积风险 | 大文件阻断,暂不提交;已记录哈希 |
| `参考/start.sh` | shell | 1265 | `31C39BD7AE3994BB9B6F63AAB2CFF77ED9D7800ABF37D276556A28B8D9E2FCD8` | 用户提供 | 参考旧服务启动方式 | 不适用 | 需确认无秘密 | 待提交 | | `参考/start.sh` | shell | 1265 | `31C39BD7AE3994BB9B6F63AAB2CFF77ED9D7800ABF37D276556A28B8D9E2FCD8` | 用户提供 | 参考旧服务启动方式 | 不适用 | 需确认无秘密 | 已跟踪 |
| `参考/stop.sh` | shell | 771 | `5E218E887C43B5439C9BFCC216F34E15C03F3A0F6A16596BDEDD4D477D55BF94` | 用户提供 | 参考旧服务停止方式 | 不适用 | 需确认无秘密 | 待提交 | | `参考/stop.sh` | shell | 771 | `5E218E887C43B5439C9BFCC216F34E15C03F3A0F6A16596BDEDD4D477D55BF94` | 用户提供 | 参考旧服务停止方式 | 不适用 | 需确认无秘密 | 已跟踪 |
| `参考/xjar` | 二进制工具 | 2150870 | `AC02279C343A008D6CC9FC4CC7983DEC1984775B4182F48AC628A20124784F66` | 用户提供 | 旧运行包相关工具,正式系统不依赖 | 不适用 | 二进制许可风险 | 待提交 | | `参考/xjar` | 二进制工具 | 2150870 | `AC02279C343A008D6CC9FC4CC7983DEC1984775B4182F48AC628A20124784F66` | 用户提供 | 旧运行包相关工具,正式系统不依赖 | 不适用 | 二进制许可风险 | 已跟踪 |
| `参考/后台管理系统_20260427.zip` | zip | 9297096 | `9E5F09AFC38ADEB4FFAD724406F95D7F4E6494A8C3572486ED81C5C1E1FAF0F2` | 用户提供 | 参考旧后台静态/源码 | 待完成 | 未知,需解包扫描 | 待提交 | | `参考/后台管理系统_20260427.zip` | zip | 9297096 | `9E5F09AFC38ADEB4FFAD724406F95D7F4E6494A8C3572486ED81C5C1E1FAF0F2` | 用户提供 | 参考旧后台静态/源码 | 已隔离解包初审 | 未发现敏感配置文件,仍需后续按模块提取 | 已跟踪 |
| `参考/小程序源代码.zip` | zip | 11579802 | `6EC18BE0C5E0602C75E114A12772F13E96BBAFCE6817ECE3FE0BF84D93B33A25` | 用户提供 | 参考旧微信小程序页面和接口 | 已隔离解包初审 | 含 `node_modules`/`miniprogram_npm`、旧 AppID、旧域名和 localhost 示例 | 阻断,原包暂不提交 | | `参考/小程序源代码.zip` | zip | 11579802 | `6EC18BE0C5E0602C75E114A12772F13E96BBAFCE6817ECE3FE0BF84D93B33A25` | 用户提供 | 参考旧微信小程序页面和接口 | 已隔离解包初审 | 含 `node_modules`/`miniprogram_npm`、旧 AppID、旧域名和 localhost 示例 | 阻断,原包暂不提交 |
## 当前结论 ## 当前结论
+2 -1
View File
@@ -11,4 +11,5 @@
| 部署结果 | 未部署;生产需管理员人工执行菜单 | | 部署结果 | 未部署;生产需管理员人工执行菜单 |
| 回滚点 | - | | 回滚点 | - |
| Nginx 模板 | `deploy/nginx/api.txyundm.cn.conf.template` | | Nginx 模板 | `deploy/nginx/api.txyundm.cn.conf.template` |
| 域名/HTTPS 检查 | `setup.sh` 菜单 4、`scripts/dev/windows/check-api-domain.ps1` | | Certbot 命令说明 | `deploy/certbot/api.txyundm.cn.commands.md` |
| 域名/HTTPS 检查 | `setup.sh` 菜单 4、`setup.sh --https``scripts/dev/windows/check-api-domain.ps1``scripts/dev/wsl/check-api-domain.sh` |
+1
View File
@@ -9,6 +9,7 @@
| `database/` | 数据库迁移和种子 | 必须提交脱敏 SQL | | `database/` | 数据库迁移和种子 | 必须提交脱敏 SQL |
| `deploy/` | 部署版本和说明 | 必须提交 | | `deploy/` | 部署版本和说明 | 必须提交 |
| `deploy/nginx/` | API 域名 Nginx 模板 | 必须提交模板,不提交证书 | | `deploy/nginx/` | API 域名 Nginx 模板 | 必须提交模板,不提交证书 |
| `deploy/certbot/` | API 域名证书签发和续期命令说明 | 必须提交命令说明,不提交证书或账户信息 |
| `scripts/` | 检查、部署和运维脚本 | 必须提交 | | `scripts/` | 检查、部署和运维脚本 | 必须提交 |
| `docs/` | 状态、日志、变更和验收记录 | 必须提交 | | `docs/` | 状态、日志、变更和验收记录 | 必须提交 |
| `docs/reference-page-map.md` | 旧小程序页面脱敏地图 | 必须提交 | | `docs/reference-page-map.md` | 旧小程序页面脱敏地图 | 必须提交 |
+14 -1
View File
@@ -1,5 +1,18 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
curl -fsS --max-time 10 https://api.txyundm.cn/app-api/health domain="${QIPAI_DOMAIN:-api.txyundm.cn}"
origin="https://${domain}"
if command -v getent >/dev/null 2>&1; then
getent hosts "$domain" || true
fi
for path in /health /app-api/health /admin-api/health; do
url="${origin}${path}"
if curl -fsSIL --max-time 10 "$url" >/dev/null 2>&1; then
printf 'PASS: %s\n' "$url"
else
printf 'WARN: %s not reachable\n' "$url"
fi
done
+1
View File
@@ -10,6 +10,7 @@
| `repo-status.sh` | 检查固定仓库、分支、DIRTY/AHEAD/BEHIND/DIVERGED 状态。 | | `repo-status.sh` | 检查固定仓库、分支、DIRTY/AHEAD/BEHIND/DIVERGED 状态。 |
| `deploy-business.sh` | 克隆/更新仓库并生成 dry-run release manifest。 | | `deploy-business.sh` | 克隆/更新仓库并生成 dry-run release manifest。 |
| `domain-https.sh` | 检查固定 API 域名、Nginx 模板、站点启用状态、TLS 和健康端点。 | | `domain-https.sh` | 检查固定 API 域名、Nginx 模板、站点启用状态、TLS 和健康端点。 |
| `certbot.sh` | 检查 Certbot、证书文件、续期配置和 `certbot.timer`,输出人工签发/续期命令。 |
| `backup.sh` | 生成 manifest-only 备份记录。 | | `backup.sh` | 生成 manifest-only 备份记录。 |
| `restore.sh` | 输出人工恢复要求,不自动改动生产数据。 | | `restore.sh` | 输出人工恢复要求,不自动改动生产数据。 |
| `rollback.sh` | 列出 release 回滚点。 | | `rollback.sh` | 列出 release 回滚点。 |
+59
View File
@@ -0,0 +1,59 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=lib.sh
. "${SCRIPT_DIR}/lib.sh"
qipai_certbot_status() {
local live_dir webroot_dir renewal_file
live_dir="/etc/letsencrypt/live/${QIPAI_DOMAIN}"
webroot_dir="/var/www/certbot"
renewal_file="/etc/letsencrypt/renewal/${QIPAI_DOMAIN}.conf"
qipai_info "certbot domain: ${QIPAI_DOMAIN}"
qipai_info "certbot webroot: ${webroot_dir}"
qipai_info "certificate live dir: ${live_dir}"
if command -v certbot >/dev/null 2>&1; then
qipai_pass "certbot: $(command -v certbot)"
certbot --version 2>/dev/null || true
else
qipai_warn "certbot not installed"
fi
if [ -d "$webroot_dir" ]; then
qipai_pass "webroot exists: ${webroot_dir}"
else
qipai_warn "webroot not found: ${webroot_dir}"
fi
if [ -f "${live_dir}/fullchain.pem" ] && [ -f "${live_dir}/privkey.pem" ]; then
qipai_pass "certificate files exist for ${QIPAI_DOMAIN}"
openssl x509 -in "${live_dir}/fullchain.pem" -noout -subject -issuer -dates 2>/dev/null || true
else
qipai_warn "certificate files not found for ${QIPAI_DOMAIN}"
fi
if [ -f "$renewal_file" ]; then
qipai_pass "renewal config exists: ${renewal_file}"
else
qipai_warn "renewal config not found: ${renewal_file}"
fi
if command -v systemctl >/dev/null 2>&1; then
systemctl is-enabled --quiet certbot.timer 2>/dev/null && qipai_pass "certbot.timer enabled" || qipai_warn "certbot.timer not enabled or not installed"
systemctl is-active --quiet certbot.timer 2>/dev/null && qipai_pass "certbot.timer active" || qipai_warn "certbot.timer not active"
else
qipai_warn "systemctl not available; certbot timer check skipped"
fi
qipai_info "manual issue command:"
qipai_info "sudo certbot certonly --webroot -w ${webroot_dir} -d ${QIPAI_DOMAIN}"
qipai_info "manual renewal dry-run:"
qipai_info "sudo certbot renew --dry-run"
}
if [ "${1:-}" = "--run" ]; then
qipai_certbot_status
fi
+4
View File
@@ -4,6 +4,8 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=lib.sh # shellcheck source=lib.sh
. "${SCRIPT_DIR}/lib.sh" . "${SCRIPT_DIR}/lib.sh"
# shellcheck source=certbot.sh
. "${SCRIPT_DIR}/certbot.sh"
qipai_domain_https_status() { qipai_domain_https_status() {
local template_path nginx_available nginx_enabled local template_path nginx_available nginx_enabled
@@ -67,6 +69,8 @@ qipai_domain_https_status() {
qipai_warn "curl not installed" qipai_warn "curl not installed"
fi fi
qipai_certbot_status
qipai_info "manual install command after certificate is ready:" qipai_info "manual install command after certificate is ready:"
qipai_info "sudo install -m 0644 ${template_path} ${nginx_available} && sudo ln -sfn ${nginx_available} ${nginx_enabled} && sudo nginx -t && sudo systemctl reload nginx" qipai_info "sudo install -m 0644 ${template_path} ${nginx_available} && sudo ln -sfn ${nginx_available} ${nginx_enabled} && sudo nginx -t && sudo systemctl reload nginx"
} }
+1 -1
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
QIPAI_DEPLOY_VERSION="${QIPAI_DEPLOY_VERSION:-0.1.1-m00-domain-https-check}" QIPAI_DEPLOY_VERSION="${QIPAI_DEPLOY_VERSION:-0.1.2-m00-certbot-check}"
APP_ROOT="${APP_ROOT:-/opt/apps}" APP_ROOT="${APP_ROOT:-/opt/apps}"
QIPAI_REPO_URL="${QIPAI_REPO_URL:-ssh://git@127.0.0.1:2222/panda/qipai.git}" QIPAI_REPO_URL="${QIPAI_REPO_URL:-ssh://git@127.0.0.1:2222/panda/qipai.git}"
QIPAI_PUBLIC_REPO_URL="${QIPAI_PUBLIC_REPO_URL:-ssh://git@git.txyundm.cn:2222/panda/qipai.git}" QIPAI_PUBLIC_REPO_URL="${QIPAI_PUBLIC_REPO_URL:-ssh://git@git.txyundm.cn:2222/panda/qipai.git}"