有人用飞牛的吗?这一波飞牛的安全漏洞风波有点大
我自己有台群晖,飞牛刚开始出来的时候也关注过,但是考虑到目前的还能用,也懒得折腾,就没上飞牛。看来飞牛这种新创团队,做功能快速迭代可以,但在用户看不见摸不着感知不强的地方还是缺点功夫啊。
传送门: https://club.fnnas.com/forum.php?mod=viewthread&tid=53230
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
我自己有台群晖,飞牛刚开始出来的时候也关注过,但是考虑到目前的还能用,也懒得折腾,就没上飞牛。看来飞牛这种新创团队,做功能快速迭代可以,但在用户看不见摸不着感知不强的地方还是缺点功夫啊。
传送门: https://club.fnnas.com/forum.php?mod=viewthread&tid=53230
最近家里老人忧心忡忡发语音给我 让我好好待着不要乱走动,因为外国很乱… 安抚之后,在我一番追问下,果然是短视频,是微信视频号在作妖。
即使我常常拍了日常真实视频发回去,也架不住短视频这么轰炸洗脑。
以前禁止家里的小孩刷短视频,但是并不是很反对老人刷。因为小孩还在成长发育,需要营养。而老人这辈子也没啥追求了,乐呵乐呵挺好。但没想到会变成忧心忡忡…😓
我刚刚上去微信搜了一下日本、美国,视频页,好家伙,大开眼界。都是些什么乱七八糟的。我们的上一代和下一代都沉浸在这些垃圾中,真牛逼。
我能不给老人安装抖音快手,总不能不安装微信。微信短视频最下流的就是有人发了个视频号过来,然后就开启短视频流模式了。
微信作为国民级应用,人手一个,已经不是单纯的商业应用了,还是应该要点脸,干点人事吧。(即使要推视频号,也推点正常一点的吧…
今天分享一个我用 Vue3 开发的实用工具——时间戳转换器。它能快速完成时间戳与日期之间的转换,支持多时区、智能检测格式,完全免费且保护隐私。 在线工具网址:https://see-tool.com/timestamp-converter 工具截图: 时间戳是从 1970年1月1日 00:00:00 UTC 开始计算的秒数或毫秒数,是计算机表示时间的标准方式。 时间戳全球统一、便于计算,但人类难以直接理解,因此需要转换工具。 页面顶部实时显示当前的秒级和毫秒级时间戳,每秒自动更新,支持一键复制。适合快速获取当前时间戳用于测试或记录。 输入时间戳,自动转换为可读的日期时间,提供: 支持自动检测秒级/毫秒级格式,可选择不同时区显示。 选择日期时间,快速获取对应的秒级和毫秒级时间戳。支持选择输入时区,确保转换准确。 工具采用现代化前端技术栈: 所有计算在浏览器本地完成,不会上传任何数据到服务器,保证隐私安全。 Q: 时间戳会受时区影响吗? Q: 为什么转换结果不对? Q: 工具会保存我的数据吗? 时间戳转换器是开发者和数据工作者的必备工具。我用 Vue3 开发这个工具,希望能帮助更多人高效处理时间数据。工具完全免费、无广告、保护隐私,欢迎使用和分享! 技术栈: Vue 3 + Nuxt 3 + TDesign + Tailwind CSS 感谢使用!🎉工具介绍

什么是时间戳?
1706425716 (10位数字)1706425716000 (13位数字)核心功能
1. 实时时间戳显示 ⏰
2. 时间戳转日期 📅
3. 日期转时间戳 🔄
特色亮点
使用场景
技术实现
使用小技巧
常见问题
A: 不会!时间戳基于 UTC,全球统一。同一时刻在不同时区显示不同,但时间戳相同。
A: 检查是否混淆了秒级和毫秒级(相差1000倍),或时区设置不正确。
A: 完全不会!所有计算在本地完成,不上传任何数据。结语
特点: 多时区 | 智能检测 | 双语支持 | 隐私安全
开发: 个人开发,持续维护中
在全球投资版图中,德国作为欧洲最大的经济体,其法兰克福证券交易所(Frankfurt Stock Exchange)汇聚了 SAP、西门子、大众等工业与技术巨头。对于开发者而言,获取低延迟、高精度的德国股票数据是切入欧洲市场的首要任务。 本文将详细介绍如何使用 StockTV API,通过指定 在 StockTV 全球数据体系中,德国市场的接入非常标准化: 通过此接口,您可以分页获取德国市场所有上市公司的最新价格、涨跌幅及成交信息。 监控德国整体市场走势,DAX 指数是核心。 提供覆盖分钟级到月级的 K 线数据,支持毫秒级更新。 实时锁定德国市场的领涨股和领跌股,捕捉市场热点。 对于对速度有极致要求的量化系统或交易终端,StockTV 提供了更强大的推送能力: 以下代码展示了如何获取德国软件巨头 SAP 的实时行情: 对接德国股票市场不仅是获取数据,更是获取欧洲经济的脉搏。StockTV API 以其极简的集成难度和卓越的实时性能,为您的金融产品提供了强有力的支持。countryId=17 快速接入德国股市的实时行情、K线及指数数据。一、 德国市场接入核心参数
countryId): 17key=您的密钥 进行鉴权。二、 德国股票核心接口指南
1. 德国股票市场列表(实时全览)
https://api.stocktv.top/stock/stocks?countryId=17&pageSize=20&page=1&key=YOUR_KEYlast(最新价)和 time(毫秒级时间戳),确保数据新鲜度。2. DAX 指数及德国主要大盘指数
https://api.stocktv.top/stock/indicescountryId=17&key=YOUR_KEY3. 德股实时 K 线图表
https://api.stocktv.top/stock/klinepid={产品ID}&interval=PT15M(获取德国某只股票的 15 分钟 K 线)。PT1M(1分)、PT1H(1时)、P1D(天)等。4. 德国股市涨跌排行榜(异动监控)
https://api.stocktv.top/stock/updownListcountryId=17&type=1(type=1 为涨幅榜,type=2 为跌幅榜)。三、 极致实时性方案:从 HTTP 到 WebSocket
stocksByPids 接口一次性获取多个德国权重股的实时报价,减少网络往返延迟。四、 代码实战:Python 获取德国龙头股行情
import requests
def get_german_stock_quote(symbol="SAP"):
# 通过查询接口获取特定股票实时信息
url = "https://api.stocktv.top/stock/queryStocks"
params = {
"symbol": symbol,
"key": "YOUR_API_KEY" # 替换为您获取的真实Key
}
try:
response = requests.get(url, params=params)
res_data = response.json()
if res_data['code'] == 200 and res_data['data']:
stock = res_data['data'][0]
print(f"--- 德国股票实时行情 ---")
print(f"名称: {stock['name']}")
print(f"最新价: {stock['last']} EUR")
print(f"涨跌幅: {stock['chgPct']}%")
print(f"更新时间: {stock['time']}")
else:
print(f"查询失败: {res_data.get('message')}")
except Exception as e:
print(f"请求异常: {e}")
get_german_stock_quote()
五、 结语
我喜欢同时用好几个 Terminal CLI 工具来开发,甚至在同一个项目上混着用。
一方面是想跟上各家的最新特性,另一方面也是想保持技术敏感度——毕竟每个工具的思路和擅长点都不太一样,多用
用能学到不少东西。
但体验过程中,不同 CLI 之间的通信和同步一直困扰着我。
GitHub 地址: https://github.com/Alenryuichi/openmemory-plus
安装很简单,一行命令:
npx openmemory-plus install
会自动检测你用的 IDE ( Augment/Claude/Cursor/Gemini ),配置好双层记忆系统。
如果你本地没有 Docker/Qdrant/Ollama ,它也会引导你安装,或者直接用 Docker Compose 一键部署。
场景一:Git worktree 开发
我习惯用 worktree 并行开发多个功能分支。问题来了:
[main 分支]
我花了半小时教会 Claude 这个项目的部署流程:
- Vercel 项目 ID 是 prj_xxx
- 环境变量要从 .env.production 读
- 部署前要跑 pnpm build:check
- 有个坑:要先 invalidate CDN 缓存
[新建 worktree: feature/payment]
我:帮我部署到测试环境
Claude:好的,请问你用什么部署平台?
我:......我刚才不是说了吗
Claude:抱歉,我没有这个上下文
worktree 是干净的工作目录,不会带上之前对话的任何记忆。每次新建分支,都要重新教一遍。
场景二:让 AI 自动部署
上周我让 Claude 帮我配置了一套自动部署流程,改了 GitHub Actions ,配了环境变量,调了半天终于跑通了。
这周我想改点东西:
我:上次的部署配置,我想加个 Slack 通知
Claude:请问你目前的部署配置是怎样的?
我:就是上周你帮我配的那个啊
Claude:抱歉,我没有之前对话的记录。能否描述一下当前的部署流程?
它完全不记得自己做过什么。我得翻 Git 历史,一点点告诉它当时改了哪些文件、为什么这么改。
场景三:多 CLI 切换
[Gemini CLI] 早上
我:我习惯用 TypeScript ,包管理器用 pnpm
Gemini:好的,记住了!
[Augment] 中午
我:帮我创建一个新组件
Augment:请问你用 JavaScript 还是 TypeScript ?
我:......TypeScript
Augment:用 npm 还是 yarn 还是 pnpm ?
我:......
[Claude Code] 下午
Claude:你好!请问你的技术栈偏好是?
我:我真的累了
每个工具都是独立的记忆孤岛。每天都在重复自我介绍。
场景四:用 BMAD/OpenSpec 做需求管理
我试过用 BMAD 、OpenSpec 这类方法论让 AI 帮我管理需求,生成 Epic 、Story 、Proposal 文档。
一开始挺好的,AI 会帮你拆解需求、生成规范的文档结构。
但用了一个月之后:
项目根目录:
├── _bmad-output/planning-artifacts
│ ├── epic-user-auth.md # 三周前的
│ ├── epic-user-auth-v2.md # 两周前改过
│ ├── epic-payment.md # 上周的
│ ├── epic-payment-draft.md # 这是草稿还是正式的?
│ ├── story-login-flow.md # 这个做完了吗?
│ ├── story-login-flow-old.md # 为什么有个 old ?
│ ├── proposal-refactor-api.md # 这个提案通过了吗?
│ └── ...还有二十几个文件
问题来了:
没有自动清理 - 完成的任务、废弃的提案、过时的 Epic 全堆在那里,越积越多
新任务被旧文档干扰 - 我说"帮我做支付功能",AI 读到了三周前那个半成品的 epic-payment-draft.md ,开始基于错误的上下文工作
不知道什么是当前状态 - 哪些 Story 完成了?哪些 Proposal 被否决了?没有地方记录,全靠人脑记
版本混乱 - v2 、draft 、old 、final 、final-v2......命名全靠自觉,三天后自己都看不懂
后来我想,mem0/openmemory 不是号称能解决 AI 记忆问题吗?
试了一下,确实能跨工具共享记忆了。但新的问题来了:
所有信息都往一个地方塞 - 用户偏好、项目配置、部署记录全混在一起,搜索的时候一团糟
项目切换很痛苦 - 我有 5 个项目,每个项目的部署方式都不一样,但 openmemory 不区分项目
没有版本控制 - 部署配置改了,没有 Git 记录,下次想回滚都不知道之前是什么
要手动调用 - 每次都要主动告诉它"记住这个",但谁会在配置部署的时候还想着"我要让 AI 记住这个"?
所以我花了几周时间,在 openmemory 基础上做了一层增强:OpenMemory Plus
核心思路很简单:双层记忆架构 + 生命周期管理
用户级记忆 (openmemory) 项目级记忆 (_omp/memory/)
├── 我喜欢 TypeScript ├── 部署在 Vercel ,项目 ID 是 xxx
├── 我用 pnpm ├── 部署前要跑 build:check
├── 我熟悉 React/Node.js ├── 有个 CDN 缓存的坑要注意
└── 我偏好函数式风格 └── 上周加了 GitHub Actions
↑ ↑
跨项目共享 跟着 Git 走,worktree 也能读到
项目级记忆存在 _omp/memory/ 目录下,是普通的 Markdown/YAML 文件,会被 Git 追踪。
这意味着:
针对 BMAD/OpenSpec 那种文档爆炸的问题,我加了几个机制:
ROT 自动清理 - 识别冗余(Redundant)、过时(Obsolete)、琐碎(Trivial)的信息,定期提醒清理
状态追踪 - 每条记忆都有生命周期状态,完成的任务自动标记,不会干扰新任务
时间衰减 - 基于 Ebbinghaus 遗忘曲线,长期不用的记忆权重自动降低,搜索时不会优先出现
冲突检测 - 发现矛盾信息时主动提醒,比如"你之前说用 MySQL ,现在又说用 PostgreSQL ,以哪个为准?"
突然想到,没人说域名只能映射公网 IP 吧?
So ,如果我内网有个反代服务器,我将 A 记录 * 指向这个服务的内网 IP
那么我只要在这个服务器上配置好子域名的反向代理,剩下的只要利用 Tailscale 这样的组网工具将终端纳入到这个内网就好了。权限什么的完全可以只利用组网工具来做配置。
各位兄弟帮我想想有没有什么盲点哈哈哈
之前可以搞几十万的..官方的网页版本来的.
各位大佬好,想请教一个香港独服方案的定价与可行性,希望听听大家从成本、市场需求、风控/滥用、高防真实性等角度给建议。
方案草案(香港)
CPU:Intel Xeon E5-2680 v4 ( 14C/28T )
内存:16G / 32G (两档)
硬盘:1T / 2T 机械 或 128G / 256G SSD
带宽:100Mbps 高防(公平使用)
流量:按需购买,基础包 1T 或 10T (待定)可以加
定价:200-300CNY/月
想请教的问题
最近肥牛的 0day 漏洞很火,分享下我的观点:
普通人如果不对不特定公众人群提供网络服务的话,完全可以不对外暴露任何端口,以获得最大的数据安全。
那在外如何访问家里的数据呢,只需要一个中转服务,把当前设备的 IP 传递给家里的防火墙即可。分享下我的实现方式
其中第二步也可以简化为只运行一个轮询脚本,通过 cron job 不断轮询 cf worker 获取最新的白名单 IP 。时效性比通过 cf tunnel 监听稍差。自己有 VPS 的话可以通过其他方式与 VPS 建立一个长连接传递白名单 IP ,增加时效性
PyTorch 的即时执行模式在原型开发阶段很方便,但在推理性能上存在明显短板。每个张量操作独立启动 kernel、独立访问显存,导致内存带宽成为瓶颈GPU 算力无法充分利用。 torch.compile 通过提前构建计算图来解决这个问题。它的核心策略是操作融合和缓冲区复用:第一次调用需要编译而之后的推理会快很多。在 PyTorch 官方的基准测试中,各种模型平均获得了 20%-36% 的加速。 即时执行意味着每个操作独立运行。一个 32 层、每层 100 个操作的模型,前向传播一次就要触发 3200 次 kernel 启动,这些开销全部叠加到推理延迟里。 比如说这个简单的表达式 ,即时执行模式下至少要六次内存传输:分别读 a、b、c,写矩阵乘法结果,读这个结果,写最终输出。内存带宽很快就被打满了,GPU 核心反而闲着。 生产环境下情况更糟。CPU 要处理成千上万的并发请求,花在 PyTorch 调度器上的时间可能比真正计算还多,吞吐量被严重拖累。 torch.compile 要解决的就是这种逐操作的开销。它会提前捕获整个计算图,核心靠两个组件:TorchDynamo 是一个 Python JIT 编译器,负责拦截字节码执行;TorchInductor 是后端,为 GPU 生成优化过的 Triton kernel,为 CPU 生成 C++ 代码。 TorchInductor 拿到 FX 图后会做三件事:操作融合、内存规划、Triton 自动调优。 还是前面那个例子 。即时执行要六次 VRAM 传输,TorchInductor 把它们融合成一个 Triton kernel:先把 a、b、c 的分块加载到片上 SRAM(共享内存),在寄存器里算矩阵乘法,加法和 ReLU 也在寄存器里做完,最后只把结果写回 VRAM。 内存传输从 6 次降到 2 次,减少了 3 倍。 TorchInductor 不会给每个中间结果都分配新内存,而是让生命周期不重叠的缓冲区共用同一块空间——和编译器复用寄存器是一个思路。这相当于在整个计算图上做全局缓冲区复用,对激活模式不规则的 Transformer 模型特别有效。另一个好处是压低峰值内存占用,能跑更大的 batch。 Triton 自动调优会针对具体硬件和输入 shape,自动搜索最优的 kernel 配置:tile 大小、线程块维度、流水线深度这些参数都不用手动调。 第一次调用时,大模型的编译可能要几分钟。但后续调用只需要几毫秒加载预编译好的 kernel。初始开销会在后续推理中摊销掉,特别适合生产场景下模型持续运行的情况。冷启动慢一点,后面每个请求都快很多。 PyTorch 官方在 165 种模型(Transformer、CNN、扩散模型都有)上做了基准测试,torch.compile 在 float32 精度下平均加速 20%,开启自动混合精度(AMP)后加速 36%。 用起来也很简单: 这就是 torch.compile 的大致原理:不再为每个操作单独启动 kernel、单独搬运数据,而是用一个 kernel 处理多个操作,共享内存缓冲区。内存瓶颈的影响被大幅削减,GPU 算力利用率上去了。 这种加速具有普适性,不只对大语言模型有效,CNN、扩散模型等架构同样适用。torch.compile 的价值在于:它把原本需要手写 CUDA 或 Triton 才能实现的优化,封装成了一行代码的事情。对于生产环境下的推理服务,这是目前性价比最高的优化手段之一。 https://avoid.overfit.cn/post/271bbf42f4a946c3a92b8a9745e223db 作者:Aryan Keluskar
延迟飙升的根本原因是什么?内存才是即时执行成为瓶颈。Nvidia H100 能跑到 300+ TFLOPs但内存带宽只有约 3 TB/s。所以内存搬运的代价太高了,即时执行模式在规模化场景下根本撑不住。每个操作至少要做三次内存访问:从 VRAM 读输入张量、把中间结果写回 VRAM、再从 VRAM 读权重。x = torch.relu(torch.matmul(a, b) + c)
所以问题的本质在于:独立的操作没法融合内存传输,造成大量冗余的 VRAM 访问。计算图


PyTorch 里这个计算图叫 FX Graph,把操作表示成有向无环图(DAG)的节点。调用 torch.compile 时,TorchDynamo 分析 Python 字节码,生成 FX 图:节点是张量操作,边是数据依赖。操作融合
x = torch.relu(torch.matmul(a, b) + c)内存规划
Triton 自动调优
结果
import torch
# For a model
model = YourModel()
compiled_model = torch.compile(model)
# Or for a function, also enables Triton autotuning
@torch.compile(backend="inductor")
def forward_pass(x, weights):
return torch.relu(torch.matmul(x, weights))
output = compiled_model(input_tensor)总结
IEEE 近日发布了一项新的隐私标准:7012-2025 IEEE 标准,其昵称为 MyTerms。该标准定义了一套机制,用于在个人与在线服务提供方之间交换个人信息,并明确规定个人如何在交易过程中执行自身的隐私要求。 这一新标准在伦敦举行的一场活动上正式发布。Linux Journal 主编、《The Intention Economy: When Customers Take Charge》一书作者,同时也是 MyTerms 最早倡导者之一、该标准委员会联合主席的 Doc Searls 在现场介绍了这一标准。他将 MyTerms 描述为一种尝试:把我们在现实世界中对“隐私”的理解,与在线世界重新对齐。 Searls 表示,MyTerms 是一次“彻底翻转既有规则”的尝试。在这一模式下,用户成为“第一方”,不再被动接受网站条款,而是通过选择一套预先定义的条款,或使用一份可在不同网站间通用的默认协议,来主动决定自己如何与作为“第二方”的服务和产品提供者互动。 这些条款既可以用于持续性的关系,比如“仅用于服务交付”或“在支持数据可携带性的前提下用于服务交付”,也可以用于一次性的数据贡献场景,例如“用于 AI 训练和运行”“共享意图数据”等。一旦第二方接受相关条款,该条款即构成一份合同,在法律上约束其必须按照第一方的约定方式使用数据。 MyTerms 协议以机器可读格式定义,可以通过 HTTP 头信息或其他机制进行传输。协议双方都会各自保留一份完全一致的记录。 Searls 指出: 这一机制将使 Cookie 提示彻底过时,并为个人与组织、客户与企业、需求与供给之间的关系奠定更加稳固的基础。 专注于数字身份与用户主导个人数据的公司 Customer Futures Ltd. 创始人 Jamie Smith 也表示:“我们已经接近当前在线模式的可接受极限。人们不断点击自己根本不会阅读的条款和条件,……而这些条款并没有真正完成它们应该承担的功能。” Smith 认为,在当前这个由 AI Agent 逐渐替代人类进行上网操作的时代,MyTerms 显得尤为重要。这些 AI Agent 正在代表用户完成购物、预订、投诉处理、与各类机构互动等任务,而 Cookie 并不适用于“代理型商业”(agentic commerce)。在未来,每个 Agent 都将拥有自己的身份,并发布自己的条款,也就是合同。 他表示: 随着 Agent 成为新的客户渠道,MyTerms 将成为企业与 Agent 之间建立信任、并展开交互的重要基石。 Consumer Reports 实验工程负责人 Dan Leninger 描绘了一个未来场景:用户通过在线推荐系统购买一件家电。用户不仅会提交自己的 MyTerms 条款,还会附加额外条件,例如最高价格、最晚交付时间等。推荐系统随后只会展示那些已接受用户条款的商家,用户即可完成购买。 年龄验证平台 Yoti 的首席商务官 John Abbott 则讨论了 MyTerms 对儿童的潜在影响,尤其是在年龄验证方面。他认为,MyTerms 为个人根据自身年龄明确数据使用方式提供了一种更合适的机制,也有助于企业应对全球范围内日益严格的监管要求。 MyTerms 标准的制定历时约八年,其项目授权请求(Project Authorization Request,PAR)最早于 2017 年 12 月提出并获得批准。若想进一步深入了解 MyTerms,可以阅读 Doc Searls 围绕该主题撰写的大量文章。 原文链接:

视频点播业务,波形图如下,支持按流量计费/日 95 计费,用量预估 3000PB/年左右
日 95 计费要求:4400/Gbps 以下
流量计费要求 21/TB 1 系数 1024 进制
人民币支付
能做到这个价以下请留下联系方式

本文在 kt新增功能点 离线环境部署增强。常用国际和国产操作系统依赖,内置到安装包中。已适配芯片和操作系统如下 支持开启防火墙,只暴露 kt版本更新和下载地址 服务器基本信息 <!-- 这是一张图片,ocr 内容为: --> 操作系统不需要安装docker,不需要设置selinux,swap等操作,全新的操作系统即可。 将离线制品、配置文件、kt和sh脚本上传至服务器其中一个节点(本文以master为例),后续在该节点操作创建集群。本文使用kt: <!-- 这是一张图片,ocr 内容为: --> 根据实际服务器信息,配置到生成的 解压 该命令 <!-- 这是一张图片,ocr 内容为: --> 此命令会在 <!-- 这是一张图片,ocr 内容为: --> <!-- 这是一张图片,ocr 内容为: --> <font style="background-color:rgb(255,245,235);">说明:</font> <font style="background-color:rgb(255,245,235);">Harbor 管理员账号:</font><font style="background-color:rgb(255,245,235);">admin</font><font style="background-color:rgb(255,245,235);">,密码:</font><font style="background-color:rgb(255,245,235);">Harbor@123</font><font style="background-color:rgb(255,245,235);">。密码同步使用配置文件中的对应password</font> <font style="background-color:rgb(255,245,235);">harbor 安装文件在 /opt/harbor<font style="background-color:rgb(255,245,235);"> 目录下,可在该目录下对 harbor 进行运维。</font> 创建 Harbor 项目 <!-- 这是一张图片,ocr 内容为: --> 此命令kt会自动将离线制品中的镜像推送到 执行后会有如下提示,输入 <!-- 这是一张图片,ocr 内容为: --> 等待一段时间,直至出现熟悉的等待安装完成的小箭头>>---> <!-- 这是一张图片,ocr 内容为: --> 期间可以另开一个窗口用以下命令查看部署日志 继续等待一段时间,可以看到在内核3.10.0上面使用containerd成功部署了1.30.14版本+ks <!-- 这是一张图片,ocr 内容为: --> <!-- 这是一张图片,ocr 内容为: --> ps: 登录页面 <!-- 这是一张图片,ocr 内容为: --> 集群管理 <!-- 这是一张图片,ocr 内容为: --> 集群节点 <!-- 这是一张图片,ocr 内容为: --> 监控告警 <!-- 这是一张图片,ocr 内容为: --> 集群信息 <!-- 这是一张图片,ocr 内容为: --> 节点情况 <!-- 这是一张图片,ocr 内容为: --> 配置文件默认只安装了监控,如果需要安装其他组件,可以自行在自定义资源中开启 <!-- 这是一张图片,ocr 内容为: -->鲲鹏920和openEuler,从0开始使用Containerd部署k8s1.30.13+Ks。1.说明
关于kt
kt是基于kk二次开发的产物,具备kk的所有功能。二开主要为适配信创国产化环境、简化arm部署过程和国产化环境离线部署。支持arm64和amd64架构国产操作系统,已适配芯片+操作系统 如下。./kt init-os 一条命令完成操作系统依赖安装和初始化操作。30000-32767端口,其他k8s端口添加到节点白名单。./kt firewall 一条命令自动获取节点信息开白名单和防火墙。2.环境准备

主机名 架构 OS 配置 IP master arm64 openEuler 2核4G 192.168.0.101 node arm64 openEuler 2核4G 192.168.0.133 harbor arm64 openEuler 2核4G 192.168.0.232 2.1 上传离线制品
3.1.13.1版本
2.2 修改配置文件
config-sample.yaml中kind: Cluster
metadata:
name: sample
spec:
hosts:
- {name: master, address: 192.168.0.101, internalAddress: 192.168.0.101, user: root, password: "123213", arch: "arm64"}
- {name: node1, address: 192.168.0.133, internalAddress: 192.168.0.133, user: root, password: "123213", arch: "arm64"}
- {name: harbor, address: 192.168.0.232, internalAddress: 192.168.0.232, user: root, password: "123213", arch: "arm64"}
roleGroups:
etcd:
- master
control-plane:
- master
worker:
- node1
# 如需使用 kt 自动部署镜像仓库,请设置该主机组 (建议仓库与集群分离部署,减少相互影响)
# 如果需要部署 harbor 并且 containerManager 为 containerd 时,由于部署 harbor 依赖 docker,建议单独节点部署 harbor
registry:
- harbor
controlPlaneEndpoint:
## Internal loadbalancer for apiservers
internalLoadbalancer: haproxy
domain: lb.kubesphere.local
address: ""
port: 6443
kubernetes:
version: v1.30.14
clusterName: cluster.local
autoRenewCerts: true
containerManager: containerd
etcd:
type: kubekey
network:
plugin: calico
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
multusCNI:
enabled: false
registry:
type: harbor
registryMirrors: []
insecureRegistries: []
privateRegistry: "dockerhub.kubekey.local"
namespaceOverride: "kubesphereio"
auths: # if docker add by `docker login`, if containerd append to `/etc/containerd/config.toml`
"dockerhub.kubekey.local":
username: "admin"
password: Harbor@123 # 此处可自定义,kk3.1.8新特性
skipTLSVerify: true # Allow contacting registries over HTTPS with failed TLS verification.
plainHTTP: false # Allow contacting registries over HTTP.
certsPath: "/etc/docker/certs.d/dockerhub.kubekey.local"
addons: []2.3 系统初始化
kt-centos.tar.gz文件后执行./kt init-os -f config-sample.yaml 已适配操作系统和架构见1.说明kt会根据配置文件自动判断操作系统和架构以完成所有节点的初始化配置和依赖安装。
3 创建 Harbor私有仓库
3.1 创建镜像仓库
./kt init registry -f config-sample.yaml -a artifact-arm-k8s13014-ks3.4.1.tar.gzharbor节点自动安装docker和docker-compose

3.2 创建harbor项目
chmod +x create_project_harbor.sh && ./create_project_harbor.sh
4 创建k8s和KubeSphere
./kt create cluster -f config-sample.yaml -a artifact-arm-k8s13014-ks3.4.1.tar.gzharbor 私有仓库yes/y继续执行

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
5 验证

default-http-backend那个pod显示:ImagePullBackOff,没啥用,不需要理会。






containerd 2.x 对镜像仓库配置进行了结构化优化,所有相关配置均集中在 首先通过以下命令验证 containerd 版本是否为 2.x 系列: 根据 Harbor 仓库地址创建对应的配置目录,目录名需与仓库域名(或 IP)严格匹配(示例中 Harbor 仓库地址为 harbor.liyb.com): 创建并编辑 添加如下配置内容: 配置说明: 检查 containerd 主配置文件 toml 通过 nerdctl 工具拉取 Harbor 仓库镜像,验证配置是否生效: 成功输出示例: plaintext 在 Kubernetes 节点上通过 crictl 工具拉取镜像(适用于 K8s 集群环境):一、核心配置结构说明
/etc/containerd/certs.d/ 目录下,遵循 "一仓库一目录" 的配置原则:hosts.toml 文件,用于定义仓库连接参数hosts.toml 核心配置项:仓库服务地址(server)、操作权限(capabilities)、认证信息(auth)、证书验证开关(skip\_verify)二、分步配置实战
1. 版本确认
\\\[root@k8s-master ~]# containerd --version
containerd containerd.io v2.2.0 1c4457e00facac03ce1d75f7b6777a7a851e5c412. 创建配置目录
mkdir -p /etc/containerd/certs.d/harbor.liyb.com注意:若仓库未使用域名(直接通过 IP 访问),可直接以 IP 地址作为目录名(如
/etc/containerd/certs.d/192.168.1.100)3. 编写 hosts.toml 配置文件
hosts.toml 文件,配置仓库连接参数:vi /etc/containerd/certs.d/harbor.liyb.com/hosts.tomlserver = "https://harbor.liyb.com"
\\\[host."https://harbor.liyb.com"]
capabilities = \\\["pull", "resolve", "push"] # 支持的操作:拉取、解析、推送
skip\\\_verify = true # 自签名证书时启用(跳过证书验证)
\\\[host."https://harbor.liyb.com".auth]
username = "admin" # Harbor 登录用户名
password = "Harbor12345" # Harbor 登录密码skip\\\_verify = true,只需将 CA 证书文件放置到对应配置目录(如 /etc/containerd/certs.d/harbor.liyb.com/)即可capabilities = \\\["pull", "resolve"]4. 确认主配置文件路径
/etc/containerd/config.toml 中是否正确指定了仓库配置路径,确保以下配置项存在且无误:# /etc/containerd/config.toml
\\\[plugins."io.containerd.grpc.v1.cri".registry]
config\\\_path = "/etc/containerd/certs.d" # 仓库配置目录路径(默认已启用)注意:containerd 2.x 默认启用该配置,但生产环境部署时务必手动校验,避免路径配置错误导致配置失效
三、配置验证方法
1. 使用 nerdctl 验证(推荐)
nerdctl pull harbor.liyb.com/prod/nginx:1.27harbor.liyb.com/prod/nginx:1.27: manifest-sha256:114dff0fc8ee3d0200c3a12c60e3e2b79d0920dd953175ecb78a0b157425b25e: done
config-sha256:1e5f3c5b981a9f91ca91cf13ce87c2eedfc7a083f4f279552084dd08fc477512: done
elapsed: 0.1 s
total: 0.0 B (0.0 B/s)2. Kubernetes 节点验证
crictl pull harbor.liyb.com/prod/nginx:1.27关键注意点:镜像名称必须显式包含 Harbor 仓库地址(完整格式:仓库地址 / 项目名 / 镜像名:标签),否则会导致 K8s Pod 拉取镜像失败
四、高频踩坑与解决方案

OpenClaw Gateway 默认绑定在 SSH 隧道的优势: 在 Windows PowerShell 中运行: 参数说明: 实际示例: 隧道建立后,在浏览器打开: 或者打开 每次 SSH 都输密码很麻烦,配置密钥认证可以实现免密登录。 打开 PowerShell,运行: 提示时一路回车(不设置密码)。 会生成两个文件: 运行以下命令(一行): 实际示例: 这次需要输入密码,之后就不用了。 如果显示 在桌面(或任意位置)创建 原因: 虚拟机未启动或 SSH 服务未运行。 解决: 原因: 服务器指纹变更(重装系统等)。 解决: 检查清单: 服务器端权限: 确认公钥已添加: 检查 SSH 配置: 原因: Token 验证失败。 解决: 直接重新运行 Windows 上可以用 或者使用 配置一次,以后只需双击脚本即可连接! 文档整理于 2026-02-03 本文由mdnice多平台发布OpenClaw 远程访问配置指南:SSH 隧道与免密登录
本文介绍如何从 Windows 访问部署在虚拟机/远程服务器上的 OpenClaw Gateway,包括 SSH 隧道配置和免密登录设置。
目录
一、场景说明
网络架构
┌─────────────────────┐ ┌─────────────────────┐
│ Windows 主机 │ │ 虚拟机/服务器 │
│ │ SSH 隧道 │ │
│ 浏览器 ◄───────────┼───────────────────►│ OpenClaw Gateway │
│ localhost:18790 │ 端口转发 │ 127.0.0.1:18789 │
└─────────────────────┘ └─────────────────────┘为什么需要 SSH 隧道?
127.0.0.1(本地回环),这是最安全的配置。直接绑定 LAN IP 可能会遇到 WebSocket 认证问题(1008 错误)。二、SSH 隧道访问
基本命令
ssh -N -L 18790:127.0.0.1:18789 用户名@虚拟机IP参数 说明 -N不执行远程命令,只做端口转发 -L本地端口转发 18790Windows 本地端口(可自定义) 127.0.0.1:18789虚拟机上的 Gateway 地址 用户名@虚拟机IPSSH 登录信息 ssh -N -L 18790:127.0.0.1:18789 maple@162.16.30.210访问 Gateway
http://localhost:18790/?token=你的Tokenhttp://localhost:18790,然后手动输入 Token。三、配置免密登录
步骤 1:生成 SSH 密钥(Windows)
ssh-keygen -t ed25519C:\Users\你的用户名\.ssh\id_ed25519 — 私钥(保密)C:\Users\你的用户名\.ssh\id_ed25519.pub — 公钥(可公开)步骤 2:复制公钥到服务器
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh 用户名@虚拟机IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh maple@162.16.30.210 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"步骤 3:测试免密登录
ssh maple@162.16.30.210 "echo 免密登录成功"免密登录成功 而不要求输密码,配置完成!四、创建快捷启动脚本
创建批处理文件
openclaw隧道.bat:@echo off
chcp 65001 >nul
echo ========================================
echo OpenClaw Gateway SSH 隧道
echo ========================================
echo.
echo 正在连接到 Gateway...
echo.
echo 连接成功后,请访问:
echo http://localhost:18790
echo.
echo [!] 保持此窗口开启
echo [!] 关闭窗口会断开连接
echo.
echo ----------------------------------------
ssh -N -L 18790:127.0.0.1:18789 maple@162.16.30.210将
maple@162.16.30.210 替换为你的实际用户名和 IP。使用方法
openclaw隧道.bathttp://localhost:18790进阶:创建桌面快捷方式
openclaw隧道.bat → 创建快捷方式五、常见问题
Q1: 连接时提示 "Connection refused"
# 在虚拟机上检查 SSH 服务
sudo systemctl status sshd
# 如果未运行,启动它
sudo systemctl start sshdQ2: 连接时提示 "Host key verification failed"
# 删除旧的指纹记录
ssh-keygen -R 162.16.30.210Q3: 免密登录不生效
# 在虚拟机上执行
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keyscat ~/.ssh/authorized_keys# 确保这些选项没有被禁用
grep -E "PubkeyAuthentication|AuthorizedKeysFile" /etc/ssh/sshd_configQ4: 浏览器显示 1008 错误
~/.openclaw/openclaw.json 中的 gateway.auth.token)Q5: 隧道断开后如何重连?
openclaw隧道.bat 或 SSH 命令即可。Q6: 如何让隧道后台运行?
start 命令:start /min ssh -N -L 18790:127.0.0.1:18789 maple@162.16.30.210nssm 等工具将其注册为 Windows 服务。附录:相关配置参考
OpenClaw Gateway 配置位置
~/.openclaw/openclaw.json查看 Gateway Token
cat ~/.openclaw/openclaw.json | grep -A2 '"auth"'重启 Gateway
openclaw gateway restart查看 Gateway 状态
openclaw status
openclaw health总结
步骤 命令/操作 1. 建立隧道 ssh -N -L 18790:127.0.0.1:18789 user@host2. 生成密钥 ssh-keygen -t ed255193. 复制公钥 `type ... \ ssh user@host "..."` 4. 创建脚本 保存为 .bat 文件双击运行5. 访问 http://localhost:18790/?token=xxx
适用于 Windows 连接 Linux 虚拟机/服务器上的 OpenClaw
核心摘要 (TL;DR) Ollama因为有llama.cpp库和量化技术的加成,是可以在cpu和更日常的电脑上运行的,但是性能是远比不上在专业的显存设备上的。 一言概之,Google Colab = Jupyter Notebook + 云端服务器 在新的notebook界面,我们可以看到 在界面介绍时,咱们快速介绍了一下两种单元格:代码块和文本块,接下来可以稍微多了解一点点这两种单元格 就是我们的主力战场,编写Python代码的地方,可以快速体验一下使用流程 jupyter notebook是支持直接渲染markdown格式的文档的,所以也有人直接用它当文档。相比于我们用注释去记录,markdown格式的文本块会更直观。 默认状态下Colab是使用的CPU,我们接下来去开启GPU 在notebook代码块中以 我们使用Colab主要是为了使用大模型以及训练大模型,对于Colab而言,模型的下载有个痛点:Colab是临时的,哪怕我们通过命令下载了好几个G的模型,甚至好几十G的模型,但是每次重置运行时的时候,这一切都会灰飞烟灭,消散如烟。为了避免每次都重新下载,浪费时间,我们可以通过挂在Google Drive来保存模型。 在下载受限模型(如 Llama 3)时,你需要 Hugging Face Token。 因为咱们在Colab环境,是国外的魔法环境,我们可以直接使用hugging face来下载模型,我们接下来指定一下模型下载的缓存路径到挂载的Google Drive。 看到的结果应该是15G大小的文件 一般情况下,建议模型下载和数据处理都在CPU模式下进行,然后处理完毕存入云盘. 4. 然后新建代码块,运行如下代码,来确认模型是否能够被识别 Q: CPU 和 GPU 跑大模型,性能差异到底有多大? Q: 那一台 RTX 4090 能运行多大的模型?能微调多大? 推理 (运行): 微调 (训练): Q: 动态脚本语言 (Python) 和常规预编译语言 (C++/Java) 有什么区别? Q: Colab 里的 T4, A100, TPU 都有什么差别? 本文作者: Algieba[大模型实战 03预备] 云端炼丹房 1:Google Colab 上手指南
前言
有高端显卡(NVIDIA 4090/5090/A100/H100),可以在自己的服务器上脱缰运行小规模的大模型。但是对于没有高端显卡设备的友人们也不用担心, 我们可以使用谷歌大善人带给我们的免费GPU算力:爱来自Google Colab。 本篇博文的主要目的就是提前带各位友人们从零上手Colab的核心操作,确保在我们后续的实战过程中的流畅操作。1. Google Colab
2. 快速介绍
2.1 访问与创建



2.2 界面介绍





3. 核心操作
3.1 代码块
Shift + Enter)
前面的序号标明代码块的执行顺序,因为我们可以乱序执行,执行完下方代码块再回来执行前面的代码块3.2 文本块


4. 开启免费GPU算力



!nvidia-smi
从返回的表格结果中,能看到咱们的设备是TeslaT4。!开头即可运行命令,这里等效为在terminal中运行nvidia-smi
PS:除了切换文件夹得用%cd而不是!cd5. 下载大模型
5.1 挂载Google Drive
from google.colab import drive
drive.mount('/content/drive')

5.2 配置HuggingFace环境变量和Token
HF_TOKEN。
5.3 指定缓存路径下载
from google.colab import drive
import os
# 1. 挂载云盘
if not os.path.exists('/content/drive'):
drive.mount('/content/drive')
# 2. 准备目录
cache_dir = "/content/drive/MyDrive/huggingface_cache"
os.makedirs(cache_dir, exist_ok=True)
# 3. 设置 Token (如果你在左侧 Secrets 设置了 HF_TOKEN,这里自动读取)
# 如果没设置,请手动把下行代码引号里换成你的 token,或者留空试下(Qwen 有时不需要)
my_token = os.getenv('HF_TOKEN') or ""
print("屏幕可能会静止 5-10 分钟,请盯着左边的小圆圈转动即可。")
cmd = f"huggingface-cli download Qwen/Qwen2.5-7B-Instruct --cache-dir {cache_dir} --quiet"
if my_token:
cmd += f" --token {my_token}"
# 执行命令
result = os.system(cmd)
if result == 0:
print("\n 下载成功!")
else:
print("\n 下载失败,请检查网络或 Token。")# check disk usage (查看磁盘占用)
# -s: 汇总大小, -h: 人类可读格式 (GB/MB)
!du -sh /content/drive/MyDrive/huggingface_cache/models--Qwen--Qwen2.5-7B-Instruct
import os
import glob
from transformers import AutoConfig, AutoTokenizer
# 1. 设置你的缓存根目录
base_cache_path = '/content/drive/MyDrive/huggingface_cache'
# 2. 构造快照目录的通配符路径
# 结构通常是: base / models--ID / snapshots / <哈希值>
snapshot_pattern = os.path.join(
base_cache_path,
"models--Qwen--Qwen2.5-7B-Instruct",
"snapshots",
"*" # 这里用 * 匹配那个随机生成的哈希文件夹
)
# 3. 寻找真实的文件夹路径
found_folders = glob.glob(snapshot_pattern)
if not found_folders:
print(" 错误:找不到 snapshots 文件夹,请检查下载是否成功或路径是否正确。")
else:
local_model_path = found_folders[0]
print(f"锁定本地模型路径: {local_model_path}")
print("正在尝试直接加载...")
try:
config = AutoConfig.from_pretrained(local_model_path)
tokenizer = AutoTokenizer.from_pretrained(local_model_path)
print("\n成功!模型可以被正确加载。")
print(f"模型隐藏层维度: {config.hidden_size}")
print(f"词表大小: {tokenizer.vocab_size}")
except Exception as e:
print(f"\n加载依然失败。可能是 Google Drive 的软链接失效了。")
print(f"错误信息: {e}")
05. 常见问题 (Q&A)
A: 差异巨大,就像法拉利和拖拉机的区别。
A: RTX 4090 拥有 24GB 显存,这是核心瓶颈。
A:
A:
本文链接: https://blog.algieba12.cn/llm02-1-online-environment-colab/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
大规模的丢包,丢的一塌糊涂

酣畅淋漓的战斗,博德之门 3 和神界原罪 2 一样,拉怪到窄道胜率高达 90%
。