HomeLab:中年男人的快乐源泉
未读中年男人的三大爱好:充电头、NAS、软路由。这三大爱好不仅为我们的生活带来了便利,也成为了我们生活的一部分(🤡)。 作为一个软件开发者,我一直梦想着拥有自己的服务器,而 NAS 和软路由则是我通往这个梦想的桥梁。 自从购买了我的第一台 NAS 以来,便打开了一扇新世界的大门。NAS,即网络附加存储(Network Attached Storage),它不仅提供了一个安全的数据存储解决方案,还让我能够实现数据的备份和共享。随着时间的推移,我陆续购买了其他硬件产品,如软路由器、服务器等,逐步搭建起了属于我的 HomeLab。 今天,我想和大家分享一下我搭建 HomeLab 的过程,希望能够帮助到那些同样有志于搭建 HomeLab 的朋友。在接下来的博客文章中,我将详细介绍如何选购合适的 NAS 设备、软路由器以及服务器,并分享我在搭建过程中遇到的挑战和解决方案。 HomeLab 并非遥不可及,只要我们用心去探索和实践,就能开启属于自己的个人云端实验室之旅。让我们一起学习、交流和成长,共同打造一个属于我们的数字王国。 前提说明虽然关于 HomeLab 的文章已经很多了,但我还是想记录下自 ...
🧑💻 简介作为一个 Java 后端工程师,我相信你一定遇到过下面这些问题: 使用 IDEA 启动一个 Spring Boot 项目,第一行就出现红色告警:发现多个 slf4j 实现类,提示你要排除一个; 本地开发一切正常,一部署到测试环境却报错:找不到某个 class; 项目中的 pom.xml 有上百个依赖,不知道哪个服务哪个功能,谁也不敢轻易动; 多模块之间彼此依赖,模块 A 引用模块 B,模块 B 又反过来依赖模块 A,形成“依赖闭环”; …… 经历过大大小小的 Spring Boot 项目后我发现,不论是大厂还是小团队,很多项目对 Maven 的依赖管理都重视不足。 重复引入、版本冲突、依赖混乱、模块耦合这些问题,几乎是通病。 好一点的团队会搭建一个公司级的 parent 项目来统一依赖版本;大多数直接沿用 spring-boot-starter-parent;更差的,哪缺啥引啥,能跑就行,构建配置几乎没人管。 为什么要重新思考 Maven 项目的组织结构? 因为当项目开始变大:%% %% 依赖管理就成了地雷阵,一改就炸; 多人协作时,版本不一致、依赖冲突 ...
zeka-stack
未读📖 简介在上一篇 🧪 Maven Profiles 的使用场景案例分享 我们通过 Profiles 的实际案例大致了解了它的使用方式, 并详细梳理了 Profiles 的优先级, 不过也挖了一个坑: 为啥我要将 settings.xml 和项目代码放在一起? 比如 arco-supreme 项目的代码结构为: 12345678910111213141516$ tree -a -I '.git|.idea'.├── .editorconfig├── .gitignore├── .mvn│ ├── jvm.config│ ├── maven.config│ ├── settings.xml│ └── wrapper│ ├── maven-wrapper.properties│ └── MavenWrapperDownloader.java├── LICENSE├── mvnw├── mvnw.cmd├── pom.xml└── README.md 可以看到 settings.xml 文件放在了 .mvn 目录下, 且 ...
zeka-stack
未读📖 简介在上一篇 🚀 从注册到发布:Maven 中央仓库上传 jar 实践 中,我们成功将本地 jar 包上传到了 Maven 公共仓库。 那篇文章的配置比较基础,主要目的是跑通流程。而在实际开发中,为了更好地适配不同环境,还需要做一些必要的优化配置。就像写代码一样,第一步是跑通,再逐步打磨细节,这次我们就来看看如何通过 Maven Profiles 实现多环境切换。 所以这篇文档我将介绍 Maven 的 Profiles 配置, 目标是让 Zeka.Stack 相关的组件既能上传到 Maven 公共仓库, 也能让大家在进行二次开发后, 只上传到公司 Maven 私服. 当然这仅仅是 Maven 的 Profiles 的一个实际应用场景, 其他还比如 根据不同 Profile 引入或排除某些依赖; 针对多模块项目,通过 Profiles 控制是否构建某些子模块; 结合 resources 标签中的 <filtering>true</filtering>,实现配置文件模板化等等场景. 🔀 deploy 环境切换直接上配置: 1234567891011 ...
zeka-stack
未读✨ 前言虽然 Zeka.Stack 是全开源的, 但是每个组件也可以单独使用, 为了避免需要克隆所有项目然后本地 install 才能使用, 所以最简单的方式就是将 Zeka.Stack 的组件上传到 Maven 公共仓库, 所有就有这篇水文. 为什么说是水文呢, 因为这类的文章网上也有很多了, 这里再写一遍其实没有啥价值, 不过为了完善我 Zeka.Stack 的知识体系, 所以还是决定写一写. 🧰 准备工作这里演示使用自己的域名来作为 groupId, 所以需要 DNS 验证, 其他方式比如 GItHub, GitLab 等验证相对来说更容易些. 个人觉得 GitHub 作为 groupId 太长了, 比如我如果使用 GitHub 验证的话 groupId 就是 io.github.dong4j, 而且为了打造自己的 IP, 所以选择使用一个二级域名, 正好前段时间在 Cloudflare 注册了 dong4j.dev 的域名, 这里就可以用上了. 如果要图方便的话, 可以直接使用 arco-supreme 这个项目来做测试. 📝 注册 Sonatype 账户自 20 ...
zeka-stack
未读🧑💻 简介在日常开发中,写业务不难,难的是「工程一上来就乱」、「依赖一多就扯皮」、「构建一复杂就抓狂」。Zeka Stack 希望通过系统化的工程体系来解决上述问题. 它不是啥“重框架”,也不是为了造新轮子,而是一个工程提质提速的脚手架体系,用清晰的模块划分、统一的构建规范和灵活的生态扩展,让你在开写业务代码之前,项目骨架就已经整整齐齐、顺手好用。 一句话:让你团队少踩坑、构建不抓狂、协作有章法。 🧱 用 Zeka Stack 打造可维护的工程骨架大家肯定遇到过这样的问题: 某次新项目启动,一开始小组成员各自拉模块、加依赖、写配置,几天后就发现: 依赖重复、冲突,启动报错; 构建流程不一致,有人能打包,有人不能; 模块命名五花八门,新人根本无从下手; 尤其是多个团队协同开发微服务系统时,经常遇到的问题包括: 痛点 描述 项目结构混乱 每个团队按自己的理解组织模块,结果变成“大杂烩” 构建方式不统一 有人用 mvn,有人用 idea,有人手动打包,构建经常失败 重复造轮子 各业务组开发重复功能,没有统一组件库 依赖冲突频发 多模块之间版本不一 ...
zeka-stack
未读🧠 初心:为什么要从零开发脚手架?在众多脚手架如 RuoYi、yudao 等百花齐放的当下,从零造个轮子听起来似乎有些“何苦为难自己”。但现实却是,用别人的轮子,不一定跑得更快。 当你频繁地遇到这些问题: 脚手架升级一动就“爆炸”,依赖冲突层出不穷; 每次新建项目都得 copy/paste 三五个模块,配置头都大; 项目结构越来越重,协作越来越难; 插件脚手架不好用,代码生成一团糟; 你就会明白:一个真正贴合团队/企业开发场景的脚手架,是生产力的倍增器,而不是负担的制造者。 这,就是 Zeka.Stack 诞生的背景。 💥 我们要解决哪些“开发痛点”?Zeka.Stack 不是为了炫技,而是为了解决我们真实踩过的坑。以下是我们希望彻底优化的问题: 1. 项目依赖管理地狱 多模块工程中依赖版本冲突频发,项目启动失败; 依赖升级时担心牵一发而动全身。 💡Zeka.Stack 的解决方案: 统一公司级 BOM 管理,所有项目继承同一套依赖版本; 通过多级父模块划分业务、技术、部署职责,升级只改一行版本号。 2. 重复配置太多,效率低下 新项目初始 ...
简介本文汇总了我在三台联想 M920x 上搭建和使用 PVE(Proxmox Virtual Environment)过程中的心得与遇到的问题。 在选择虚拟化平台时,我倾向于 PVE 而非 ESXi(vSphere Hypervisor)。 这一选择基于 PVE 的开源性及其基于 Debian 的架构,这为它带来了相比 ESXi 更多的可玩性和折腾空间。 选择 PVE 或 ESXi 并不在于哪个更优秀,而在于哪个更能满足个人的特定需求。 安装完成后 IP 不对启动后出现了一张 vmbr0 网卡, 这个是桥接网卡, 可以查看绑定的物理网卡: 1ip link show master vmbr0 修改一下 3 个文件: 12345678910111213141516171819202122232425# /etc/network/interfacesauto loiface lo inet loopbackiface enp92s0 inet manualauto vmbr0iface vmbr0 inet static address 192.168.100.100/24 ...
HomeLab:中年男人的快乐源泉
未读简介家中的服务器有 3 台全部安装的是 Ubuntu, 有时候需要折腾一下. 所以想用一个文档来记录 Ubuntu 上遇到过的问题, 另外就是做一个备忘录, 将已操作过的记录保存下来, 以便在其他服务器上重现, 避免重复查询资料. 优化建议启用 Ubuntu ProUbuntu Pro 是 Canonical 提供的企业级专业支持服务,个人用户和小团队可免费使用(最多 5 台设备,超过需付费)。它提供了长达 10 年的安全更新支持。 1 打开「软件和更新」,切换到「Ubuntu Pro」选项卡。 2 点击「启用 Ubuntu Pro」。 3 访问 Ubuntu Pro Dashboard 拿到分配给你的Token,填入「手动添加令牌」中,然后点击「确定」。 参考 新手必备:安装 Ubuntu 24.04 LTS 后的 10 项基本建议 Landscape Server参考: Landscape 安装配置速记 系统克隆原来的系统安装在一块 PCIe Gen3 x4 的 M.2 固态上, 查阅资料得知这个插槽支持 PCIe Gen4 x4, 为了不浪费资源, 所以需要使 ...
HomeLab:中年男人的快乐源泉
未读简介前几天在 Cloudflare 上买了一个 dev 域名, 想着使用 Cloudflare 强大的 proxy 功能增加暴露到公网服务的安全性, 今天尝试了一下, 感觉基本满足要求, 下面说说折腾过程. 现状 上图是现在的流量路径: 路由器将 1000 端口的流量全部转发到雷池 WAF 所在的服务器上(192.168.1.2:1000); 雷池 WAF 的 1000 端口配置了 HTTPS 证书, 然后在反向代理到局域网内真实的服务器上; 现在的问题是可以通过暴露出去的域名得到我真实的公网 IP 地址, 虽然公网 IP 会不定期变更, 但是感觉还不是特别安全, 所以打算使用 Cloudflare 来增加安全防护. 使用 Cloudflare我这里以在外网访问家中的 NAS 为例, 方便理解. 我预期的效果为 通过 https://nas.dong4j.dev 访问家中的 NAS. 我们都知道家用宽带的 80 和 443 端口是被运营商封了的, 为了实现上面的效果, 我们需要对 CloudFlare 有个基础的了解. CloudFlare CDN 支持的端口在我们使用 ...
简介很久以前买 R2S 的时候一起买了一个 LCD 小屏幕, 一直没用起来, 这次装了个小主机, 想着看能不能废物利用一下. LCD4Linux 是一个小程序,它从内核和一些子系统抓取信息并将其显示在外部液晶显示器上。 下面是一些运行 LCD4Linux 的图片: LCD4Linux 在两个不同尺寸的显示器上 Iomega HMNHD-CE 上 的 LCD4Linux 安装 lcd4linux1$ sudo apt-get install lcd4linux 查看 USB 屏幕的设备名称 1$ lsusb 将会看到有lcd2usb interface的设备出现 12345678Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 003 Device ...
简介前段时间在小黄鱼上捡了 2 张移远的 EC20, 今天折腾一下这张 4G 网卡. 实战 移远 EC20 mini PCIE 模块 usb 转 mini PCIE 模块 ipex1 代转 sma 内孔转接线 sma 内针 4G 天线 加上风扇: 合体后的样子: 检查 USB 设备中是否存在 4G 模块 1234lsusbBus 001 Device 003: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modemBus 001 Device 002: ID 2109:3431 VIA Labs, Inc. HubBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 获取 4G 模块 USB 转串口终端 123ls /dev/ttyUSB*/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 ppp0 拨号第三节 树莓派 EC20 之 PPP 拨号上网_树莓派拨号上网-CS ...
简介今天折腾一下使用 TTL 连接到树莓派 Zero 2W. 串口连接是一种常用的通信方式,通常用于计算机与外部设备之间的数据传输。它是通过一根或多根电缆将设备通过串行接口连接起来,数据一位一位地按顺序传输。串口通信可以分为两种类型:RS-232 和 TTL,分别代表不同的电气标准和通信协议。 开启串口1sudo raspi-config->Interfacing options-> Serial->Yes 安装驱动macOS 14+ 后自带 CH340X 驱动, 因此直接用就可以了: 1234ls /dev/cu.*输出:cu.usbmodem57590428591 screen123brew install screen# 这里的 11520 是波特率,在树莓派上的 /boot/cmdline.txt 进行设置screen /dev/cu.usbmodem57590428591 115200 Notice执行完会进入一个空界面,此时按 Enter 键,就会出现 Raspberry Pi 的登录提示了。 将树莓派进行 shutdown 之后,如果想 ...
简介一直在使用 hexo-deploy-git 插件部署我的部署到 Github Page, 不知道最近抽什么风, Github Pages 部署一直失败. 今天有空查看了日志才发现一直使用的是 Jekyll 来编译我的静态文件, 应该是我以前的博客需要使用 Jekyll 来编译, 不过现在已经不需要了, 因为我上传的已经是 Hexo 编译后的静态文件了, 最近应该是修改了某些插件导致 Jekyll 解析 URL 出现了问题所以才暴露了这个问题. 解决方法因为我直接上传的 Hexo 编译后的今天文件, 所以只需要将静态文件通过 Github Action 拷贝到 Github Pages 即可, 所以部署应该更简单, 下面是详细过程. 修改 Pages 配置Github Pages 默认使用 Jekyll 来部署: 所以这里需要修改为使用自定义 action 来部署: 添加 action 配置12345678910111213141516171819202122232425262728293031323334353637383940414243# Simple workf ...