跳到正文
归档

归档

按发布日期排列的全部文章。

26

2026

Kubernetes、GitOps 与平台演进:从调度能力到可治理的生产系统

从 Google Borg/SRE、Netflix Kayenta、Spotify Backstage 和 CNCF 开源生态出发,分析 Kubernetes 的适用条件、生产边界、GitOps、渐进式发布与 Compose 迁移路线。

MySQL、PostgreSQL、Redis 与 MongoDB:从工作负载到恢复目标的选型指南

不按 QPS 或流行度给数据库排队,而从数据模型、一致性、查询、扩展、RPO/RTO 和团队能力比较 MySQL、PostgreSQL、Redis 与 MongoDB,并分析 GitHub、Discord 的公开实践。

Docker Compose、CI/CD 与多 VPS:从能部署到可回滚的生产实践

以单 VPS 到多 VPS 的演进为主线,拆解不可变镜像、逐节点发布、健康验证、回滚、密钥与数据边界,并对照 GitHub、GitLab、Netflix、AWS 和 Cloudflare 的公开实践。

个人隐私网络与私人服务器架构:场景、原理与成熟方案

从 WireGuard、Cloudflare Tunnel、Headscale、NetBird 到 Tor,按私人访问、公共服务、策略分流和匿名活动拆分个人隐私网络的信任边界与实施路径。

Pi 的公开信:AI 会话为什么必须可迁移

Pi 背后的 Earendil Engineering 发出一封关于 Session Portability 的公开信:当推理、搜索、压缩和子 Agent 消息被封装在供应商内部,用户带走的是完整会话,还是一份无法继续工作的聊天记录?

把 Pi 配成自己的 Coding Agent

Pi 的重点不是开箱即用,而是把供应商、权限、交互和工作流拆成可替换的层。结合一份社区配置笔记,整理一条更克制、可维护的 Pi 配置路线。

Wi-Fi 延迟尖刺:换信道只解决了一半

信号强度接近 90%,网络却会突然卡住两秒。一次从网关对照、信道扫描、次日复测到 2.4G 外设 A/B 测试的完整排障记录。

Google 能收录,为什么手机却打不开我的网站

搜索结果已经出现,国内手机直连却失败。一次从代理路径差异、Cloudflare Anycast 地址对照到公开网站可达性方案的完整排查。

当 Agent 开始长时间工作:额度与日常用量

一次 Claude Max 尝试让我重新审视模型额度。结合两个月的开发统计,以及从 Hermes 到 Loop 的使用变化,记录 Agent 工作流如何消耗上下文、请求和配额。

从 Loop 到 Graph:Agent 开始学习如何协作

Graph Engineering 不是又一个框架名,而是一种组织复杂 Agent 任务的方式:把任务拆成节点,用边决定顺序和分支,用状态保存进度、产物和失败位置。

从 WordPress 到 Astro:选型迁移的思考

这次重做个人站,我没有追求最多的功能,而是围绕写作、作品展示和 VPS 运维重新确定了一套足够简单、可以长期维护的技术栈。

分布式定时任务重复执行故障复盘与幂等设计

从商户日结任务重复执行出发,分析故障转移、分布式锁、批次记录、租约状态机、唯一约束与跨系统幂等的职责边界。

编辑器加 AI,还是 Agent 当主角:Zed、Cursor 与 ZCode 的分野

结合 Zed、Cursor 和 ZCode 的实际体验,区分编辑器优先与 Agent 优先两种工作方式,并讨论长任务、上下文连续性和 GUI 性能各自解决的问题。

我不再逐轮 Prompt,而是开始设计 Loop

用一次 39 篇博客改造实验,拆解 /goal、Stop hook、验收条件、停滞检测与预算刹车,说明 Loop Engineering 何时有效、何时只会放大失控。

高并发大促缓存雪崩故障复盘

从缓存命中率骤降、数据库连接池耗尽到订单失败,拆解大促故障的证据链、止损顺序、缓存重建、限流熔断、核心链路降级与验证方法。

241 天、39 篇:我怎样把折腾变成可复用的经验

首页在线时钟走到 241 天,站内也正好有 39 篇文章。回头看这段经历,真正的变化不是换了多少技术栈,而是开始把失败、判断和验证过程留下来。

我为什么还在维护自己的个人网站

把文章、项目和工具判断放在自己的域名与仓库里,不是为了逃离平台,而是为了保留结构、上下文和迁移选择。

把自建服务发到公网之前:域名、源码和管理入口会泄露什么

公开一个链接后,别人看到的不只是页面。域名、历史 DNS、源站端口、前端代码和管理入口会连成一条暴露链,发布前应逐层检查。

Tunnel 让服务能访问,Access 决定谁能访问

Cloudflare Tunnel 把内网服务接到公网,但它不负责识别访问者。公开主页、管理后台、OAuth 回调和部署接口需要按路径建立不同边界。

容器镜像拉不下来时:从代理、同步到离线交付

有网、受限网和完全离线环境需要的不是同一条命令。把镜像获取当成交付链路,才能在代理缓存、私有仓库和 save/load 之间选对方案。

VLESS + REALITY 一定要用 443 吗?端口选择与复用边界

VLESS + REALITY 不绑定 443 端口。真正需要弄清的是端口可达性、监听冲突、反代复用和 Cloudflare 代理边界,而不是把 443 当成协议要求。

别再把 VLESS、REALITY 和 Xray 当成一件事:代理栈分层

VMess、VLESS、Trojan、TLS、REALITY、XTLS 和 Xray 经常被放在一张对比表里,但它们不在同一层。先把实现、协议、传输和握手拆开,选型才不会混乱。

部署不是步骤清单:我用八个分面检查新服务

把部署拆成可达、守护、防护、可观测、配置密钥、变更、数据和运维入口八个分面,并为每一面留下可以验证的证据。

读完 Karpathy 的 LLM Wiki,我不再把 RAG 当默认答案

对照约百份个人资料后,我决定先用可读的 Markdown Wiki 积累知识,在召回和规模真正成为问题时再增加 BM25、向量或混合检索。

我把什么交给 AI,什么必须自己验证

半年 AI 辅助编程复盘:从 Dockerfile 和反向代理的两次教训出发,用任务边界、上下文、验证、理解债、纠偏和风险六个问题约束生成结果。

拿 YouTube 架构当镜子:我的小站该补什么

不照搬大型视频平台,而是按 CDN、计算副本、异步任务、数据和容错逐层对照,区分值得做的小实验、当前应补的基础能力和暂时不需要的复杂架构。

一个页面请求怎样到达我的 Astro 站点

按当前部署还原 s1oopX 站点的真实链路:Cloudflare 边缘、Tunnel、回环 Nginx、静态发布目录,以及 OAuth 和部署 webhook 的动态分支。

从照着做,到隔天还能讲清楚:我的学习闭环

过去一年反复忘记学过的东西后,我把流程改成复现、单变量实验、脱稿解释和延迟复做;写博客不再是学习完成后的展示,而是暴露理解缺口的检查。

从开放 80/443 到 Cloudflare Tunnel:连接方向改变了什么

Tunnel 让源站主动连接 Cloudflare,从而关闭公网 Web 入站;它缩小暴露面,却不会替代身份验证、凭据保护、独立管理通道和故障恢复。

GitHub Actions 不直接 SSH:我把验证与部署拆开了

Actions 使用只读权限完成类型检查、构建和自测;VPS 只接受成功 workflow_run 的签名 webhook,并按精确提交发布、健康检查和自动回滚。

Let's Encrypt 教我的不是免费证书,而是续期必须可验证

从 HTTP-01、DNS-01、Certbot timer 和 dry-run 讲清自动续期,也说明迁移到 Cloudflare Tunnel 后,访客证书、Tunnel 通道和本机服务分别由谁保护。

Nginx 反向代理:最容易错的不是端口,而是代理边界

从 proxy_pass 的 URI 替换、真实客户端地址、外层 HTTPS、容器网络到 nginx -t 与 reload,整理我实际踩过的反向代理边界。

Spring Boot 容器化:从能启动到可以回滚

用多阶段构建、Maven 缓存、非 root 运行、回环端口和不可变镜像串起 Spring Boot 部署,并补上健康检查、配置密钥、数据库迁移与回滚边界。

UFW + fail2ban:先收监听,再谈封禁 IP

从端口盘点、安全启用、IPv6、Docker 绕过 UFW 到 systemd journal,说明防火墙与 fail2ban 各自能做什么、不能替代什么。

systemd 守护服务:不只是写一行 Restart=always

从 nohup 迁移到 systemd 后,我重新理解了 restart 策略、enable、启动限速、日志、健康检查和 sandbox;进程回来不等于服务已经恢复。

我每天真的会敲的那几条 Linux 命令

Linux 命令成千上万,日常管服务器真正高频的就那么几组。这篇不堆大全,只记我每天真的会敲的,以及为什么是这几组——对应「喘不喘、谁占了、日志说什么」三件事。

SSH 加固:把钥匙留在自己手里

VPS 一接公网,几分钟内就有人来试密码。这篇不讲 SSH 大全,讲我为什么选 ed25519、为什么改端口值得,以及「改配置别关当前会话」的退路纪律。

买人生第一台 VPS:我在挑什么,到手先做什么

代码写了几个月一直跑在本机。这篇不讲 VPS 怎么买,讲我作为练手机在挑什么、为什么不上高配,以及到手那三件事的顺序我为什么这么排。

Docker Compose:为什么我不手敲一串 docker run

真实项目很少只有一个容器。这篇不讲 Compose 语法大全,讲我用手敲 docker run 翻过什么车、为什么把整套服务写进一个 yml,以及那条差点把数据删没了的教训。

Docker:治「我机器上能跑」这桩老案子

装服务装到后面,系统里 Python、Java 各种库混在一起,依赖打架。这篇不讲 Docker 命令大全,讲它到底在解决什么——以及为什么我说它是 venv 那条线的延续。

深夜的 Bug、咖啡馆的下午:关于“跳过最直接的线索”

两次调试失误的底子是同一个偏差:跳过眼前最直接的线索,去查更“高级”的可能。这篇记录浪费掉的时间、真正有效的两分钟,以及后来固定下来的排查顺序。

当过前端被不统一坑过之后,我怎么做后端统一返回

接口能返回数据只是第一步。这篇做两件让接口专业起来的事:统一返回结构、集中处理异常。不讲模板,讲我为什么把它当成给前端的契约,以及「给用户看友好、给自己看堆栈」这条判断。

JPA:白送的 CRUD,和它背后的理解缺口

接口有了,让数据落库。这篇用 Spring Data JPA 接 MySQL。不讲怎么配,讲「继承个接口就白送 CRUD」的爽和险——爽在省事,险在我可能根本不懂它在生成什么 SQL。

25

2025

2025 年终:狗熊掰玉米的一年,和开博两个月

一篇没有代码的年终复盘。回看这一年,我学东西像狗熊掰玉米——学一个丢一个。这篇记录我怎么意识到问题,以及开博两个月为什么能缓解它。

Spring Boot 第一个接口:和 FastAPI 对照着看,框架之上不变的是什么

还记得 Python 那边的 FastAPI 接口吗?这篇写一个 Java 版对照。不讲注解清单,讲两种风格差在哪,以及学第二门后端框架最大的收获——开始看见框架之上不变的那些东西。

看懂一个 Spring Boot 项目的骨架:从「文件夹一堆」到「两样东西」

第一次打开 Spring Boot 项目,文件夹一堆不知道从哪看起。这篇不讲 Maven 大全,讲我怎么从被结构吓到,到抓住 pom.xml 和标准目录,以及「约定优于配置」到底在替我省什么。

从 Python 到 Java 的第一周:别扭的不是语法,是思维方式

决定啃 Java。从 Python 转过来第一周是真的别扭。这篇不讲语法清单,讲别扭底下是什么——不是语法要重学,是从「怎么快点写出来」转到「怎么让结构更清晰、更不容易错」。

写一个有礼貌的小爬虫:能抓和该抓是两件事

Python 阶段收尾写个小爬虫。这篇不讲 requests 和 BeautifulSoup 怎么用,讲我对「爬虫的水平不体现在抓得多猛,而在多有分寸」的判断——能抓不代表该抓。

装饰器与 with:我从「黑魔法」到「原来是省这个」的转弯

装饰器和 with 一开始很像黑魔法。这篇不讲语法细节,讲我怎么从「看不懂这层包装」到想清楚:它们就是把横切的重复逻辑从主流程里剥离。

CRUD:我第一次让接口和数据库对上号的那几个判断

光返回死数据不算后端。这篇给接口接上 SQLite。不讲 CRUD 怎么写,讲我为什么选 SQLite 练手、Pydantic 模型替我管了什么,以及「占位符不是图省事」从第一天就该刻进去。

为什么这次写接口我选 FastAPI,不是 Flask

Web 框架一搜一大把。Flask 我写过小工具,Django 用 DRF 做过完整 REST API,这次却选了 FastAPI。这篇不讲怎么用,讲我为什么在这个节点选它、它和 Flask 的取舍差在哪。

为什么我坚持每个 Python 项目一个 venv

学 Python 第一件该养成的习惯不是写代码,是管环境。这篇不讲 venv 语法,讲我往全局装包装出事之后,为什么把「每项目一个 venv」当成新建项目的第一条命令。

Git:我什么时候开始怕「改不回去」的

开始写代码最先撞上的不是语法报错,是改了半天发现思路不对想回滚、文件已经覆盖了。这篇不讲命令大全,讲我什么时候开始养成提交习惯、哪次没提交翻的车,以及分支这块我到现在还偏保守。

开博第一篇:一个安静记录折腾的地方

你好,我是 s1oopX。这是博客的第一篇。开博理由很简单:折腾的东西越来越多,脑子越来越不够用——写下来,是为了下次不用从零开始。

s1oopX

登录 s1oopX