Personal Site
lxun.org

XUN

寻路者。做技术,写代码,记录那些没人告诉你的坑
个人域名 lxun.org,也是一种态度——
持续探索,不停寻找。

Domain lxun.org
Focus Web · Systems
DevOps · 踩坑
Status Actively Writing
02 近期写作 Latest Posts

为什么你的 Docker 镜像每次都要重新拉取基础层

花了两周排查 CI 慢的原因,最终发现只是 FROM 语句里少了一个 hash。缓存层失效的机制比你想的复杂得多,本文复盘整个排查过程。

async/await 背后的事件循环陷阱

Promise.all 与 for-await-of 的本质区别,以及我在生产环境踩坑的完整记录。

Git Rebase 的正确使用姿势与高危操作清单

从 interactive rebase 到 force push 的边界,团队协作中哪些操作是绝对禁区。

文件描述符耗尽:一次线上 502 的根因追踪

凌晨三点的告警,ulimit 的默认值,以及如何用 lsof 定位泄露点。

03 踩坑备忘 Pitfall Index
!
DNS · 网络
Nginx upstream 超时,实为 DNS TTL 未刷新

服务迁移后 upstream 地址已改,但 Nginx 缓存了旧 IP 直到重载。解法:resolver 127.0.0.1 valid=30s + set $upstream 动态解析。

!
Python · 依赖
requirements.txt 没锁版本,三个月后彻底跑不起来

所有依赖都写成 requests 而非 requests==2.31.0,某个上游 breaking change 直接导致生产崩溃。用 pip freeze 锁住,或上 Poetry。

!
React · 渲染
useEffect 依赖数组空了,状态更新永远拿的是旧值

闭包陷阱经典案例。[] 让 effect 只在 mount 时运行,内部引用的 state 永远是初始值。正确方式是把依赖项加进数组或用 useRef

!
SSH · 安全
authorized_keys 权限 644,SSH 拒绝所有密钥登录

SSH 对文件权限极为敏感。~/.ssh700authorized_keys600。组可写或其他可写会直接导致密钥认证失败,且报错并不直接。

04 关于 About
xún / ㄒㄩㄣˊ 动词。探求,寻找。
既是名字里的字,
也是 lxun.org 的根。

寻路者不停步。

技术的人,写写代码,搞搞基础设施,
偶尔被操作系统和网络搞得焦头烂额。

喜欢把踩过的坑写下来,
因为下次踩坑的可能是你,也可能还是我。

TypeScript / Node.js
Linux / Bash
Docker / K8s
PostgreSQL / Redis
Nginx / Caddy
CI/CD Pipelines
React / Next.js
系统调试与排障