Skip to content

服务器信息档案 — TenoDX ​

本目录用于集中记录服务器 39.107.41.224 的全部运维信息,作为后续部署、排障、扩容、交接的依据。

最后采集:2026-11-08 05:23 CST | 来源快照:raw/snapshot-20261108-0523.txt 状态:加固 + PostgreSQL + NapCat + Uptime Kuma + Caddy 全部就位;待你扫码登录 QQ


目录结构 ​

server-info/
├── README.md               ← 本文件:索引、数据模型说明、刷新方法
├── inventory.yaml          ← 结构化清单(机器可读,单一事实源)
├── 01-基础信息.md           ← 身份、硬件、网络、存储、时间
├── 02-防火墙与端口.md        ← 防火墙 + 端口 + **安全组实测结论与控制台步骤**
├── 03-软件清单.md           ← 系统包、Docker、PostgreSQL、镜像加速
├── 04-服务与进程.md          ← systemd 服务、容器、资源占用
├── 05-安全基线.md           ← SSH 策略、账号、补丁、fail2ban、MAC
├── 06-计划任务.md           ← cron / systemd timer / 数据库备份
├── 07-变更记录.md           ← 变更时间线 + 踩坑记录 + 回滚命令
├── 08-网络代理.md           ← 出站代理(美国 Z01)配置与使用
├── 09-决策记录.md           ← 自主决策清单:做了什么、没做什么、为什么
├── 10-部署规范.md           ← **Docker 优先** + 强制配套监控的部署约定
├── 11-应用服务.md           ← **NapCat / Uptime Kuma 部署与监控维护流程**
├── 12-Web入口.md            ← **Caddy 反向代理**(Host 路由 + basic auth)
├── 13-资源服务器.md          ← **固件资源服务器**(API-only,鉴权上传)
├── 14-文档站.md              ← **VitePress 文档站**(构建进镜像 + 更新流程)
├── scripts/
│   ├── collect.sh          ← 只读采集脚本(在服务器上执行)
│   ├── refresh.ps1         ← 本机一键刷新快照
│   └── tunnel.ps1          ← 本机 SSH 隧道助手(绕过安全组访问服务)
└── raw/
    ├── snapshot-<时间戳>.txt   ← 全量采集原始输出
    └── packages-<时间戳>.txt   ← 完整 dpkg 包清单

相关本地工具(不在本档案内) ​

位置说明
server/fw-registry/资源服务器源码(Dockerfile + FastAPI + publish.ps1 上传脚本)
tools/TenoDXHub/H503 本地 Hub:控制器信息 + 固件拉取刷入(见该目录 README)
tools/h503_dfu_flasher/独立 DFU 刷写工具(Hub 的刷写逻辑来源)

快速上手 ​

powershell
# 1) 连服务器(免密,已在 ~/.ssh/config 配好 tenodx 别名)
ssh tenodx

# 2) 开隧道(web / fw / postgres / uptime / napcat 任选)
powershell -NoProfile -ExecutionPolicy Bypass -File .\server-info\scripts\tunnel.ps1
powershell ... -Service fw          # 只开固件 API:localhost:18000

# 3) 发固件
$env:FW_ADMIN_TOKEN = "<服务器 /opt/stacks/fw-registry/.env 里的 FW_ADMIN_TOKEN>"
powershell -File .\server\fw-registry\publish.ps1 -File .\build\h503.bin -Version 1.2.3 -Changelog "修复..."

# 4) 启动 Hub 刷入
powershell -File .\tools\TenoDXHub\run.ps1 -Registry http://127.0.0.1:18000

# 5) 访问 Web 面板(走 Caddy 单入口)
#   落地页          http://127.0.0.1:13080/
#   监控            http://kuma.localhost:13080/
#   QQ 机器人面板    http://napcat.localhost:13080/webui/

# 6) 刷新本档案
powershell -NoProfile -ExecutionPolicy Bypass -File .\server-info\scripts\refresh.ps1

运行中的服务(5 个容器) ​

服务端口(仅 loopback)说明
Caddy 2.11.980Web 入口,Host 路由 + basic auth
Docs site (VitePress)8088文档站,docs.localhost
Firmware Registry8000固件资源服务器(API-only)
PostgreSQL 185432业务库 + tenodx_fw 库
Uptime Kuma 2.5.9300112 项监控,11 项启用
NapCat(OneBot 11)6099 / 3000 / 3002容器 running,待你扫码登录 QQ

⚠️ 安全组只开 22/tcp,以上端口全部走 SSH 隧道访问。


数据模型设计(采集了哪些维度、为什么) ​

#维度核心字段为什么需要
1身份标识hostname、machine-id、实例 ID、镜像 ID、地域/可用区确认"这是哪台机器",防止多机混淆;重建/迁移时对账
2硬件规格CPU 核数/型号、内存、Swap、磁盘容量/类型、inode评估承载能力,判断能否部署目标应用
3网络网卡/IP/掩码、默认网关、DNS、公网 IP、路由排查连通性、域名解析、对外暴露面
4防火墙ufw 状态、iptables 规则与策略、firewalld、nftables、云安全组、ip_forward安全第一道门;判断端口是否真的对外可达
5端口与连接监听端口、所属进程/PID、ESTABLISHED 连接确认服务暴露面;识别异常外联
6软件清单dpkg 包总数/手动安装、可升级数、Snap、运行时版本、pip 全局包资产盘点;漏洞影响面评估;确认技术栈可行性
7服务与进程运行中服务、开机自启服务、失败单元、内存/CPU TOP掌握常驻负载,找资源浪费点
8资源基线内存占用分布、磁盘用量、日志占用、ulimit、内核参数建立性能基线,后续对比发现劣化
9安全基线SSH 有效配置、UID 0 账号、sudo 组、密码策略、补丁状态、爆破统计、AppArmor/SELinux量化安全风险,跟踪加固进度
10计划任务root crontab、/etc/cron.d、systemd timer避免遗漏后台定时行为(备份、清理、自动升级)
11变更记录时间、操作、操作人、回滚方式出事能倒查,交接有据

设计原则 ​

  1. 单一事实源:inventory.yaml 是权威数据,Markdown 是给人看的展开视图。
  2. 可重复采集:所有数据都来自 scripts/collect.sh(只读命令),随时可复现,不靠手抄。
  3. 原始留档:raw/ 保存每次采集的原文,便于事后比对差异。
  4. 记录"没有"的东西:明确写下"未安装 nginx / docker / mysql",比只记录"有什么"更有价值 —— 能一眼判断这是台空机器。
  5. 标出不可自动获取项:如阿里云安全组规则,只能从控制台看,单独列为待确认项。

一键刷新 ​

powershell
# 在工作目录下执行(需绕过本机执行策略)
powershell -NoProfile -ExecutionPolicy Bypass -File .\server-info\scripts\refresh.ps1

# 或已在 PowerShell 7 中、执行策略为 RemoteSigned/Bypass 时
.\server-info\scripts\refresh.ps1

脚本会 SSH 到 tenodx 执行 collect.sh,把新的 snapshot-<时间戳>.txt 和 packages-<时间戳>.txt 落到 raw/。 之后人工同步更新 inventory.yaml 与各 Markdown 文档,并在 07-变更记录.md 追加一行。

已实测可用(2026-11-08 04:02 验证:737 个包 + 全量快照采集成功)。

两个已知坑,脚本内已处理:

  1. refresh.ps1 故意写成纯 ASCII —— Windows PowerShell 5.1 会把无 BOM 的 UTF-8 .ps1 按 ANSI(GBK) 解析,中文会变乱码并导致语法报错。
  2. PowerShell 向原生命令管道输入时会自动追加 \r\n,导致 bash 报 $'\r': command not found。 脚本改为在服务端 tr -d '\r' | bash -s,彻底消除 CR。

⚠️ 需要你本人处理的事项 ​

2026-11-08 你授权"问题全部由我决定"后,我已完成所有可自主执行的加固。 以下是只有你本人能做的,详细理由见 09-决策记录.md。

项优先级说明
QQ 扫码登录 NapCat🔴 高容器已就绪但未登录。开隧道 → http://127.0.0.1:16099/webui/ → 输 token → 扫码。步骤见 11-应用服务.md
安全组未放行 80/443🔴 阻塞已外部实测:仅 22/tcp + ICMP 可达。见 02-防火墙与端口.md 第 6、7 节
确认控制台 VNC 可登录🔴 最高密钥失效时的唯一抢救通道
登录后启用 OneBot 监控🟡 中改 monitors.json 的 "active": false → true,跑 sync.sh
评估 NapCat privileged 风险🟡 中privileged≈宿主 root,若不可接受需迁到独立机器
可选:配置自动快照策略🟡 中阿里云控制台,比脚本备份可靠
可选:cloud-init 是否升级⚪ 低被 hold 的开机关键组件

放行 80/443 的三条路径(按可行性排序) ​

路径需要什么适用
① 阿里云 API + AccessKey一个 RAM AccessKey(可在阿里云 App 或另一台能登录的机器生成)想彻底解决、开公网端口
② 反向隧道(Cloudflare Tunnel / frp)域名 + 对应账号;服务器主动出站建连不想动安全组,绕开入站限制
③ SSH 隧道无(现在就能用)只有你自己访问,调试/临时用

③ 立即可用:ssh -L 8080:127.0.0.1:80 tenodx,然后本机访问 http://localhost:8080。

✅ 已完成(自主决策执行) ​

项完成时间结果
防火墙 ufw04:05active,放行 22/80/443,FORWARD 放宽供 Docker
网络代理(美国 Z01)04:08SOCKS5 :1080 / HTTP :8118,px 助手,出口 142.249.36.77
系统升级04:10升级 18 个包,仅 cloud-init(hold)保留
Docker04:1129.9.3 + Compose v5.7.0,6 个可用加速源
关闭 SSH 密码登录04:16已验证密钥登录正常,密码登录被拒
关闭 X11 转发04:16—
fail2ban04:170.11.2,sshd jail,封禁动作走 ufw
2 GB Swap04:17已写入 fstab 持久化,swappiness=10
立规 "Docker 优先"04:2010-部署规范.md:除 5 类必裸装例外,软件一律容器化
PostgreSQL 1804:22容器化,仅 127.0.0.1:5432,每日备份
备份恢复演练04:321000 行数据完整还原;docker 重启后容器自恢复
SSH 隧道助手04:33scripts/tunnel.ps1,绕过安全组访问 loopback 服务
Uptime Kuma 2.5.905:009 项监控(8 启用),改用声明式 monitors.json + sync.sh
NapCat(OneBot 11)05:02容器 running,WebUI 200,待你扫码登录 QQ
栈配置备份05:13每日 03:35 备份 compose/.env/kuma.db/NapCat 配置
Caddy v2.11.905:18Web 入口:Host 路由 + basic auth + 落地页 + /healthz
监控扩到 10 项05:25新增 Caddy 监控;tunnel.ps1 加 web 服务

当前状态一句话总结 ​

阿里云北京区 Ubuntu 22.04.5,2C / 1.7 GB + 2 GB Swap / 40 GB(用了 31%)。 安全加固完成、Docker 就绪,运行 4 个容器:Caddy(Web 入口)、PostgreSQL 18、 Uptime Kuma 2.5.9(10 项监控)、NapCat(待 QQ 登录)。 数据库与栈配置均已自动备份。

公网只开放 22/tcp(安全组限制),所有服务通过 tunnel.ps1 隧道访问; 推荐走 Caddy 单端口入口,也可直连各服务端口。

TenoDX · 内部文档