归档
按发布日期排列的全部文章。
显示 54 篇文章
没有符合筛选条件的文章。
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。
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。这是博客的第一篇。开博理由很简单:折腾的东西越来越多,脑子越来越不够用——写下来,是为了下次不用从零开始。