Hi there 👋

Welcome to my blog, my name is Ray. I am a software developer and this is my personal blog where I share my thoughts, experiences, and projects. Feel free to explore and connect with me!

一分钟解决怎么在没有互联网的主机上运行 codex

TL;DR 本地网络一切正常,能够正常访问外网/使用 Codex 没有问题 远程主机:只能通过 SSH 连接,无法联网(主要是翻墙不可用,无网的情况比较少) 之前使用 Cursor 时,网络请求走本地,context 在远端,所以迁移到 Codex 和 Claude Code 会有些许不便,今天才有空处理一下 简单来说,直接设置代理即可 本文以 VS Code 为例,因为 VS Code + Remote SSH + Codex 插件组合使用比较方便 最近 GPT-5.4 的好用程度加上 Claude 的获取太难。以半价怒冲了 200 美元的 GPT Pro,确实非常爽。 第一步:在 VS Code 中配置 SSH 反向转发 在本机的 VS Code 上打开命令面板( Ctrl+Shift+P (Mac 上是 Cmd+Shift+P)) 输入 SSH: Open SSH Configuration File 找到你的配置文件(通常是 ~/.ssh/config 或 C:\Users\你的用户名\.ssh\config) 在你需要配置的服务器上添加如下操作: Clash 默认是 7890,如果使用的是 Clash Verge 默认的是 7897 ...

April 20, 2026 · 1 min · 125 words · Ray

R2S复活记

Info 成为魔法师已经不知道多少年、为了魔法,年少无知的深夜不知多少次抓耳挠腮 某一天、某论坛、刷到一个路由器的推荐:H3CNX30pro,至今为止我都能背出型号,实在是第一个折腾的给到的印象太深。当时给到的教程配套了刷机教程,刷了 immortalwrt,一个裁剪后的 openwrt,虽然功能不多,但是核心功能已有,让我体验了丝滑的上网体验,但是如果家中只有这一台路由器,当魔法失效时,全家的网都会崩溃。 随后在前辈的指引下,他给了我一台 R2S,实在是太美好了,小巧的机身,极致极客的金属质感。起初我在这台完整的 openwrt 作为入网主路由,LAN 口后面带着 H3C 做 AP,但是这依旧没有解决魔法失效全家网络崩溃的问题。于是我找到了旁路由这个方案,随后由于魔法频繁失效、至最近半年无法订阅等各种问题出现,一直没有解决,所以我的 R2S 已经荒废已久。在今晚,他迎来了重生!!! 环境情况 至今,我家里的网络拓扑如下 这里直接用 iStoreOS 的图表示了 其中 WIFI-路由器是我的主路由,入网用以及担任 zerotier 组网 还有无线 AP 其中一条 LAN 口连接 R2S 的 LAN 口 H3C IP:192.168.6.1 R2S IP:192.168.6.80 以往使用时,我会将需要魔法的设备网关指定 R2S 来使用,而如果我修改了这个配置、他是对我的网络适配器做修改,也就是说当我换一个环境和网络,他连上不同的网络还用这个固定配置,就会失效(这里我没仔细研究,只是觉得不方便)这是我的第一个需求,要能自动从路由器发 IP 的时候就自动分开,但是老版本的 immortalwrt 或者 R2S 的完整 openwrt,DHCP 的 GUI 界面里面都暂时没有这种功能。分配静态地址时只能指定 IP 给指定 MAC 所以也一直搁置着,昨晚我购买了一份更昂贵的套餐后,选择复活 R2S 升级固件 刚开始来到 passwall2的页面,再次尝试订阅和手动导入,都没有成功。于是我推测是 Xray 那些固件太老了。于是我尝试通过页面手动更新,结果直接失败。 那我就想找到新的 passwall2 来手动更新整个服务 Releases · Openwrt-Passwall/openwrt-passwall2 ...

March 25, 2026 · 2 min · 291 words · Updated: March 27, 2026 · Ray

首次尝试使用 CDN 加速网站访问

基础概念 CDN(Content Delivery Network / Content Distribution Network) 内容分发网络(或内容交付网络)。它是一个分布在全球各地的服务器网络,把你的网站内容(图片、JS、CSS、视频、HTML 等)缓存到离用户更近的服务器上,从而加快访问速度、减轻源站压力、提高可用性。 源站(Origin Server / 源服务器) 你自己的服务器(你例子里的服务器 A),存放网站原始内容的服务器。CDN 所有内容最初都来自这里。 边缘节点(Edge Node / PoP - Point of Presence) CDN 在全球各地部署的“边缘”服务器。用户访问时,CDN 会把请求调度到离用户最近的边缘节点。如果节点有缓存,就直接返回;没有就去源站拉取(回源)。 初次使用CDN 部署了网站,假设域名为 666.com 客户反馈访问经常断联。那是由于我的服务器在地球的另一端,所以域名直接解析到的是我的服务器IP 由于使用的DNS服务商并没有像CF的小黄云代理我的网络,所以这个做法一来是连接不稳定、二来是暴露服务器公网地址容易被打死,所以在这个情况下,逼我去看了一下CDN 首先看了一下阿里云的(贵,放弃了) 在热佬的社区留言发现了这个平台,Doki CDN 配置过程 环境情况 我已有美国服务器A,域名666.com直接指向服务器A的地址,A部署nginx代理并且部署证书开启TSL 配置CDN 我购买了一个套餐,选择了我要加速的域名 平台会给到我一个用来CNAME指向的域名,让我去DNS解析平台配置,而我为了快速上线,这里没有切换主域名的使用,而是选择加速了一个www.666.com DokiDoki CDN 侧完整配置步骤 登录 DokiDoki CDN 控制台(dooki.cloud 后台): 添加加速域名 去「CDN加速」→ 点击「添加网站」。 加速域名 填:www.666.com(强烈推荐子域名) 源站类型:选「源站 IP」→ 填服务器 A 的 IP(或者选「源站域名」填原来的域名也行)。 回源协议:建议选「协议跟随」或「HTTP」(先用 HTTP 回源最稳,等全通后再改 HTTPS)。 提交,等待审核通过(一般几分钟)。 上传证书(必须做!) 去「证书管理」或「SSL 证书」页面 → 「添加证书」/「上传证书」。 证书名称:随便起个(如 666-letsencrypt)。 证书公钥(PEM):复制 Let’s Encrypt fullchain.pem(或 crt 文件)全部内容(从 —–BEGIN CERTIFICATE—– 到结束,包含中间证书链)。 私钥(PEM):复制 privkey.pem(或 .key 文件)全部内容。 保存。 回到刚添加的域名配置里,找到 HTTPS 设置 → 选择刚上传的证书 → 开启 HTTPS。 获取 CNAME 在域名列表里找到 www.666.com,复制它对应的 CNAME 值 填写到DNS解析平台处,我这里www原本有一个默认的 www 的A记录,直接改了就行 Hint ...

March 25, 2026 · 1 min · 203 words · Updated: April 20, 2026 · Ray

自建 RSS 聚合——freshRSS

Info 昨天在 L 站逛的时候,看到一位佬友推荐的信息源,Hacker News,我英文水平没那么好,自然是少听说这些海外的信息平台,借着翻译进去看了一圈,真的非常有意思,于是又想盯他,然而此时我已经有几个平台会每天盯了。所以想到了很久之前听说过的 RSS。 RSS是什么 RSS 是一种用于自动获取网站更新内容的订阅技术,全称是 Really Simple Syndication。它本质上是一种基于 XML 的数据格式,让网站把最新内容“推送”给订阅者,而不是你手动去刷新页面查看。 它是怎么工作的 核心流程很简单: 网站生成一个 RSS Feed(订阅源) 通常是一个 .xml 地址 里面包含最新文章、标题、摘要、链接等 用户用 RSS 阅读器订阅这个 Feed 常见工具: Feedly Inoreader FreshRSS(自建) 阅读器定时拉取更新 有新内容就显示给你 本次我 在对比了几个 RSS 的订阅器后选择了 FreshRSS (单纯看起来比较简单),先上手用起来,再考虑以后的优化 FreshRSS 选择这个 FreshRSS 还有几个原因是, 我有服务器可以满足自托管的需求 有一些信息源需要海外获取 轻量 而且支持一些插件,所以我先打通我的 V1 部署之后,未来配合一个好用的 Claw 打通 V2 的需求 1 2 3 4 [RSS源] ---> [FreshRSS] ---> [数据库] | +--> Web UI +--> API(客户端/自定义服务) 1 FreshRSS --> LLM服务 --> 智能摘要 / 分类 / 推荐 这样未来我的Claw 可以不止收集一个免费的头条信息。而是可以从我收藏的这些订阅源里面筛选出 总结出 我想看的内容 ...

March 19, 2026 · 2 min · 216 words · Ray

Ubuntu Automatic updates

起因 上午醒来看到邮件里面有一封 netdata 发的警告 netdata 我只部署了少量的服务器,本文和这次警告没有太大关系,而是让我想到了一个很苦恼的事情。 这个应该是 ubuntu 的自动更新机制、他在更新后需要进行重启操作,有一些驱动甚至会重新编译。 触发原因:Ubuntu 系统最近通过 apt 安装了一些软件包更新(最常见的是 Linux 内核 linux-image 或核心库如 libc6),这些更新需要重启系统才能完全生效。Netdata 检测到系统中存在 /run/reboot-required 这个文件(以及里面的 /run/reboot-required.pkgs 列出了具体包),就触发了这个警告。 之前有一台生产的服务器上,有用 cuda、某天 ubuntu 自动更新后、内核态和运行态版本对不齐、导致 cuda 无法使用,当时状态又不好重启、基本没什么办法,比较糟心、现在看到这个之后回想这件事情、决定搜一下文档,看看怎么关闭自动更新。 解决办法 推荐方案1(最优):保留自动安全更新,但黑名单内核和 NVIDIA 包(不影响其他安全补丁) 这样其他软件的安全更新继续自动装,但内核和 NVIDIA 不会自动动,避免重启和 CUDA 问题。 编辑配置文件: 1 sudo vim /etc/apt/apt.conf.d/50unattended-upgrades 在文件里找到 Unattended-Upgrade::Package-Blacklist 部分(如果没有就自己加),添加: 1 2 3 4 5 6 7 8 9 10 Unattended-Upgrade::Package-Blacklist { "linux-generic"; "linux-image-generic"; "linux-headers-generic"; "linux-image.*"; "linux-headers.*"; "nvidia-*"; "libnvidia-*"; "cuda*"; }; 保存后重启 unattended-upgrades 服务(或重启服务器): 1 sudo systemctl restart unattended-upgrades (可选)永久锁定内核版本: 1 sudo apt-mark hold linux-generic linux-image-generic 以后内核更新就只在你手动 apt upgrade 时才发生,你可以在维护窗口处理 NVIDIA driver 重建(sudo ubuntu-drivers autoinstall)并重启。 ...

March 18, 2026 · 1 min · 130 words · Updated: April 20, 2026 · Ray