hailin
|
0b1de382b0
|
fix(deploy): 服务器部署修复 — 全栈编译运行通过
在内网服务器 (192.168.1.222) 首次部署时发现并修复的所有问题,
涉及 backend (12微服务)、blockchain (Cosmos SDK节点)、前端 (admin-web)。
## Backend 修复
### docker-compose.yml
- DB_PASSWORD: 从硬编码 `genex_dev_password` 改为 `${DB_PASSWORD}` 环境变量插值,
所有13个服务统一从 .env 读取,避免密码不一致导致连接失败
- Kong 镜像: `kong:3.5-alpine` → `kong:3.5`,alpine 版本在 amd64 上缺少依赖
- chain-indexer: 环境变量名 `CHAIN_RPC_URL` → `RPC_URL` (与 Go 代码 getEnv 一致)
- chain-indexer: RPC 地址改为 `http://172.17.0.1:8545` (Docker bridge gateway,
跨 docker-compose network 访问 blockchain 节点的 EVM JSON-RPC)
- chain-indexer: 补全缺失的 DB_HOST/DB_PORT/DB_USERNAME/DB_PASSWORD/DB_NAME
### ai-service
- ai.module.ts: 移除重复的 TypeOrmModule.forRootAsync — 该模块错误地使用了
DB_USER/DB_PASS (默认 'genex'/'genex') 和独立数据库 genex_ai,与 app.module.ts
中已有的 TypeOrmModule.forRoot 冲突,导致密码认证失败
- app.module.ts: 添加 ConfigModule.forRoot({ isGlobal: true }),因为
JwtModule.registerAsync 依赖 ConfigService 注入
### 依赖补全
- user-service/package.json: 添加 kafkajs ^2.2.4 (Kafka 事件消费)
- admin-service/package.json: 添加 kafkajs ^2.2.4 (Kafka 事件消费)
## Blockchain 修复
### genex-chain/app.go — 修复 chainConfig panic
- 问题: NewGenexApp 被调用两次 (tempApp 注册编码 + 实际启动),cosmos/evm 的
SetChainConfig 在第二次调用时 panic: "chainConfig already set"
- 原因: 原代码 `if evmChainID == 0 { evmChainID = GenexEVMChainID }` 导致
tempApp 也使用 8888,SetChainConfig 设置后,实际 app 再次设置时触发 panic
- 修复: 移除默认值回退,让 tempApp 使用 evmChainID=0 → DefaultEVMChainID(262144),
实际 app 从 app.toml 读取 8888 后可正常覆盖
### genex-chain/cmd/genexd/cmd/root.go
- 移除未使用的 banktypes import (编译错误)
### docker-compose.yml
- 添加 `command: ["start", "--chain-id", "genex-testnet-1"]` 到 x-genex-node 默认配置,
否则 InitChain 时 chain-id 为空导致校验失败
### init-genesis.sh (新增)
- 创世初始化脚本: init → 补丁 genesis.json → 创建验证者 → gentx → collect-gentxs
- 将所有默认 denom (aatom) 替换为 agnx (GNX, 18 decimals EVM 兼容)
- 配置: evm_denom, bond_denom, mint_denom, gov min_deposit, bank denom_metadata
- 启用 JSON-RPC (0.0.0.0:8545/8546)、REST API、CORS
- 设置 evm-chain-id=8888
## 部署结果
- 20 个 Docker 容器全部运行 (4 基础设施 + 12 后端 + 1 区块链节点 + 1 前端 + 2 辅助)
- 区块链稳定出块 (height 80+),EVM JSON-RPC 正常
- chain-indexer 实时索引区块 (lag=0)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-20 05:29:33 -08:00 |
hailin
|
e20c321d12
|
refactor: 遥测与版本管理拆分为独立微服务 (telemetry-service + admin-service)
架构重构: 将遥测(Telemetry)和版本管理(App Version)从 user-service 拆分为两个独立微服务,
严格遵循 DDD + Clean Architecture 四层架构。
新增服务:
- telemetry-service (:3011) — 用户心跳检测、事件采集、DAU统计、Prometheus指标
- domain: 3实体 + 3值对象(EventName/InstallId/TimeWindow) + 2领域事件
- infrastructure: Redis(Sorted Set心跳) + Kafka(事件发布) + Prometheus(5指标)
- 定时任务: 每分钟在线快照、每小时清理过期、凌晨DAU精确计算、滚动DAU更新
- admin-service (:3012) — APK/IPA版本管理、OTA更新、MinIO文件存储
- domain: 1实体 + 4值对象(VersionCode/VersionName/FileSha256/DownloadUrl)
- infrastructure: MinIO(文件上传/下载) + APK/IPA解析器
- 移动端: 检查更新API(无认证) + 下载重定向(预签名URL)
- 管理端: 版本CRUD + 上传解析 + 启禁用
user-service 清理:
- 删除24个已迁移文件(4实体+4服务+4基础设施+5控制器+6DTO+1gitkeep)
- 移除不再需要的依赖: @nestjs/schedule, minio, prom-client, kafkajs
- 精简 user.module.ts,仅保留用户核心功能(Profile/KYC/Wallet/Message/Admin)
基础设施更新:
- Kong: 遥测路由 → telemetry-service:3011, 版本路由 → admin-service:3012
- docker-compose: 新增2个服务容器 + MinIO app-releases bucket
- 07开发指南: 更新为独立服务架构描述
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-12 18:30:39 -08:00 |
hailin
|
0bf1df0f7a
|
feat: 补全遥测/版本管理完整功能 + 清除全部开发指南中的MVP字样
## 功能补全 (12个新文件 + 6个修改)
DTO验证类 (6):
- batch-events.dto.ts — 批量事件上报验证(ArrayMaxSize 500, ValidateNested)
- heartbeat.dto.ts — 心跳上报验证(installId, appVersion)
- query-dau.dto.ts — DAU查询+事件查询验证(IsDateString, 分页)
- check-update.dto.ts — 检查更新验证(platform IsIn, version_code IsInt)
- create-version.dto.ts — 创建/更新版本验证(CreateVersionDto + UpdateVersionDto)
- upload-version.dto.ts — 上传版本验证(multipart/form-data字段)
基础设施 (3):
- package-parser.service.ts — APK解析(adbkit-apkreader) + IPA解析(unzipper+bplist-parser)
- telemetry-producer.service.ts — Kafka事件发布(telemetry.session.started + telemetry.heartbeat)
- telemetry-metrics.service.ts — Prometheus 5指标(online_users/dau/heartbeat_total/events_total/batch_duration)
控制器 (1):
- metrics.controller.ts — GET /metrics 端点(Prometheus格式)
功能增强:
- admin-version.controller.ts — 新增POST /parse解析预览端点 + upload自动解析填充元数据
- app-version.controller.ts — 新增GET /download/:id下载端点(302重定向MinIO)
- telemetry.service.ts — 集成Prometheus计数器+直方图 + Kafka事件发布
- telemetry-scheduler.service.ts — 快照/DAU时更新Prometheus指标
- user.module.ts — 注册MetricsController + TelemetryMetricsService + TelemetryProducerService + PackageParserService
- package.json — 新增prom-client依赖
## 开发指南MVP清除 (4个文件)
- 00-UI设计需求.md — "MVP阶段" → "当前阶段"
- 05-后端开发指南.md — "Phase 1 (MVP)" → "Phase 1 (基础平台)"
- 06-区块链开发指南.md — 清除所有MVP引用(合约注释/代币用途/Gas模型/预留接口)
- 07-遥测与版本管理开发指南.md — 清除MVP理由, 删除"可选"标记
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-12 18:09:10 -08:00 |
hailin
|
5a66b3071f
|
feat: 新增用户遥测(Telemetry)与移动端OTA版本管理功能
## 遥测系统 (Telemetry)
- 心跳检测: 客户端60s上报心跳,Redis Sorted Set实时计算在线用户数(180s窗口)
- 事件采集: 批量上报客户端事件(会话/页面/操作),写入PostgreSQL telemetry_events表
- DAU统计: 基于app_session_start事件按userId/installId去重
- 实时近似: Redis HyperLogLog (PFADD/PFCOUNT)
- 精确计算: 每天凌晨1:00从事件表聚合,支持平台/地区维度
- 在线快照: 每分钟记录在线用户数快照,支持1m/5m/1h区间聚合查询
- 定时任务: @nestjs/schedule驱动 (每分钟快照/每小时清理/凌晨DAU/滚动DAU)
## 版本管理 (App Version / OTA Update)
- 版本CRUD: 管理员创建/编辑/删除/启禁用版本记录
- 文件上传: APK/IPA上传至MinIO(app-releases bucket),自动计算SHA256
- 强制更新: isForceUpdate标志,客户端据此决定是否阻断使用
- 检查更新API: GET /app/version/check?platform=android¤t_version_code=200
- 预签名下载: MinIO presigned URL (24h有效)
## 新增文件清单 (18个新文件 + 3个修改)
数据库迁移 (4):
- 032_create_telemetry_events.sql — 事件日志表(append-only, BIGSERIAL)
- 033_create_daily_active_stats.sql — DAU日统计表(day PK, JSONB平台/地区)
- 034_create_online_snapshots.sql — 在线快照表(每分钟记录)
- 035_create_app_versions.sql — 应用版本表(platform CHECK, 唯一索引)
TypeORM实体 (4):
- telemetry-event.entity.ts — 遥测事件(userId, installId, eventName, properties)
- online-snapshot.entity.ts — 在线快照(ts, onlineCount, windowSeconds)
- daily-active-stats.entity.ts — DAU统计(day PK, dauByPlatform/Region JSONB)
- app-version.entity.ts — 应用版本(Platform enum, @VersionColumn乐观锁)
Redis基础设施 (1):
- presence-redis.service.ts — ZADD心跳 + ZCOUNT在线 + PFADD/PFCOUNT DAU
业务服务 (4):
- telemetry.service.ts — 批量事件入库 + 心跳记录 + 在线/DAU查询
- telemetry-scheduler.service.ts — 4个Cron定时任务
- app-version.service.ts — checkUpdate + CRUD + toggle + 重复检测
- file-storage.service.ts — MinIO上传(SHA256) + presigned下载URL
HTTP控制器 (4):
- telemetry.controller.ts — POST events(无需认证) + POST heartbeat + GET online
- admin-telemetry.controller.ts — GET /admin/telemetry/dau|events|realtime
- app-version.controller.ts — GET /app/version/check (移动端)
- admin-version.controller.ts — 完整CRUD + multipart上传 + toggle启禁用
修改文件 (3):
- user.module.ts — 注册4实体+4控制器+5服务+ScheduleModule
- package.json — 新增@nestjs/schedule, minio, @types/multer
- kong.yml — 新增4条Kong路由(telemetry, admin/telemetry, app/version, admin/versions)
文档 (1):
- docs/guides/07-遥测与版本管理开发指南.md — 完整开发指导(参考rwadurian适配)
注: admin遥测路径为/admin/telemetry,避免与issuer-service的/admin/analytics冲突
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-12 17:53:50 -08:00 |
hailin
|
ad93bc728f
|
feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码)
## 架构概览
- 10个微服务: 7 NestJS + 3 Go/Gin
- DDD + Clean Architecture (Domain/Application/Infrastructure/Interface 四层)
- Kong API Gateway (8080) 统一入口
- PostgreSQL + Redis + Kafka(KRaft) + MinIO 基础设施
## 微服务清单
| 服务 | 技术 | 端口 | 职责 |
|------|------|------|------|
| auth-service | NestJS | 3010 | JWT双Token认证(15min+7d)、注册/登录/刷新/登出 |
| user-service | NestJS | 3001 | 用户Profile、KYC审核、钱包(充值/提现)、消息 |
| issuer-service | NestJS | 3002 | 发行方入驻、券CRUD/搜索/购买、定价引擎、信用评分 |
| trading-service | Go/Gin | 3003 | 撮合引擎(价格-时间优先)、订单簿、做市商API |
| clearing-service | NestJS | 3004 | 交易结算、退款、Breakage、ASC 606会计分录 |
| compliance-service | NestJS | 3005 | AML(5模式)、OFAC筛查、Travel Rule、SAR报告 |
| ai-service | NestJS | 3006 | ACL反腐败层→外部AI Agent集群(含本地降级) |
| translate-service | Go/Gin | 3007 | 区块链地址映射翻译 |
| notification-service | NestJS | 3008 | 推送/短信/邮件/站内通知、事件消费 |
| chain-indexer | Go/Gin | 3009 | 区块链索引器(Mock) |
## Admin API (18个管理模块)
覆盖admin-web全部18+页面:
Dashboard、用户管理、系统管理、用户分析、发行方管理、券管理、
券分析、商户核销、交易监控、做市商管理、财务管理、报表中心、
风控中心、合规审计、争议处理、保险理赔、AI Agent面板、通知管理
## 数据库
- 31个SQL迁移 (000-031) + 种子数据
- 乐观锁(@VersionColumn) + 悲观锁(SELECT FOR UPDATE) + Redis分布式锁
- Outbox Pattern保证消息可靠投递 + 24h幂等窗口
## 共享包
- @genex/common: Guards/Decorators/DTOs/Outbox/Health/Locking/AI-Client
- @genex/kafka-client: 生产者/消费者/Topic定义/KRaft集群支持
## 部署与测试
- docker-compose.yml: 全栈一键启动
- Swagger文档: 7个NestJS服务 /docs 端点
- E2E测试脚本: scripts/run-e2e.sh (Auth→Profile→Wallet→Trading→Admin)
- 迁移脚本: scripts/migrate.sh + scripts/test-setup.sh
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-12 17:09:12 -08:00 |