======= 曼陀林工作冷启动文件 ======= > 版本: 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 → 博客