|
|
@@ -0,0 +1,75 @@
|
|
|
+# 小树旧系统同步桥:托管方代部署工单
|
|
|
+
|
|
|
+请在现有小树旧站上部署独立、只读的数据同步桥,并按下列条件验收。旧站仍有客户使用,请保留现有网站与数据库业务数据。
|
|
|
+
|
|
|
+## 目标和已知现场情况
|
|
|
+
|
|
|
+- 目标地址:`https://a018.2018.z01.com/xiaoshu-sync/v1/health`。
|
|
|
+- 2026-10-11 23:02(北京时间)实测:同步桥 HTTP 404;新系统返回 configured=false、bridgeReachable=false,所有数据集无同步成功检查点。
|
|
|
+- 旧站首页可访问。需要在服务器端核查实际 IIS 站点、域名绑定、`/xiaoshu-sync` 子应用及 IIS 日志子状态,确认是否未部署或映射错误。
|
|
|
+- 旧数据库此前核验为 `zatu2024`,SQL Server 2016 / 13.0.5026.0,服务器名 SZ02;部署时请再次确认,不得误连其他网站数据库。
|
|
|
+- 网站 CMS 管理账号不具备现成 IIS 发布能力,不能用模板编辑或静态站点发布替代本次安装。
|
|
|
+
|
|
|
+## 交付包
|
|
|
+
|
|
|
+交付压缩包中 `bridge/xiaoshu-legacy-sync-bridge-iis.zip` 为 Windows x64 自包含发布。请先把它展开到独立安装目录,例如 `C:\deploy\xiaoshu-legacy-sync`,以下命令均从该目录执行。
|
|
|
+
|
|
|
+桥包 SHA-256:`d1e2b65f9c81a5f7e0a2c4855a8bea2380361e11f929ca4111a79efe74cab7b9`。
|
|
|
+
|
|
|
+桥包包含 runtime、安装/测试/回滚脚本、SQL 安装及核验脚本、配置模板和 README;不包含正式密钥和连接串。三个部署脚本已与当前源码逐字比对,包内没有 appsettings.Production.json。
|
|
|
+
|
|
|
+## 部署前需填写的参数
|
|
|
+
|
|
|
+| 参数 | 负责方与要求 |
|
|
|
+| --- | --- |
|
|
|
+| 实际 IIS SiteName | 旧站托管方确认绑定 a018.2018.z01.com 的站点名称,不能直接默认 Default Web Site |
|
|
|
+| SQL 连接串 | 旧站托管方提供具备必要读取权限的专用连接;DDL 安装另用有权限的账号,不在工单回执中回传密码 |
|
|
|
+| HMAC KeyId / Secret | 部署管理员生成新的 KeyId 与至少 32 位随机 Secret,通过双方约定的安全渠道交给新系统管理员 |
|
|
|
+| AllowedIps | 新系统管理员提供真实服务器出口 IP;DNS 的入站 IP 或开发电脑 IP 不等于实际出口 IP |
|
|
|
+| 独立应用池和目录 | 建议 XiaoshuLegacySync、C:\inetpub\xiaoshu-sync;不得与旧站根应用共用应用池 |
|
|
|
+
|
|
|
+缺少其中任何一项时请明确回报缺项,不得用空配置或开放任意来源的方式代替。若当前托管套餐不支持独立 IIS 子应用,请先回报限制及可提供的独立服务/受控反向代理方案,不要只上传文件后宣布完成。
|
|
|
+
|
|
|
+## 旧站托管方操作
|
|
|
+
|
|
|
+1. 备份 IIS 配置、现有同名同步桥应用(若有)及目标数据库。记录备份路径和时间。确认 IIS 具备 AspNetCoreModuleV2;桥为自包含发布,不要求安装 .NET 8 Runtime,但需要这个 IIS 模块。
|
|
|
+2. 将 `deployment/appsettings.Production.template.json` 复制到 `C:\secure\xiaoshu-sync.production.json`,安全填写上述参数。PathBase 保持 `/xiaoshu-sync`;不填占位值,不将配置打包回传。
|
|
|
+3. 在管理员 Windows PowerShell 中确认实际站点、域名绑定并预检:
|
|
|
+
|
|
|
+ ```powershell
|
|
|
+ Import-Module WebAdministration
|
|
|
+ Get-Website | Select-Object Name, State, PhysicalPath
|
|
|
+ Get-WebBinding | Select-Object ItemXPath, Protocol, BindingInformation
|
|
|
+ $targetSite = Read-Host '绑定 a018.2018.z01.com 的实际 IIS 站点名称'
|
|
|
+ .\deployment\Install-XiaoshuLegacySyncBridge.ps1 -PublishPath . -ConfigurationPath C:\secure\xiaoshu-sync.production.json -SiteName $targetSite -HealthUrl https://a018.2018.z01.com/xiaoshu-sync/v1/health -PreflightOnly
|
|
|
+ ```
|
|
|
+
|
|
|
+4. 预检通过后安装独立应用,先确认外部健康地址能返回本桥服务身份。健康接口本身不依赖 SQL 同步表:
|
|
|
+
|
|
|
+ ```powershell
|
|
|
+ .\deployment\Install-XiaoshuLegacySyncBridge.ps1 -PublishPath . -ConfigurationPath C:\secure\xiaoshu-sync.production.json -SiteName $targetSite -HealthUrl https://a018.2018.z01.com/xiaoshu-sync/v1/health
|
|
|
+ ```
|
|
|
+
|
|
|
+5. 与新系统管理员确认消费端、凭据和后续部署准备好后,在确认过的旧库执行 `database/install.sql`,再执行 `database/verify-readonly.sql`。SQL 脚本是多个 GO 分隔的批次,应使用 SSMS/sqlcmd 的正常脚本执行方式。确认两个日志表、一个失败关闭的命令过程及 12 个变更触发器,WritesFailClosed=1。不要修改业务字段、执行写桥命令、清空变更日志或业务表。
|
|
|
+6. 执行真实签名与数据库读取验收;只返回健康 200 不够:
|
|
|
+
|
|
|
+ ```powershell
|
|
|
+ .\deployment\Test-XiaoshuLegacySyncBridge.ps1 -BaseUrl https://a018.2018.z01.com/xiaoshu-sync -ConfigurationPath C:\secure\xiaoshu-sync.production.json
|
|
|
+ ```
|
|
|
+
|
|
|
+ 应通过健康身份、签名 manifest、11 个数据集 changes 首页读取。manifest.consistent=false 表示读取期间旧库变化,需稍后重试,不应修改程序强行判定通过。不能用静态 JSON 页面替代服务。
|
|
|
+7. 抽查旧站登录、首页和一项只读业务查询仍正常,保留 IIS 站点与应用的实际配置证据。回填部署回执,隐藏所有密码、Secret、令牌与学生业务内容。
|
|
|
+
|
|
|
+## 验收不通过时
|
|
|
+
|
|
|
+- 404:回报目标站点、绑定、子应用映射,以及该请求的 IIS sc-status / sc-substatus / sc-win32-status;确认包所在目录已创建为 IIS 应用。
|
|
|
+- 500 或启动失败:检查应用池的 64 位模式、AspNetCoreModuleV2、配置及目录权限,回传脱敏事件记录。
|
|
|
+- 401/403:核查签名配置、双方服务器时间及实际出口 IP 白名单,不关闭认证。
|
|
|
+- SQL 查询失败:核查目标数据库、对象安装、连接权限和实际错误;不以健康接口成功关闭工单。
|
|
|
+- 安装脚本会输出原桥备份路径;已有桥需要回滚时执行包内 Rollback 脚本并显式填写 HealthUrl。首次安装没有旧桥备份,须由托管方恢复安装前 IIS 配置或仅移除新建子应用,禁止删除旧站目录。
|
|
|
+
|
|
|
+## 新系统侧后续工作(由新系统管理员负责)
|
|
|
+
|
|
|
+旧站托管方完成桥部署不等于夜间同步完成。新系统还需安全配置 XIAOSHU_LEGACY_SYNC_BASE_URL、KEY_ID、SECRET;验收全数据集“保留新系统修改、记录冲突”和主附表原子性;完成一次真实同步及业务 ID/校验和对账,保留 684 条待核对冲突;最后安装并验收每天 Asia/Shanghai 23:00 的服务器任务。不得通过手工修改 checkpoint 或将全部冲突标记解决来通过验收。
|
|
|
+
|
|
|
+当前聊天的 23 点自动任务会记录阻塞并检查后续部署结果;它不替代服务器端作业。请按职责分工回传旧桥部署和新系统接入各自的验收结果。
|