Nicholas Clooney

最新文章

随处可达、对公网隐形的私有入口引擎

大多数个人项目和家庭实验室服务不必公开,但需要能够访问。我想在任何地方,用自己的任何设备访问开发工具、内部面板和副业项目,而不用开放端口、暴露 IP,也不用担心互联网中的谁会偶然发现它们。

这篇文章介绍我如何用 Tailscale、Docker、Caddy 和 DNS 重写,构建一个随处可达、对公网隐形的入口引擎。最终是一套基于域名的私有环境,像一个小型云:有 HTTPS、整洁的主机名和反向代理,但只有我能访问,运行在自己的机器上,完全不暴露到公共互联网。

幕后:和 GPT 结对撰写 Umami 文章

Umami + Ansible 那篇文章,我在脑子里酝酿了很久,但它涉及三个不同的仓库和一大堆代码片段。做得来,却也确实繁琐,所以一直被往待办列表后面推。完成后的文章在这里:用 Umami、Docker Compose 和 Ansible 搭建私有分析服务。

最终推动它落地的想法很简单:何不让 GPT(Codex)负责繁重工作,由我把握方向?

我的超能 Tmux:一个会话,多个独立焦点

我希望 tmux 是一个完整统一、永不消失的环境。在桌前接上扩展坞时,我会把 iTerm 分布到多个 Mission Control 桌面,每个空间放一个不同的项目,以及那个项目需要的其他工具。之后拿起 MacBook Air,或者在 iPhone、iPad 上打开 Blink 时,我希望看到完全相同的窗格、命令历史和回滚内容。

普通的 tmux attach 已经很接近了,但共享的“当前窗口”会打破这种体验。我在主终端切换窗口,所有其他 tmux 客户端也会跳到同一个窗口,打断我正在进行的事情。我想让 tmux 既保留状态,又支持多个独立焦点。

你敢信吗?这套 Tailscale 配置给了我彻底的自由

如果你也想让手机成为完整的开发工作室,随手就能使用 SSH、实时预览和整套工作流,那么这个故事就是写给你的。一次小小的 Tailscale 实验,彻底改变了我构建项目、写代码和保持连接的方式。从私有开发环境到浴缸里写代码,没错,是真的,下面说说它们是怎么串起来的。

每一节都在前一节的基础上推进,直到最后那个“真不敢相信,我的手机已经是一整间开发工作室”的时刻。如果可以,请从头读完,后面的收获值得。

安全地配置 Rust,不再盲目执行 `curl | sh`

Rust 是这个时代设计最用心的语言之一,但在 macOS 上安装它,却莫名让人摸不着头脑。常见建议是运行 curl https://sh.rustup.rs | sh 这样的一行命令。它确实很好用,却隐藏了许多幕后过程。对于更重视安全,或只是想知道装了什么、装在哪儿的开发者来说,这种默认方式很像一个黑箱。

这篇文章会介绍在 macOS 上安装和管理 Rust 的不同方法:Homebrew 的便利、rustup 的灵活,以及手动安装或容器环境的透明度。目标很简单:在保留实用性的同时,让你了解过程并掌握控制权。

为我的 Eleventy 博客点亮 GitHub 代码嵌入

很长一段时间里,分享 GitHub 代码就意味着截图,或把原始片段粘贴进 Markdown。这两种方式都不太可靠:截图让 RSS 阅读器看不到文本,复制粘贴的代码又会在上游文件一改动时失去同步。我想要 Emgithub 的可读性、服务端渲染带来的 SEO 优势,以及完全不依赖第三方 JavaScript。

这周,这几项终于凑齐了:一个 {% github %} 短代码,在构建时获取代码,完成高亮、行号和复制按钮。它只需要 GitHub blob URL,以及一个可选的明暗界面样式参数。

我如何意外把 Umami 仪表盘暴露在公网,以及学到的教训

最近,我在 VPS 上用 Docker 和 Nginx 配好 Umami 几小时后,发现一个配置错误把管理后台暴露到了公网。幸好没有立即造成危险。我在创建 Umami 的 Docker 实例后就马上修改了管理员用户名和密码,也在出事之前收紧了访问权限。不过,这仍然让我紧张了一阵:部署时的小失误,后果可能很大。

下面说说事情的经过,以及我从中学到的东西。