Anduin Xue
Anduin Xue

Anduin's Tech Blog

All Posts


给Caddy上Cloudflare以清洗流量

该架构通过多层配置实现安全可靠的反向代理,核心为Caddy服务器,其配置由三部分动态拼接而成:Cloudflare IP信任策略、基础安全配置(含HSTS与日志)、各业务服务的独立配置文件。构建时通过脚本将分散在多个目录中的`.conf`文件统一收集至指定目录,并与自动生成的Cloudflare IP列表和基础配置合并为最终的Caddyfile,确保配置可维护性与灵活性。Docker镜像构建过程中生成临时自签名证书用于启动验证,实际运行时通过Docker Volume挂载真实Cloudflare证书(位于`/swarm-vol/sites-data/caddy/certs/`),使Caddy能够使用合法证书响应HTTPS请求,同时通过`client_auth`机制强制验证Cloudflare的mTLS身份,仅接受来自Cloudflare的请求。Caddy配置中引入`cloudflare_trust`策略,确保仅将Cloudflare代理IP视为可信来源,从而正确还原客户端真实IP。整个系统部署于Docker Swarm,通过host模式端口映射暴露80/443端口,由FRP处理外部流量接入,内部服务通过`reverse_proxy`转发至对应后端容器,所有通信均保持端到端加密,实现安全、高效、可扩展的统一入口管理。--Qwen3

Reverse Proxy ACME Caddy Docker Cloudflare MTLS

AI 时代的普通人究竟应该学习什么?

在AI能瞬间生成代码与文章的今天,普通人学习的意义何在?博客揭示:关键不在于“学什么”,而在于“如何学”——学习顺序必须从线性的“前期-中期-后期”彻底倒置为“Early Game(前期)- Late Game(后期)- Mid Game(中期)”。误区在于,人们总在“前期”死磕语法、“中期”盲目修补,导致系统陷入“屎山”困境;真正的破局点是:先跳到“后期”,锚定终极蓝图——架构师在写第一行代码前已规划十年后的安全与性能,人生规划则从80岁健康指标倒推当下行动。AI是Mid Game的完美填充者,能高效写CRUD、润色邮件,却无法定义蓝图,因其缺乏全局视野,只会加速“屎山”指数级膨胀。人类核心竞争力转向“工程直觉”:掌握范式思维(如函数式编程的不可变性)、系统论与审美,即使不写代码也能预见边界——学过形式化证明的人会本能追问“逻辑是否完备”,而普通人只求“能跑就行”。这不仅是技术升级,更是生存策略:AI时代,普通人不该沦为“填空工匠”,而要成为蓝图绘制者。那么,你的“后期”蓝图是什么?它将如何让AI为你画出的“猪”而非“鸡”?--Qwen3

LateGame EngineeringIntuition Paradigms AI Era Learning Strategy Engineering Intuition

Use yubikey to protect SSH key.

本文揭示了如何用YubiKey为SSH密钥打造硬件级安全屏障,彻底告别软件密钥的泄露风险。通过在设备上直接生成受PIN保护的Ed25519密钥,私钥永久锁定于安全芯片,无法导出或备份,迫使用户采用创新的双重YubiKey策略:主设备用于日常登录,备用设备作为应急方案,确保服务永不中断。文章简明演示了从初始化密钥、服务器加固到Git推送的全流程——只需插入设备,运行几条命令,新机器设置瞬间完成,无需传输任何密钥文件。这不仅简化了操作,更颠覆了传统安全思维:当私钥无法被提取,备份不再是文件复制,而是物理设备的冗余。安全与便利的矛盾被重新定义——硬件隔离如何平衡易用性与抗攻击性?在勒索软件肆虐的今天,若密钥存储在云端或本地磁盘,我们是否仍在自欺欺人?而更深层的思考是:当数字身份成为核心资产,硬件安全能否成为抵御钓鱼和中间人攻击的终极防线?面对YubiKey丢失的危机,系统如何自动触发安全响应而不依赖人工干预?你是否已准备好将安全从软件层提升至硬件层,让每一次登录都成为物理验证的胜利?--Qwen3

YubiKey SSH Security Hardware Key Ed25519 PIN Protection SSH Setup

让模糊的视频变清晰

在4K时代,那些480p或720p的旧视频常因模糊、噪点和压缩伪影而黯然失色,传统超分方法仅能放大模糊,却无法唤醒细节。本文揭示了一种革命性解决方案:基于Real-ESRGAN的自动化Bash脚本,能一键将模糊视频提升至4倍高清。其核心在于“盲超分”技术——AI通过模拟现实世界中的多重模糊、噪声叠加和JPEG压缩等复杂画质损伤进行训练,而非依赖理想化的合成数据,从而在处理真实老旧视频时精准“脑补”丢失的高频细节,如发丝纹理与布料褶皱。脚本自动化了拆帧、GPU加速AI处理、H.265编码等繁琐步骤,只需将视频放入指定文件夹,即可输出高质量高清视频,效果惊艳且优化存储。但视频超分依赖GPU算力,是计算密集型任务,也引发深层思考:当AI从模糊中重建真实,我们与记忆的连接将如何被重塑?那些被时光掩埋的家庭录像或经典素材,是否正等待一次高清重生?你珍藏的模糊瞬间,准备好在4K屏幕上重焕光彩了吗?--Qwen3

bash Linux REAL-ESRGAN Video Upscaling AI Super Resolution Bash Script

Windows 11: The Last Version of Windows 10

微软2015年宣称Windows 10是“最后一版”实为“Windows as a Service”战略的营销宣言——操作系统从此告别单次发布,转为持续滚动更新。Windows 11并非技术革命,而是Windows 10内核的“主题包”式更新,共享相同技术基础(10.0内核),硬件门槛TPM 2.0本质是人为设定的商业策略:强制用户换新硬件以刺激PC销量,同时建立硬件级安全标准争夺企业市场。当WSA被砍、Timeline消失、Cortana让位Copilot,功能沦为短期实验品,用户对系统的信任被悄然侵蚀——你是否已习惯在学会新功能前先问“它明年还在吗”?微软用“永远更新”包装的,是更精密的商业闭环:通过硬件控制权收编PC厂商,逼近苹果式生态。当Windows 10能无缝运行Windows 11,为何必须换机?这场“系统革命”背后,是安全标准、利润增长与用户信任的残酷权衡,而你,正在为它的战略买单。--Qwen3

TPM2 WindowsAsAService Windows11 RollingRelease PCUpgrade EcosystemControl

Bridging Identity and Email Management Synchronizing Authentik Groups with Mailcow Aliases

当Authentik中的团队分组动态调整时,Mailcow邮件组是否能实时同步?本文揭示了一种自动化解决方案:通过精准比对Authentik的嵌套用户组与Mailcow邮件组,实现邮件列表的零人工干预更新。核心突破在于处理了组嵌套结构(如"开发组→前端子组"),并确保Mailcow的邮件别名(如dev-team@yourdomain.com)与组成员完全一致。脚本通过API无缝对接两大系统,支持自动创建、更新或删除邮件组,并以10分钟周期通过Cron调度运行,彻底告别手动维护的混乱与错误。这不仅是技术整合的范例,更让企业通讯真正随组织架构动态进化——你的团队是否还在为邮件组同步问题浪费时间?让自动化成为沟通效率的隐形引擎。--Qwen3

Data Sync Linux Python Email Organization Tips Authentik OIDC Mailcow

使用 Clickhouse 来可视化 Caddy 产生的日志

本文介绍了通过Python脚本采集Caddy日志并导入ClickHouse的完整流程,日志经正则解析后通过Kafka/RabbitMQ传输至ClickHouse的MergeTree表结构,包含时间戳、客户端IP、请求方法、状态码等核心字段,最终通过Superset实现访问趋势、错误率统计、客户端分布等可视化分析,系统支持实时处理3.24万条/秒数据量,内存峰值控制在1008KiB,采用列式存储优化查询性能并支持交互式报表生成。--Qwen3

Caddy CaddyV2 Python Docker Clickhouse Superset

我家里搭建了 Authentik,我非常后悔我搭晚了。

文章系统梳理了通过Authentik统一认证中心为多个应用接入OIDC的完整实践过程。重点展示了Koel通过Caddy Forward Auth实现Header透传认证、Nextcloud基于Property Mapping实现用户ID映射、GitLab利用OpenID Connect配置管理员分组等典型方案。所有应用均采用不同协议(OIDC/Forward Auth)实现单点登录,通过属性映射同步用户信息与权限,其中Nextcloud需特殊处理用户ID与配额属性,GitLab通过groups_attribute字段实现权限继承。用户管理方面存在手工合并用户带来的复杂度问题,尤其当用户在不同平台使用不同Email/Username注册时需逐一核对。早期业务阶段推荐快速部署Authentik以实现认证统一,但用户量超过200后需应对大量用户合并的挑战。整体方案优势在于消除重复注册痛点,实现应用生态的无缝衔接,但需权衡人工操作成本与规模化扩展难度。--Qwen3

Linux OAuth Docker Authentik OIDC OAuth 2.0

Set up a local docker registry mirror

本文介绍了通过自托管Docker registry镜像Docker镜像到本地服务器的完整方案包含三个Python脚本check.py验证镜像是否为最新版delete.py删除损坏镜像mirror.sh自动化镜像流程以及配套的Docker容器化部署方案首先通过docker run启动registry服务编写三个Python脚本实现镜像状态检测和清理编写包含所有目标镜像的mirror.sh脚本使用regctl工具执行镜像拉取和推送操作通过Dockerfile构建包含必要依赖的容器镜像配置定时任务实现每日自动执行镜像任务同时提供本地registry的使用方法包括配置daemon.json信任不安全仓库和镜像推送拉取操作最终形成完整的Docker镜像本地化镜像解决方案--Qwen3

Automation Python Docker Registry Mirroring Scripting

复习数据结构 - 撸个哈希树

本文通过构建二叉哈希树结构探索了时间复杂度为O(1)的集合实现方案。该方案通过将输入字符串的哈希值转化为二进制路径,在树结构中逐位判断左右分支构建节点,最终在终端节点标记存在状态。测试结果验证了其在百万级数据插入后仍能保持快速查找的特性,但哈希碰撞问题导致存在误判风险。这种结构在空间换时间的策略下,特别适合用于低精度场景的快速判断如用户注册状态检测。当哈希碰撞概率与内存消耗的平衡点如何取舍?是否可以通过引入多级哈希或动态调整树结构来降低碰撞率?面对大规模数据场景时二叉树的深度是否会成为性能瓶颈?这些开放问题提示着数据结构设计始终需要在理论最优与实际约束之间寻找最优解。--Qwen3

Binary Tree Custom Collection Binary Hash Trie Data Structure Hashing Set Operations

Run docker container with GPU in Docker swarm

本文探讨了在Docker Swarm环境中启用GPU支持的创新方法与潜在挑战。作者通过对比传统docker-compose配置与Swarm模式的限制揭示了一个关键矛盾:Swarm不支持在资源预留中直接声明GPU设备这一设计缺陷迫使开发者寻找替代方案。文章核心贡献在于提出了一种基于嵌套容器的解决方案通过创建可附着的overlay网络将GPU容器与Swarm管理的容器解耦实现跨节点的GPU资源共享。这种方法巧妙利用了docker-in-docker架构在宿主机上启动独立GPU容器的同时确保其他服务可通过自定义网络与其通信。这种架构突破了传统资源分配的桎梏但同时引发新的思考:当容器嵌套层级增加时性能损耗是否可被接受?这种间接访问方式是否会影响系统的可观测性?更重要的是这种工作模式是否暗示了云原生硬件资源调度的新范式?文章通过成功运行Ollama模型的案例证明了方案的可行性但留下的疑问更值得深思:当我们在追求资源隔离与共享的平衡时是否正在重新定义容器化的边界?--Qwen3

Docker Swarm GPU Resource Management Ollama DeepSeek Model Docker Networking Resource Allocation

使用 NPU 来运行 DeepSeek R1 32B

文章探讨了如何通过OpenVINO工具包在Intel Ultra 7处理器的NPU上运行DeepSeek R1 32B大语言模型的过程与挑战。作者首先尝试用CPU运行32B模型却遭遇性能瓶颈,随后揭示了NPU驱动安装与OpenVINO优化的必要性。通过安装NPU驱动三件套(intel-driver-compiler-npu、intel-fw-npu、intel-level-zero-npu)并配置用户权限,结合OpenVINO的Python环境搭建,最终成功将量化为4bit的DeepSeek-R1-Distill-Qwen-32B模型部署到NPU。实验表明NPU推理速度显著优于CPU但仍有提升空间,这一实践为边缘设备运行大模型提供了新思路。文章抛出若干值得思考的问题:如何平衡模型量化带来的精度损失与性能提升?NPU在处理更复杂的多模态任务时能否突破现有算力限制?当大模型持续扩展参数量时,专用硬件加速器的架构设计将如何演变?这些疑问或许正是推动AI技术突破的下一个关键节点。--Qwen3

Ai Lunarlake NPU Deepseek Hugging face OpenVINO