{"schema":"developer.reits.tech/storage-governance/v1","auditedAt":"2026-08-10T20:33:46+08:00","evidenceScope":"EC2 只读盘点、data-sources 生产配置与 SQLite、reits-media 源码、journald/Nginx/Docker/Loki 配置","program":{"id":"STORAGE-PLANE-2026","title":"REITs Tech 统一存储平面","total":12,"accepted":3,"active":"SP04","remainingIncludingActive":9,"parentCut":"C05","rule":"专项进度不改变 Portal 主账本；只有注册表、Schema、测试、部署与线上回读完成才记为已验收。"},"rootVolume":{"capacityGiB":256,"usedGiB":155.84,"availableGiB":100.08,"usedPercent":60.9,"targetUsedPercent":55,"thresholds":{"normal":55,"warning":65,"holdLargeArtifacts":75,"stopDeferrableWork":82,"incident":87}},"truths":["正式资源服务器已连接 S3；2026-08-12T02:41:36Z 线上 /meta 已回读 miniapp_package + business_asset、business-asset-safe-v1 和 ec2_persistent_asset_bytes=false。data-sources PR #9 已合并且主干 CI 成功，但配置回读、SQLite 远端引用抽样和生产开关仍未验收。","data-sources 本地 16.57GiB 素材均没有 S3/R2 引用；其中 1,303 个上交所 PDF 占 15GiB且仍被业务文档引用。","journald、Nginx、Docker JSON 与 Loki 存在有意的发送缓冲副本，但本地保留期没有统一预算。","任何业务素材删除都必须先取得远端版本、SHA 校验、数据库绑定和宽限期回读；按文件时间直接删除不合格。"],"assets":[{"id":"root-volume","name":"EC2 根卷","path":"/","owner":"Platform","dataClass":"核心状态","authority":"AWS EBS","currentGiB":155.84,"targetGiB":125,"retention":"持续容量预算","rebuildable":false,"risk":"watch","deleteGate":"只允许由下级资产的受控清理释放","targetStore":"系统盘只保留程序和短期缓冲","note":"256GiB 容量；Portal与journal止血后降至60.9%，约100.08GiB可用。"},{"id":"portal-releases","name":"Developer Portal 历史发布","path":"/opt/reits-developer-portal/releases","owner":"Developer Portal","dataClass":"发布制品","authority":"Gitea SHA + release receipt","currentGiB":7,"targetGiB":5,"retention":"最近10个正式版本","rebuildable":true,"risk":"watch","deleteGate":"官方 release prune 必须保留 current/previous/rollback/node_modules donor","targetStore":"EC2回滚集 + S3正式制品","note":"已删除99个退出回滚集合的版本，释放约31.1GiB；后续由官方prune维持受控回滚集。"},{"id":"data-media","name":"data-sources 素材","path":"/opt/data-sources/data/media","owner":"Data Platform","dataClass":"业务资产","authority":"文档关系 + 文件SHA","currentGiB":16.57,"targetGiB":5,"retention":"S3长期；本地校验后24小时","rebuildable":false,"risk":"critical","deleteGate":"必须先获得 reits-media asset_id、S3 Version ID、SHA与数据库回读","targetStore":"reits-media → S3 业务资产桶","note":"3,561个本地文件；上交所PDF占15GiB，禁止直接删除。"},{"id":"data-snapshots","name":"data-sources 原始快照","path":"/opt/data-sources/data/snapshots","owner":"Data Platform","dataClass":"原始证据","authority":"raw_snapshots 索引 + body_hash","currentGiB":2.16,"targetGiB":0.5,"retention":"本地7天；S3 30–90天","rebuildable":true,"risk":"high","deleteGate":"对象化、去重并回读 storage_ref 后按策略清理","targetStore":"S3 数据归档桶","note":"48,158个文件；当前30天规则可安全候选约0.67GiB。"},{"id":"data-db","name":"data-sources SQLite","path":"/opt/data-sources/data/reits.local.db","owner":"Data Platform","dataClass":"核心状态","authority":"SQLite WAL","currentGiB":2.4,"targetGiB":1.6,"retention":"业务长期；运行明细30天","rebuildable":false,"risk":"high","deleteGate":"先备份恢复验证，再聚合旧运行明细并 VACUUM INTO","targetStore":"近期SQLite；达到门槛后独立PostgreSQL/RDS","note":"crawl_jobs 640.7MiB、run_events 262.7MiB、fetch_logs 175.7MiB。"},{"id":"data-events","name":"data-sources JSONL 事件","path":"/opt/data-sources/data/crawl-events.jsonl","owner":"Data Platform","dataClass":"运行日志","authority":"兼容日志；run_events 为结构化事实","currentGiB":0.24,"targetGiB":0.05,"retention":"每日/100MiB轮转，本地2天","rebuildable":true,"risk":"high","deleteGate":"先实现轮转，活动文件不得按mtime整文件删除","targetStore":"Loki热查 + S3审计归档","note":"持续追加导致现有按mtime保留策略永远不会过期。"},{"id":"data-backups","name":"data-sources 本机备份","path":"/opt/data-sources/backups","owner":"Data Platform","dataClass":"备份","authority":"恢复演练回执","currentGiB":1.35,"targetGiB":0.5,"retention":"本地最近2份","rebuildable":true,"risk":"high","deleteGate":"S3版本化备份存在且完成恢复抽样","targetStore":"S3 备份与灾备桶","note":"当前维护器默认扫描 data/backups，实际路径没有进入生命周期。"},{"id":"gitea-state","name":"Gitea 在线状态","path":"/var/lib/docker/volumes/gitea/_data","owner":"Developer Platform","dataClass":"核心状态","authority":"Git对象 + gitea.db","currentGiB":29,"targetGiB":35,"retention":"仓库长期；Actions制品14天","rebuildable":false,"risk":"watch","deleteGate":"只能走Gitea生命周期或恢复验证后的数据库维护","targetStore":"独立加密EBS + S3制品","note":"仓库约16GiB，数据库及应用状态约13GiB。"},{"id":"gitea-backups","name":"Gitea 本机旧备份","path":"/home/ec2-user","owner":"Developer Platform","dataClass":"备份","authority":"备份清单 + 恢复证明","currentGiB":14.7,"targetGiB":2,"retention":"本地1次全量；S3日/周/月","rebuildable":true,"risk":"critical","deleteGate":"必须核验远端副本、摘要、加密Key和可恢复性","targetStore":"S3 备份与灾备桶","note":"包含9.6GiB tgz与5.1GiB备份目录。"},{"id":"journal","name":"systemd journal","path":"/var/log/journal","owner":"SRE","dataClass":"运行日志","authority":"短期主机日志","currentGiB":0.59,"targetGiB":1,"retention":"7天/最大1GiB","rebuildable":true,"risk":"controlled","deleteGate":"变更前确认Loki/Alloy，执行后回读三项服务","targetStore":"Loki 14天","note":"已安装SystemMaxUse=1G与MaxRetentionSec=7day，释放约4.13GB。"},{"id":"nginx-logs","name":"Nginx 本地日志","path":"/var/log/nginx","owner":"SRE","dataClass":"运行日志","authority":"边缘短期缓冲","currentGiB":0.81,"targetGiB":0.5,"retention":"3天/单文件100MiB","rebuildable":true,"risk":"high","deleteGate":"确认Alloy游标与Loki可查询后缩短保留","targetStore":"Loki 14天；安全审计S3","note":"最近一天约0.48GiB，Info Portal成功请求占多数。"},{"id":"loki","name":"Loki 热日志","path":"/var/lib/docker/volumes/logging_loki-data/_data","owner":"SRE","dataClass":"运行日志","authority":"统一可搜索运行日志","currentGiB":1.06,"targetGiB":3,"retention":"14天","rebuildable":true,"risk":"controlled","deleteGate":"由Loki compactor处理，不手工删除chunks","targetStore":"本机热查；长期审计进入S3","note":"当前 retention_period=14d 且 compactor 已启用。"},{"id":"docker-images","name":"Docker 镜像与构建缓存","path":"/var/lib/docker","owner":"SRE","dataClass":"可重建缓存","authority":"镜像摘要 + 部署清单","currentGiB":28.15,"targetGiB":12,"retention":"活跃版本+2个回滚版本","rebuildable":true,"risk":"critical","deleteGate":"逐服务保留回滚摘要，禁止无审核 docker system prune -a","targetStore":"镜像仓库/可重建","note":"Docker报告约24.55GiB镜像可回收；与Gitea卷不可重复相加。"}],"targetLayers":[{"id":"D0","label":"事务数据","store":"PostgreSQL / RDS","local":"不保存文件副本","retention":"业务长期"},{"id":"D1","label":"业务原件","store":"reits-media → S3","local":"校验后24小时","retention":"按业务与版权策略"},{"id":"D2","label":"原始证据","store":"S3 数据归档","local":"7天","retention":"30–90天"},{"id":"D3","label":"可重建缓存","store":"独立缓存目录/卷","local":"硬上限5GiB","retention":"7天"},{"id":"D4","label":"运行日志","store":"Loki","local":"发送缓冲","retention":"14天"},{"id":"D5","label":"安全审计","store":"S3 审计前缀","local":"不长期留存","retention":"180–365天"},{"id":"D6","label":"备份","store":"S3 版本化灾备","local":"最近1–2份","retention":"日/周/月"}],"roadmap":[{"id":"SP01","title":"全局存储资产注册表","status":"ACCEPTED","outcome":"路径、Owner、类别、预算、保留与删除门统一入账"},{"id":"SP02","title":"容量采集与阈值守卫","status":"ACCEPTED","outcome":"30分钟快照、96点趋势、65/75/82/87阈值和告警"},{"id":"SP03","title":"安全止血","status":"ACCEPTED","outcome":"Portal释放31.1GiB、journal释放4.13GB；无远端引用的业务数据保持拒绝删除"},{"id":"SP04","title":"资源服务器通用资产","status":"ACTIVE","outcome":"线上 /meta 已证明 business_asset 能力；配置、数据库抽样和正式验收回执仍待补齐"},{"id":"SP05","title":"data-sources 上传适配","status":"ACTIVE","outcome":"PR #9 已合并、主干与候选 CI 均成功；生产开关保持关闭，等待配置、远端引用抽样和小流量回执"},{"id":"SP06","title":"历史素材迁移","status":"PLANNED","outcome":"16.57GiB完成远端校验后释放本地副本"},{"id":"SP07","title":"原始快照对象化","status":"PLANNED","outcome":"body_hash去重、7天本地与S3生命周期"},{"id":"SP08","title":"数据库TTL与压缩","status":"PLANNED","outcome":"30天明细、年度汇总与可恢复压缩"},{"id":"SP09","title":"日志收敛","status":"PLANNED","outcome":"本地日志总预算不超过4GiB"},{"id":"SP10","title":"Gitea/CI/备份生命周期","status":"PLANNED","outcome":"制品与备份离开系统盘"},{"id":"SP11","title":"恢复与RPO/RTO演练","status":"PLANNED","outcome":"每类状态有可回读恢复证明"},{"id":"SP12","title":"存储治理总控工作台","status":"PLANNED","outcome":"人和AI共享实时容量与动作账本"}],"prohibitions":["禁止直接删除 data-sources/media 或开启 media_delete_disabled=false。","禁止把 EC2 本机备份当成灾备完成。","禁止无回滚清单执行 docker system prune -a。","禁止把日志、业务事件和安全审计混成一套无限保留数据。","禁止在没有远端版本与SHA回读时删除任何业务资产。"]}