======= 曼陀林工作冷启动文件 =======
> 版本: 2.0 | 日期: 2026-08-16 | 用途: 服务器冷启动/重建/新人接手时,按此文件可完整恢复"曼陀林"全部工作系统
> 服务器: 腾讯云轻量 lhins-1dai07vu | 公网IP: 82.156.85.124 | 系统: Ubuntu | 时区: Asia/Shanghai
> 域名: mandolinwu.site(ICP备案进行中;备案前外部访问用IP,备案后 dev./wiki. 子域名 HTTPS 全通)
> 站点品牌: **曼陀林**(Halo博客"曼陀林"、Wiki"慧飞知识库"、域名 mandolinwu.site 均属此体系)
---
====== 1. 平台总览 ======
┌─ 曼陀林平台 (82.156.85.124) ────────────────────────────┐
│ Caddy(:80/:443 反代+HTTPS) │
│ ├─ dev.mandolinwu.site → /ctwing/* /game* → :13543 │
│ ├─ wiki.mandolinwu.site → :3000 (DokuWiki 慧飞知识库) │
│ │ │
│ ├─ :13543 Flask接收端(CTWing数据+H5工具+游戏) │
│ ├─ :3000 DokuWiki 知识库(Wiki) │
│ ├─ :8080 NocoDB 智能表格(员工日报) │
│ ├─ :8090 Halo 博客"曼陀林" │
│ ├─ :5672 RabbitMQ(CTWing MQ备用通道) │
│ └─ :3306 MySQL(huifei_daily日报库 + halo博客库) │
└─────────────────────────────────────────────────────────┘
**访问地址:**
| 服务 | 地址 |
|------|------|
| 设备数据查询 H5 | http://82.156.85.124/ctwing/h5(备案后 https://dev.mandolinwu.site/ctwing/h5)|
| Wiki 慧飞知识库 | http://82.156.85.124:3000(备案后 https://wiki.mandolinwu.site)|
| Halo 博客"曼陀林" | http://82.156.85.124:8090 |
| NocoDB | http://82.156.85.124:8080 |
| 我的世界3D / 佩奇游戏 | http://82.156.85.124/game/mc、/game |
| RabbitMQ管理台 | http://82.156.85.124:15672 |
====== 2. CTWing 设备数据工作流 ======
===== 2.1 系统链路 =====
设备(4G/NB/土壤) → AEP平台(iot.ctwing.cn) → 北向订阅(定源) → HTTP推送 → Flask接收端(:13543)
→ SQLite(ctwing.db) → 每日09:00日报 → MySQL(huifei_daily) → 微信推送
→ H5查询工具(图表/分析报告/设备台账管理)
===== 2.2 核心组件 =====
| 组件 | 位置 | 说明 |
|------|------|------|
| Flask接收端 | ~/projects/ctwing-2/receiver_server.py | 接收AEP推送+解析入库+H5 API+游戏 |
| systemd: ctwing-receiver | 端口13543 | 开机自启 |
| MQ消费端 | ~/projects/ctwing-2/mq_consumer.py | RabbitMQ备用通道 |
| AEP SDK | ~/projects/ctwing-2/aep_sdk/ | 官方Python SDK |
| AEP客户端 | ~/projects/ctwing-2/aep_api.py | 订阅管理(增删设备定源) |
| SQLite | ~/projects/ctwing-2/data/ctwing.db | device_data + monitored_devices |
| 日报脚本 | db_writer.py + ~/.hermes/scripts/ctwing_daily.sh | 09:00聚合写MySQL+微信推送 |
| cron | b3b717e6550f 每天09:00 | 设备日报 |
===== 2.3 AEP 开放平台接入(关键) =====
- 凭证(~/.hermes/.env,600权限):
- 应用: AEP_APP_KEY=IQsPnFznnO7, AEP_APP_SECRET=dbwgP7q7IM
- 4G智慧球阀 17080670 / NB智慧球阀 17070058 / 土壤墒情站 17197695(各配MasterKey)
- API域名: `https://2000455438.api.ctwing.cn`(租户ID.api.ctwing.cn)
- **签名算法(血泪教训,不是MD5!)**:
code = "application:{AppKey}\ntimestamp:{毫秒}\n" + 参数行"名:值\n"(按key排序,空值也要) + body + "\n"
signature = Base64(HMAC-SHA1(key=AppSecret, msg=code))
- 订阅API: Create POST /subscription(20181031202018) / Delete DELETE /subscription(20181031202023) / List GET /subscribes(20220624163719)
- AEP deviceId = 产品ID + SN
- **设备管理原则:添加设备→建设备级订阅;删除设备→删该设备订阅。禁止产品级。删除只动 subUrl=http://82.156.85.124:13543/ctwing/receive 的订阅**
===== 2.4 数据解析 =====
- AEP推送信封: {"deviceId":"...","payload":{"APPdata":"base64"}}
- APPdata解码→SN(18位)+JSON数据体;类型按deviceId前缀: 17080670=valve 17070058=nb_valve 17197695=soil
===== 2.5 H5 设备管理工具 =====
- 页面/ctwing/h5 | API: /ctwing/api/manage /data /report
- 台账表 monitored_devices(sn,name,device_type,product,aep_subscribed,aep_device_id,sub_id)
- 功能: 增删设备(自动同步AEP定源) + 4图 + 一键分析报告
====== 3. Halo 博客"曼陀林" ======
- 容器 halo(:8090) | Halo 2.25.4 | 主题 theme-hao | 后台/console 简体中文
- 管理员: mandolinwu(密码在 .env)
- 数据库: MySQL halo库(R2DBC连接必须带 ANSI_QUOTES)
- 升级/主题安装要点见 selfhosted-app-deployment 技能 references/halo.md
====== 4. Wiki 慧飞知识库 ======
- 容器 wiki(:3000) | DokuWiki | 数据卷 /home/ubuntu/wiki/data(/storage)
- 管理员: admin(密码 WIKI_ADMIN_PASSWORD 在 .env)
- 权限: Public Wiki(公开读,注册写)
- 页面存档: 曼陀林工作冷启动文件(本文件)
====== 5. 家庭游戏 ======
- 佩奇丛林大冒险 /game(联机竞速)、我的世界3D /game/mc(Three.js内嵌单文件零外链)
- 游戏文件在 ~/games/,由接收端13543提供
====== 6. 其他工作流 ======
- **研发日报**: NocoDB(:8080) 员工表单填报 → 22:15汇总(cron edb89ca63fa5,暂停中)
- **家务计划**: 每天13:00汇总(cron dc2ba7d86ec2)
- **球阀深度分析**: ~/huifei/iot_full_report.py → PDF报告
====== 7. 服务器基础设施 ======
- Docker容器: rabbitmq / huifei-mysql(:3306仅内网) / nocodb(:8080) / halo(:8090) / wiki(:3000)
- Caddy: /etc/caddy/Caddyfile(dev/wiki 子域名反代+自动HTTPS)
- 防火墙(轻量控制台): 已放行 22/80/443/13543/8080/8090/3000/5672
- 凭据集中存放: ~/.hermes/.env(600权限)
- 二维码: /home/ubuntu/qrcodes/
====== 8. 常见运维命令 ======
sudo systemctl restart ctwing-receiver mq_consumer caddy
sudo caddy reload --config /etc/caddy/Caddyfile
docker ps / docker restart
tail -f ~/projects/ctwing-2/data/cron.log
====== 9. 排障速查 ======
| 症状 | 排查 |
|------|------|
| 域名打不开/跳备案页 | mandolinwu.site 未ICP备案,用IP访问或等备案通过 |
| 数据没流入 | curl localhost:13543/ctwing/health;查AEP订阅列表 |
| 添加设备报"deviceId不属于该productId" | SN未在AEP产品注册,先到控制台注册 |
| AEP签名401 | 时间戳偏差>5分钟?/echo校准;空值参数也要签名 |
| 微信打不开链接 | 用IP+系统浏览器;或二维码(/home/ubuntu/qrcodes/) |
====== 10. 冷启动恢复步骤 ======
1. Docker装容器: rabbitmq/huifei-mysql/nocodb/halo/wiki
2. 恢复代码: ~/projects/ctwing-2 + ~/games + ~/huifei + ~/docs
3. systemd: ctwing-receiver + mq_consumer 启用
4. Caddy配置 + 防火墙放行(22/80/443/13543/8080/8090/3000/5672)
5. cron: b3b717e6550f(09:00日报) dc2ba7d86ec2(13:00家务) edb89ca63fa5(22:15研发日报)
6. 验证: /ctwing/health → AEP订阅 → 数据入库 → H5 → Wiki → 博客