rwadurian/backend/services
hailin cf07eb03be feat(snapshot): 数据快照备份服务全量实现(纯新增,零侵入)
一套代码两处部署的在线备份编排服务,为 1.0 认种分配系统和 2.0 算力挖矿系统
分别提供 PostgreSQL / Redis / Kafka / ZooKeeper / MinIO / Uploads 的在线备份能力。
管理员在 admin-web / mining-admin-web 中选择备份目标和存储方式,点击备份后系统
串行执行各组件备份,通过 Socket.IO WebSocket 实时推送进度到前端。

## 后端 snapshot-service(NestJS 10 + Prisma 5 + SQLite)

架构: DDD 四层(api / application / domain / infrastructure)

- api 层:
  · SnapshotController — REST API(创建/查询/删除/下载)含 Range/206 断点续传
  · SnapshotGateway — Socket.IO WebSocket 实时推送 5 类事件
  · HealthController — 健康检查
  · CreateSnapshotDto — class-validator 验证
  · toSnapshotResponse — BigInt→string 序列化

- application 层:
  · SnapshotOrchestratorService — 核心编排引擎
    - startSnapshot() 异步启动,不阻塞 HTTP
    - 按 PG→Redis→Kafka→ZK→MinIO→Uploads 顺序串行执行
    - 单目标失败不中断整体任务
    - MinIO 模式: 备份完上传到 MinIO 后删除本地临时文件
    - LOCAL 模式: 保留在服务器临时目录供下载
    - @Cron(EVERY_HOUR) 自动清理过期本地备份(默认 72h)
    - runningTaskId 防止并发执行

- domain 层:
  · BackupTarget 枚举(6 种目标)+ BACKUP_TARGET_ORDER 执行顺序
  · SnapshotStatus 枚举(PENDING/RUNNING/COMPLETED/FAILED)
  · StorageType 枚举(MINIO/LOCAL)
  · BackupHandler 接口 + BACKUP_HANDLER_TOKEN

- infrastructure 层:
  · 6 个备份 Handler(均实现 BackupHandler 接口):
    - PostgresBackupHandler: pg_basebackup 通过网络流式备份,解析 stderr 进度
    - RedisBackupHandler: BGSAVE + LASTSAVE 轮询 + 打包 dump.rdb/AOF
    - KafkaBackupHandler: archiver 打包数据卷,按字节计算进度
    - ZookeeperBackupHandler: archiver 打包 data/ + log/
    - MinioBackupHandler: SDK 列举并下载所有桶(排除备份桶)后打包
    - UploadsBackupHandler: archiver 打包上传文件目录
  · 2 个存储适配器:
    - MinioStorageAdapter: fPutObject 上传 / removeObjects 批量删除
    - LocalStorageAdapter: 本地临时目录管理 + 过期清理
  · PrismaService (SQLite) + SnapshotRepository (完整 CRUD)
  · BACKUP_HANDLER_TOKEN 工厂: 根据 AVAILABLE_TARGETS 环境变量过滤可用 handler

- Prisma Schema (SQLite):
  · SnapshotTask: 主表,targets 存 JSON 字符串,totalSize 用 BigInt
  · SnapshotDetail: 明细表,每个目标一行,@@index([taskId])
  · onDelete: Cascade 级联删除

- Dockerfile: 多阶段构建,生产镜像安装 postgresql-client + mc (MinIO CLI)
  SQLite 使用 prisma db push 而非 migrate deploy

- 部署端口: 1.0 系统 = 3099,2.0 系统 = 3199

## Docker Compose overlay(纯新增,不修改现有 docker-compose)

- docker-compose.snapshot.yml (1.0):
  · 挂载 redis_data/kafka_data/zookeeper_data/zookeeper_log/admin_uploads_data 只读卷
  · AVAILABLE_TARGETS=POSTGRES,REDIS,KAFKA,ZOOKEEPER,MINIO,UPLOADS
  · 依赖 postgres + redis 健康检查

- docker-compose.2.0-snapshot.yml (2.0 standalone):
  · 挂载 redis_2_data/mining-admin-uploads/trading-uploads 只读卷
  · AVAILABLE_TARGETS=POSTGRES,REDIS,UPLOADS
  · 依赖 postgres-2 + redis-2 健康检查

## 前端 admin-web(Next.js 15 + SCSS)

- 新增 /snapshots 页面: 创建备份表单 + 实时进度条 + 历史列表 + 下载/删除
- 新增 useSnapshotWebSocket hook: Socket.IO 连接 + 5 类事件监听
- 新增 snapshot.api.ts: 独立 fetch(不走通用 apiClient,snapshot 服务独立端口)
- 新增 snapshot.types.ts: 共享类型定义
- 新增 page.module.scss: 表单/进度条/表格样式
- 修改 Sidebar.tsx: 添加「数据快照」菜单项
- package.json: 添加 socket.io-client 依赖

## 前端 mining-admin-web(Next.js 14 + Tailwind CSS)

- 新增 /snapshots 页面: 同 admin-web 功能,Tailwind CSS 风格
- 新增 useSnapshotWebSocket hook
- 新增 snapshot.api.ts + snapshot.types.ts
- 修改 sidebar.tsx: 添加「数据快照」菜单项 + HardDrive 图标
- package.json: 添加 socket.io-client 依赖

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 21:53:09 -08:00
..
.claude fix(mpc-service): change healthcheck from wget to curl 2025-12-06 23:42:48 -08:00
admin-service fix(pre-planting): 修复 5 个预种模块 Bug + 补全 3 服务 migration 2026-02-23 18:09:14 -08:00
auth-service feat(trade-password): 实现卖出交易的支付密码验证功能 2026-02-05 18:12:39 -08:00
authorization-service feat(pre-planting): 3171 预种计划 1.0 全量实现(纯新增,零侵入) 2026-02-18 05:06:03 -08:00
backup-service fix(docker): 修复 referral-service Dockerfile 健康检查 URL 2025-12-14 03:05:18 -08:00
blockchain-service fix(kafka): 修复 MPC Kafka consumer 启动订阅失败后不重试的问题 2026-02-02 19:18:10 -08:00
contribution-service fix(pre-planting): 修复 5 个预种模块 Bug + 补全 3 服务 migration 2026-02-23 18:09:14 -08:00
docs feat(contribution/wallet): 实现贡献值2.0计算与钱包存储架构 2026-01-12 06:13:18 -08:00
identity-service fix(kafka): 修复 MPC Kafka consumer 启动订阅失败后不重试的问题 2026-02-02 19:18:10 -08:00
leaderboard-service fix(leaderboard-service): 修复健康检查 API 路径 2026-01-07 18:48:34 -08:00
mining-admin-service refactor(pool-accounts): 移除硬编码钱包名,改为从后端 API 动态获取 2026-02-03 02:57:40 -08:00
mining-blockchain-service fix(injection): findUnique 改为 findFirst 避免命名唯一索引类型错误 2026-02-03 06:14:13 -08:00
mining-service feat(mining-app): 贡献值730天失效倒计时功能 2026-02-13 07:30:01 -08:00
mining-wallet-service fix(mining-wallet-service): pool-account GET :type 改为 @Public() 允许内网服务间调用 2026-02-03 09:21:39 -08:00
mpc-service perf(docker): 优化Dockerfile构建,避免最后chown整个目录 2025-12-21 19:31:58 -08:00
planting-service fix(pre-planting): 修复 5 个预种模块 Bug + 补全 3 服务 migration 2026-02-23 18:09:14 -08:00
presence-service perf(docker): 优化Dockerfile构建,避免最后chown整个目录 2025-12-21 19:31:58 -08:00
referral-service feat(transfer): 树转让功能全量实现(纯新增,零侵入) 2026-02-19 03:44:02 -08:00
reporting-service fix(reporting): 修复 contract.signed 事件 BigInt(undefined) 错误 2026-02-15 07:59:16 -08:00
reward-service feat(admin-web): 省团队收益汇总明细增加来源用户列并修复账户名称显示 2026-02-05 17:35:22 -08:00
scripts feat(transfer): 树转让功能全量实现(纯新增,零侵入) 2026-02-19 03:44:02 -08:00
snapshot-service feat(snapshot): 数据快照备份服务全量实现(纯新增,零侵入) 2026-02-23 21:53:09 -08:00
trading-service feat(trade-password): 实现卖出交易的支付密码验证功能 2026-02-05 18:12:39 -08:00
transfer-service feat(transfer): 树转让功能全量实现(纯新增,零侵入) 2026-02-19 03:44:02 -08:00
wallet-service feat(transfer): 树转让功能全量实现(纯新增,零侵入) 2026-02-19 03:44:02 -08:00
.env.example docs(backend): 添加阿里云短信服务配置到 .env.example 2025-12-20 05:55:42 -08:00
.gitignore refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
README.md refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
deploy-mining.sh fix(deploy-mining): cdc-resnapshot 支持 standalone 模式远程操作 1.0 Debezium 2026-02-01 23:42:53 -08:00
deploy.sh feat(transfer): 树转让功能全量实现(纯新增,零侵入) 2026-02-19 03:44:02 -08:00
docker-compose.2.0-snapshot.yml feat(snapshot): 数据快照备份服务全量实现(纯新增,零侵入) 2026-02-23 21:53:09 -08:00
docker-compose.2.0.yml fix: Debezium CDC 全面安全加固 (1.0 + 2.0) 2026-02-15 07:32:13 -08:00
docker-compose.infra.yml fix(mining-service): Redis DB 11 冲突修复,迁移至 DB 16 2026-01-30 02:22:20 -08:00
docker-compose.snapshot.yml feat(snapshot): 数据快照备份服务全量实现(纯新增,零侵入) 2026-02-23 21:53:09 -08:00
docker-compose.yml feat(transfer): 树转让功能全量实现(纯新增,零侵入) 2026-02-19 03:44:02 -08:00
init-multiple-dbs.sh feat(identity): store complete deviceInfo JSON from frontend 2025-12-07 11:08:37 -08:00

README.md

RWA Backend Services

统一部署管理 RWA 后端微服务。

架构概览

┌─────────────────────────────────────────────────────────────────┐
│                    192.168.1.100 (Gateway)                       │
│  ┌─────────────┐  ┌─────────────────────────────────────────┐  │
│  │   Nginx     │  │          MPC-System (Go)                 │  │
│  │  (Reverse   │  │  - session-coordinator (:8081)           │  │
│  │   Proxy)    │  │  - message-router (:8082)                │  │
│  │             │  │  - server-party-1/2/3 (:8083-8085)       │  │
│  └─────────────┘  │  - account-service (:8080)               │  │
│                   └─────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘
                              │
                              │ Internal Network
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                    192.168.1.111 (Backend)                       │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │              Docker Compose Services                     │    │
│  │  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐       │    │
│  │  │  PostgreSQL │ │    Redis    │ │    Kafka    │       │    │
│  │  │   (:5432)   │ │   (:6379)   │ │   (:9092)   │       │    │
│  │  └─────────────┘ └─────────────┘ └─────────────┘       │    │
│  │                                                          │    │
│  │  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐       │    │
│  │  │  identity   │ │   wallet    │ │   backup    │       │    │
│  │  │  (:3000)    │ │  (:3001)    │ │  (:3002)    │       │    │
│  │  └─────────────┘ └─────────────┘ └─────────────┘       │    │
│  │                                                          │    │
│  │  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐       │    │
│  │  │  planting   │ │  referral   │ │   reward    │       │    │
│  │  │  (:3003)    │ │  (:3004)    │ │  (:3005)    │       │    │
│  │  └─────────────┘ └─────────────┘ └─────────────┘       │    │
│  │                                                          │    │
│  │  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐       │    │
│  │  │    mpc      │ │ leaderboard │ │  reporting  │       │    │
│  │  │  (:3006)    │ │  (:3007)    │ │  (:3008)    │       │    │
│  │  └─────────────┘ └─────────────┘ └─────────────┘       │    │
│  │                                                          │    │
│  │  ┌─────────────┐ ┌─────────────┐                        │    │
│  │  │authorization│ │   admin     │                        │    │
│  │  │  (:3009)    │ │  (:3010)    │                        │    │
│  │  └─────────────┘ └─────────────┘                        │    │
│  └─────────────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────────────┘

快速开始

1. 首次安装

# 进入服务目录
cd ~/rwadurian/backend/services

# 运行安装(自动生成安全密钥)
./deploy.sh install

2. 构建镜像

./deploy.sh build

3. 启动服务

./deploy.sh up

4. 检查状态

./deploy.sh status
./deploy.sh health

常用命令

命令 说明
./deploy.sh install 首次安装,生成配置
./deploy.sh build 构建所有 Docker 镜像
./deploy.sh up 启动所有服务
./deploy.sh down 停止所有服务
./deploy.sh restart 重启所有服务
./deploy.sh status 查看服务状态
./deploy.sh health 检查服务健康
./deploy.sh logs 查看所有日志
./deploy.sh logs <service> 查看指定服务日志
./deploy.sh migrate 运行数据库迁移
./deploy.sh rebuild-svc <name> 重建指定服务

服务列表

服务 端口 说明
identity-service 3000 身份认证服务
wallet-service 3001 钱包账本服务
backup-service 3002 MPC 备份服务
planting-service 3003 认种服务
referral-service 3004 推荐系统服务
reward-service 3005 奖励服务
mpc-service 3006 MPC 中间层服务
leaderboard-service 3007 排行榜服务
reporting-service 3008 报表服务
authorization-service 3009 授权服务
admin-service 3010 管理后台服务

基础设施

服务 端口 说明
PostgreSQL 5432 主数据库
Redis 6379 缓存/会话
Kafka 9092 消息队列
Zookeeper 2181 Kafka 协调

环境配置

配置文件 .env./deploy.sh install 自动生成,包含:

  • 数据库密码
  • JWT 密钥
  • 加密密钥
  • MPC 系统地址

重要: .env 文件包含敏感信息,请勿提交到 Git

与 MPC-System 集成

mpc-service 需要连接到运行在 192.168.1.100 上的 MPC-System

  • Session Coordinator: http://192.168.1.100:8081
  • Message Router: ws://192.168.1.100:8082

确保 192.168.1.111 能够访问 192.168.1.100 的这些端口。

故障排除

查看服务日志

./deploy.sh logs identity-service

重建单个服务

./deploy.sh rebuild-svc mpc-service

数据库连接问题

# 进入 postgres 容器
docker exec -it rwa-postgres psql -U rwa_user -d rwa_identity

清理重新开始

./deploy.sh clean  # 删除所有容器和数据
./deploy.sh install
./deploy.sh build
./deploy.sh up