🏠 HomeLab:中年男人之友
未读中年男人的三大爱好:充电头、NAS、软路由。这三大爱好不仅为我们的生活带来了便利,也成为了我们生活的一部分(🤡)。 作为一个软件开发者,我一直梦想着拥有自己的服务器,而 NAS 和软路由则是我通往这个梦想的桥梁。 自从购买了我的第一台 NAS 以来,便打开了一扇新世界的大门。NAS,即网络附加存储(Network Attached Storage),它不仅提供了一个安全的数据存储解决方案,还让我能够实现数据的备份和共享。随着时间的推移,我陆续购买了其他硬件产品,如软路由器、服务器等,逐步搭建起了属于我的 HomeLab。 今天,我想和大家分享一下我搭建 HomeLab 的过程,希望能够帮助到那些同样有志于搭建 HomeLab 的朋友。在接下来的博客文章中,我将详细介绍如何选购合适的 NAS 设备、软路由器以及服务器,并分享我在搭建过程中遇到的挑战和解决方案。 HomeLab 并非遥不可及,只要我们用心去探索和实践,就能开启属于自己的个人云端实验室之旅。让我们一起学习、交流和成长,共同打造一个属于我们的数字王国。 前提说明虽然关于 HomeLab 的文章已经很多了,但我还是想记录下自 ...
缘起:一根涨价的内存条前段时间 DDR 内存又开始涨价。不是那种温吞吞的 5%、10%,是肉眼可见的”今天不买,明天再贵 15%”的涨法。我盯着家里那台常年挂在客厅角落的 x86 服务器看了一会儿:48G 内存、二手 Intel U、跑着几个不痛不痒的小服务,功耗一天十几度电。 算了下账: 这台服务器里的内存、硬盘、平台,按现在的行情出掉正好能贴一台 Mac Studio M2 Ultra 的钱; 一台 Mac Studio 的待机功耗不到原服务器的三分之一; 更关键的是,M2 Ultra 能跑 32B / 70B 的大模型,我那台 x86 不行。 于是冲动下单了。拆机、清灰、寄出、到款、拿新机,全流程一周搞定。 拆完之后盘点了一下现状,家里现在一共有 3 台 Mac: 机器 用途 大致算力 Mac Studio M2 Ultra(新到) 主力推理 24 核 GPU,70B 级别量化模型能流畅跑 Mac mini M4 Pro 常驻开发 + 备用推理 7B–32B 小模型毫无压力 Mac mini M2 跑各种乱七八糟的小服务 3B–7B 够用 ...
🏠 HomeLab:中年男人之友
未读背景:运维账到了该清的时候这个博客我折腾着折腾着,已经变成一个”小站点、大后台”的状态了。 主站是 Hexo 静态页面,听上去很轻,但后面挂了一堆支撑服务:评论、搜索、统计、访问计数、AI 摘要、TTS、GitHub 贡献热力图、朋友圈聚合、短链、API 聚合……一数吓一跳,加起来有三四十个大大小小的进程。 这些服务过去分散在 好几台 PVE 节点上跑,分工大概是这样: A 节点跑数据库一类的基础设施 B 节点跑博客主系统和反向代理 C 节点跑一些 Node.js 的小微服务 D 节点跑监控、AI 平台之类的东西 听起来挺合理——按职责拆机器。但实际用下来,运维账越算越难看: 一次例行升级要 SSH 四五台机器,每台的 Docker Compose 文件风格都不一样 备份脚本有四五套,谁新增了服务我都得同步去改 服务之间的依赖关系横跨节点,数据库在 A,应用在 B,出问题排查要跨机器看日志 任何一台 PVE 节点挂了,我都得跑去柜子前面插显示器排障 功耗也不低,四台机器常年 7×24 开着,电费肉眼可见 同期我新上了一台 Mac Studio M2 Ultra 给 AI ...
🖥️ 基础设施与运维
未读背景起因是家里 Homelab 的一台 NUC 升级,给它加了张 Intel X520-2 双口万兆,顺手把 NAS(DS923+)那边也换上了万兆。理论上这套组合应该是”一步到位、全屋万兆起飞”的那种。 但真正测下来,iperf3 从 NUC 打到 NAS 只有大概 950Mbps。 ethtool enp2s0f0 明明写着 Speed: 10000Mb/s 和 Link detected: yes,我盯着那一行看了半天。硬件、线缆、交换机、NAS 全都换过交叉验证过,问题死死卡在这台 NUC 上。 最后折腾下来才发现根本不是硬件的锅,是 Linux 网络里一个经典得不能再经典的坑:ARP Flux——多张网卡挂在同一个子网里,彼此抢答 ARP,导致流量走错路径。 这篇文章把完整的排查链路、每一步的命令和我当时的判断都写出来,既是给未来的自己留个底,也希望你以后踩到类似问题时能少走一圈弯路。 环境说明先把桌面摆开,这台 NUC 上一共挂了 4 张网卡: 接口 IP 类型 Bridge enp2s0f0 192.168.31.99 Intel X520 10G v ...
前言家里这些年陆陆续续堆起来的服务器,现在打开 ~/.ssh/config 数了一下,大大小小十几个 entry:PVE 主节点、PVE 子节点、NAS、软路由、一堆 LXC、几台跑服务的虚拟机、再加上两台 Mac mini。 多了之后就有个很典型的痛苦场景: “我之前写过一条 ffmpeg 命令把 MKV 转 MP4 的,在哪台机器上来着?” 然后就开始 ssh 每台机器跑一遍 history | grep ffmpeg,还翻不到。因为 zsh 默认的 history 是按机器本地存的,一旦换了机器就没了。更烦的是有时候想在一批新机器上统一跑几条命令(比如同步 docker compose 配置、修 sshd_config),还得一台一台粘贴,粘着粘着就怀疑人生。 我之前也试过 Atuin,功能更花哨,但它的 TUI 相对重一些,而且我只想要一个”跨机器搜索 + 执行时的完整上下文“,并不需要太多仪式感。最后选定了 hishtory,理由很简单: 记录的上下文足够多:命令、cwd、退出码、运行时长、主机名、时间,一条都不少; 自带端到端加密 + 自建后端,数据全在家里机 ...
🏠 HomeLab:中年男人之友
未读背景:我只是想让那块小屏幕别闲着家里那台服务器是主力 Homelab,24 小时跑着 PVE、几个 LXC、几组 Docker。之前监控全靠 Grafana + Nezha,看得很全,但有个问题:每次我想”扫一眼当前状态”,都得掏手机或者切到电脑上的浏览器。 某天翻出一块以前买摄像头配的 7 寸 HDMI 小屏幕,突然就想:要是把它接到服务器 HDMI 口上,常亮挂一个 btop 不就好了?走过服务器旁边看一眼 CPU/内存/磁盘/网络,比掏手机快多了。 理想很美好,现实一接上就踩坑: 开机后屏幕默认停在 getty@tty1 的登录提示符 要看 btop 得先插键盘、输账号密码、btop 回车 我的服务器放在柜子里,键盘根本不在旁边 偶尔掉电重启,每次都要拖一根键盘线过去,心态爆炸 说白了我要的不是”登录系统”,我要的是一块常亮的监控屏。那 tty1 这个位置就不能留给 getty,而应该直接跑 btop。 记录一下最后的方案,顺便留档给未来的自己。 目标 开机后 tty1 直接显示 btop,不需要登录、不需要键盘 屏幕 24 小时常亮做仪 ...
🏠 HomeLab:中年男人之友
未读前言说实话,我被 Samba 配置搞得快疯了。 家里现在有 5 台服务器,有装 Ubuntu 的,有装 CentOS 的,还有两台刷了 OpenWrt 的软路由。每次想共享个文件或者备份点数据,都得去手动配 Samba,真的太烦了。 你可能想,Samba 配置不就那几步吗?装个包,改个配置文件,重启服务不就完了? 我也是这么想的,但实际用起来你会发现这些坑: 每台机器都要重复操作 - 装 samba、改 smb.conf、设置用户权限… 网络发现很麻烦 - 有时候在 macOS 上能看到,有时候又看不到 端口问题 - 有些网络环境只开了 445 端口,有些又是 139 端口 用户权限混乱 - 这台用 root,那台用 user,记不住哪个是哪个 最烦的是什么?就是当你着急要传个文件的时候,发现找不到共享文件夹,或者连接不上。那种感觉真的会让人抓狂。 我的解决思路既然每台都要配,为什么不写个脚本一键搞定呢? 💡 核心想法: 用脚本自动化所有重复操作 统一配置标准,避免每次都查文档 加入网络发现功能,让 macOS 和 Windows 能自动找到 支持多个共享目录,一次配置 ...
写在前面最近在做 IntelliAI Terminal 这个插件的时候,我被人问得最多的两个问题是: 为什么你做的功能这么少? 为什么不直接做成 Claude Code 或者 Codex 那种大而全的 AI CLI? 这两个问题其实是同一个问题:这个工具到底应该负责到什么程度? 本来我准备写一篇”单一职责”,一篇”为什么不做大而全”,一篇”Engine 架构的思考”,再来一篇”Less is More”。后来自己读了一遍发现,这四件事根本就是一件事,只是切面不同。所以索性合并成一篇,把当时的思路一次性讲清楚。 先把结论放在前面,免得后面聊跑偏: 我不打算做一个”替你思考一切”的工具,只想在你已经在思考的时候,帮你快一步。 下面展开聊。 终端这个场景,到底特殊在哪里AI 工具这两年发展得很快,从代码生成到全自动 Agent,从 CLI 到 IDE 集成,能力一个比一个猛。但我在真实使用里观察到一个有意思的现象:工具越强,用户在日常使用时反而越谨慎。 尤其是终端。 终端是个很特殊的环境: 直接作用于系统 容错成本极低 错误影响可能不可逆 你在 IDE 里让 AI 改一 ...
📋 背景与挑战业务背景IntelliAI Engine 是一个开源项目,作为 IntelliJ IDEA 插件的统一 AI 服务抽象层,需要对接各种 AI 服务提供商。在实际业务场景中,我们遇到了一个特殊的挑战: 公司内部使用的星辰大模型接入需求: 安全管控约束: 公司内部的星辰大模型无法在外部环境使用 由于插件是开源项目,出于安全管控的原因,不能将内部对接逻辑直接暴露到开源代码中 内部模型的认证、连接等敏感信息必须与开源项目隔离 已有工具项目: 公司内部已经在前端时间通过 Java 实现了一个对接内部星辰大模型的工具类项目 该项目已经完成了 WebSocket 连接、OAuth2 认证、会话管理等核心功能 项目已经能够稳定运行,并通过 Swing 界面为用户提供服务 业务推广需求: 此次因为公司内部推广,需要将星辰大模型接入到现有的 Engine 插件中 需要让公司内部用户能够通过 IntelliJ IDEA 插件使用星辰大模型 架构设计考量: 复用性:希望直接复用已有的工具项目,避免重复开发 安全性:保持开源项目与内部项目的职责分离,确保敏感代码不泄 ...
前言在开发 Markdown Image Kit 插件时,遇到了一个棘手的问题:在 Markdown 文件中粘贴图片时,自定义的粘贴处理逻辑完全不被触发,直接走了 IDEA 默认或Markdown 插件的处理逻辑。经过深入排查,发现问题的根源在于 IntelliJ IDEA 的粘贴处理机制优先级问题。 本文将详细记录问题的排查过程、根本原因分析以及最终的解决方案。 问题背景Markdown Image Kit 是一个 IntelliJ IDEA 插件,主要功能是在 Markdown 文件中粘贴图片时,自动将图片上传到图床或保存到指定路径,并插入相应的Markdown 图片标签。 插件通过拦截 EditorPaste 动作来实现自定义粘贴逻辑: 123<editorActionHandler action="EditorPaste" implementationClass="info.dong4j.idea.plugin.action.paste.PasteImageAction" ...
🎉 高能分享
未读那个让我后怕的早晨12 月 10 号,我还在发朋友圈说因为 Next.js(准确的说应该是 React) 的漏洞需要升级 Dify, 不过因为时间的原因只是将几个受影响的 Next 服务下架, 并没有进行升级。 今天有点时间打算全部升级一下, 结果才发现——我其实在 12 月 5 号就已经被攻击了。 这是我第一次因为第三方服务的漏洞遭遇真实攻击。虽然最终没有造成更严重的后果,但从”被动挨打”到”定位证据、完成处置”,整个过程给了我巨大的冲击。那种感觉,就像你早上醒来发现家里被翻了个遍,但你还不知道丢了什么。 所以,我决定把这次被攻击的全过程记录下来——一方面梳理教训、为后续安全防控留出可复盘的参考,另一方面也提醒其他 Next.js 用户这次事故的严重性,尽快完成升级。 相关漏洞信息: Next.js 官方公告 Critical Security Vulnerability in React Server Components Denial of Service and Source Code Exposure in React Server Components CV ...
简介本文是 Spring AI 入门教程的第一部分,将带你从零开始搭建一个 Spring AI 应用,集成 OpenAI(通义千问兼容模式)和 Anthropic(Claude)两个聊天模型,并解决实际开发中可能遇到的各种问题。 参考文档:Your First Spring AI 1.0 Application 刚刚新开了一个 Spring AI 的 教程项目, 欢迎大家 star 和 fork! 准备工作在上一篇 在 Docker 中部署 PostgresML 实现数据库内机器学习 中,已经成功在 PostgresML 中创建了数据库,并成功进行了 PostgresML 的相关测试。现在我们将以 PostgresML 为底层数据库,基于 Spring AI 来完成一个示例项目,学习 Spring AI 的相关概念以及 API 的使用。 项目初始化打开 Spring Initializr,在你的项目里添加以下依赖: PgVector (PostgreSQL 的向量扩展) GraalVM Native Support (GraalVM 原生镜像支持) Actuator (应 ...
🤖 AI:人工智障
未读背景随着人工智能技术的快速发展,Java 开发者也在积极探索如何将 AI 能力集成到企业级应用中。Spring 团队发布的 Spring AI 项目为 Java 生态带来了强大的 AI 集成能力。特别是 Spring AI 1.1.0 版本的正式发布,使得使用 Java 开发 AI 应用变得更加便捷。 在 AI 应用开发中,向量数据库扮演着重要角色,特别是在处理文本嵌入和语义搜索场景下。PostgresML 作为一个强大的 PostgreSQL 扩展,能够直接在数据库内部实现机器学习功能,为 AI 应用提供了高效的向量存储和检索能力。 本文将详细介绍如何在 Docker 环境中部署和配置 PostgresML,为后续的 AI 应用开发打下坚实基础。 简介PostgresML 是一个强大的 PostgreSQL 扩展,它将机器学习功能直接集成到数据库内部。通过 pgml 扩展,开发者可以在数据库层面实现文本嵌入、语义搜索等 AI 功能,无需额外的外部服务依赖。 在 Docker 容器中部署 PostgresML 具有以下优势: 环境一致性:确保开发、测试和生产环境的一致性 快 ...
🏠 HomeLab:中年男人之友
未读前言在群晖上整点”高级”的网络配置 —— 比如加个反向代理、换个监听端口、写条 URL Rewrite —— 我第一反应都是: 直接去改 /etc/nginx/nginx.conf 不就好了? 然后就被坑了。具体坑法是:配置当场生效,重启一次就没了。 我当时还以为是自己改错了文件权限或者 reload 命令不对,反复核对了好几次,最后才反应过来 —— 群晖的 Nginx 配置根本不是一个”手写”的文件,而是开机时用模板生成出来的。你改得再仔细,系统一重启就用模板重新写一份,你的改动被原样冲掉。 这篇把整个机制说清楚,再给一个我自己一直在用的”不碰模板、不丢配置“的做法。 群晖 Nginx 的配置是怎么来的先 SSH 上群晖看一眼: 12sudo -ils /usr/syno/share/nginx/ 能看到一堆 .mustache 文件: 1234WWWService.mustacheWWW_Main.mustacheDSM.mustache... (还有十几个) 这就是群晖 Nginx 配置的”源头”。DSM 每次启动(或者你在 WebStation、控制面板里动配置 ...























