Peter
Peter
发布于 2026-05-13 / 25 阅读
0
0

LoopNull的开始

这是 LoopNull 的第一篇文章。

严格来说,我一开始并没有很明确地想要“做一个个人博客”。最早的起因其实很简单:我拿到了一台属于自己的服务器,然后开始好奇它除了放在那里吃灰之外,还能做什么。

后来才有了这个站点。

这件事本身有点像一条不断延伸的线:先是服务器,然后是 headless 浏览器;为了更方便管理服务,又接触到 Docker 和 1Panel;为了真正放一个网站,又开始研究 Halo 和域名;再后来,开始折腾 Cloudflare Tunnel / Access、远程 Chromium、域名邮箱和访问控制。

所以 LoopNull 并不是一个从一开始就规划好的项目,甚至不是什么很有目的性的想法。

它更像是从一个很普通的问题里长出来的新问题:

我手里有了一台服务器,那我能不能拿它做点真正属于自己的东西?

这篇文章就算是给 LoopNull 做一个起点记录。不是总结,不是宣言,只是记录一下它为什么开始、现在长成了什么样,以及我为什么觉得这件事值得继续做下去。


起点不是博客,而是一台服务器

真正的起点是一台 Oracle Cloud 的免费服务器。

当时我是在 YouTube 上看到有人分享 Oracle Cloud 免费实例的相关内容。说实话,最开始吸引我的并不是什么“云计算实践”或者“个人基础设施”,而是很朴素的想法:既然有免费的服务器资源,而且配置看起来还不错,那不试一下好像有点亏。

那台机器的配置在免费资源里算是比较能打的:4 核 ARM CPU、24G 内存、200G 存储。虽然没有显卡,但对于一个刚开始接触服务器的人来说,这个配置已经足够。

一开始,我对服务器的理解其实还比较模糊。

在此之前,“服务器”对我来说更多是一个听起来很远的词:网站部署在服务器上,游戏也有服务器,公司后端也跑在服务器上。但这些理解都比较抽象。它们更像是概念,而不是我真的能够触摸、登录、配置、破坏、恢复的东西。

直到我真正拿到一台可以自己 SSH 登录的机器,这个词才突然变得具体起来。

我可以进入它的终端,可以安装软件,可以开端口,可以运行进程,也可以把东西配坏。它不像本地电脑那样必须一直开着,也不像普通平台账号那样只能在别人设计好的界面里点来点去。它是一台长期在线、由我自己控制的机器。

这种感觉很微妙。

不是“我突然变厉害了”,而是我第一次比较清楚地意识到:互联网上很多看似复杂的东西,背后其实也是由一台台机器、一个个进程、一条条配置规则构成的。区别只是以前我只是在使用它们,现在我开始尝试进入它们背后那一层。

最开始我并没有想得太远。

我只是想:既然有了一台长期在线的服务器,那能不能让它帮我跑一些平时电脑不方便一直开的东西?

比如 headless 浏览器。

这个想法其实非常直接。自己的电脑不可能永远开着,浏览器也不可能一直挂着。但服务器可以。只要环境搭起来,它就可以长时间运行在远端,不需要我一直盯着本地设备。

于是,我开始尝试让服务器运行一个远程浏览器环境。

这一步现在回头看并不算什么大项目,但它对我来说很关键。因为它让我第一次不再只是“按照教程搭个网站”,而是在思考一个更具体的问题:

我能不能把一台远程机器变成自己的工具?

从这里开始,服务器不再只是服务器。它变成了一个可以承载想法的地方。

有些想法很粗糙,有些方案也不优雅,但重要的是,我开始有了一个可以反复试错的环境。配置失败了可以重来,服务挂了可以看日志,容器崩了可以重启,端口不通就排查网络,页面打不开就查 DNS、代理、证书和访问控制。

这和单纯看教程完全不一样。

看教程时,很多东西是平面的;真正部署时,问题是立体的。一个服务能不能跑起来,可能同时涉及系统、网络、权限、容器、端口、反向代理、域名解析、浏览器策略和安全限制。

也正是从这台服务器开始,我才逐渐意识到:技术学习不一定只能从一本书、一门课、一个算法题开始。有时候,一个真实运行的系统本身,就会不断把问题推到你面前。

你不一定一开始理解它,但只要你想让它跑起来,就必须一点一点理解它。


从“能不能跑起来”到“为什么不写点什么”

最开始,我只是想让服务器完成一些具体任务。

比如运行远程浏览器,比如挂一些长期在线的环境,比如测试一些本地电脑不方便一直跑的东西,例如挂网课 (bushi

这些想法都比较工具化:我有一台机器,所以我要让它干活。

但折腾着折腾着,问题开始变了。

我开始想:既然这台服务器已经存在,而且可以长期在线,那它是不是不应该只用来跑一些临时任务?它能不能承载一个更稳定、更长期的东西?

比如一个网站。

再具体一点:一个属于自己的博客。

这个想法出现之后,我开始研究应该怎么搭。最开始接触到的是 1Panel。它提供了一个比较友好的服务器管理界面,可以管理应用、容器、网站、数据库等内容。对我这种刚开始把服务器当成长期项目来折腾的人来说,它降低了很多入门门槛。

但 1Panel 并不是凭空运行的。

为了理解它背后的应用部署方式,我又开始接触 Docker。以前听到 Docker,更多只是知道它和“容器”有关,知道很多开发部署都会用它,但并没有真正理解它解决的是什么问题。

直到开始部署服务之后,我才逐渐明白 Docker 的价值:它把应用和运行环境打包在一起,让很多服务可以用更清晰、更可迁移的方式运行。你不需要把所有依赖都直接塞进系统里,也不需要每次都从零手工配置一遍环境。

当然,刚开始用 Docker 的时候,我其实并没有什么体系化理解。

更多时候是:

看到一个命令,复制; 看到一个 compose 文件,改配置; 容器起不来,看日志; 端口冲突,改端口; 挂载目录错了,重新映射; 权限不对,再查原因。

这过程谈不上优雅,但很有效。

它让我从“我知道 Docker 是个技术名词”,慢慢变成“我知道一个服务大概是怎么被容器化运行起来的”。

然后就是 Halo。

我需要一个博客系统,Halo 正好足够适合个人站点。它不像从零写一个网站那样复杂,也比单纯静态页面更适合长期维护内容。于是,我开始把 Halo 部署到服务器上,再把它和域名绑定起来。

这时候 loopnull.com 才真正开始有了意义。

在买域名之前,服务器只是一个 IP。IP 可以访问服务,但它没有记忆点,也不适合作为长期身份入口。域名出现之后,整个事情的感觉就变了。

loopnull.com 不再只是一个地址,而是一个可以组织很多东西的入口。

博客可以放在主域名下,管理面板可以放在子域名下,远程浏览器也可以通过子域名访问。不同服务开始围绕一个域名组织起来,而不是散落在一堆 IP、端口和临时链接里。

这也是我第一次明显感受到:域名不是一个装饰,它是互联网身份和服务组织方式的一部分。

在这个过程中,很多东西都是被问题推着学的。

想让服务方便管理,就接触 1Panel。

想理解应用部署,就接触 Docker。

想让网站可访问,就配置域名和 DNS。

想让内部服务不直接暴露在公网,就研究 Cloudflare Tunnel。

想保护 1Panel 和远程 Chromium,就继续研究 Cloudflare Access。

想用自己的域名收发邮件,就配置 Lark Mail、MX、SPF、DKIM、DMARC。

每一个新问题都会牵出下一个问题。

这也是我觉得这件事有意思的地方:它不是单点知识,而是一串知识链。你一开始可能只是想“搭个博客”,但真正做下去会发现,博客只是最外层的表现。背后还有服务器、系统、容器、网络、安全、身份认证、邮件、备份、监控等一整套东西。

当然,现在这些东西我都还只是刚开始接触。

但至少,它们不再只是我在文章里看过的词,而是我在自己的服务器上实际配置过、踩过坑、出过错、修过问题的东西。

这比单纯“学过”要具体得多。


博客不只是写文章

一开始我以为,搭博客就是找一个博客系统,把文章写进去,再让别人能打开网页看到。

这当然是博客最直接的用途。

但真正把 loopnull.com 跑起来之后,我发现博客本身并不是唯一重点。更重要的是,它让我开始拥有一个可以长期维护的互联网空间。

这个空间和平台账号不太一样。

在各种平台上注册账号很方便。GitHub、B站、知乎、YouTube、邮箱服务、社交平台,每个平台都可以给你一个主页、一个用户名、一个展示窗口。但这些位置本质上都是平台提供的。你可以使用它们,但它们的结构、规则和边界并不由你决定。

个人网站不一样。

它可能一开始很简陋,访问量也几乎没有,但它是围绕自己的域名和服务器组织起来的。你可以决定它长什么样,放什么内容,怎么分类,接入什么服务,使用什么访问控制方式,以及未来要不要重构。

这是一种完全不同的感觉。

买下 loopnull.com 之后,我第一次比较清楚地感受到:域名不只是一个网址,它更像是一个长期的数字坐标。

博客可以放在这个域名下。

邮箱可以使用这个域名。

1Panel 可以通过子域名访问。

远程 Chromium 可以通过子域名进入。

Cloudflare Tunnel 可以把内部服务安全地暴露出来。

Cloudflare Access 可以在访问之前加上一层身份认证。

这些东西组合起来之后,loopnull.com 就不只是“我的博客地址”了。

它更像是一个我自己维护的入口,一个小型的个人互联网基础设施。

当然,这个说法听起来可能有点大。实际上它现在还很简单,也没有什么复杂架构。但对我来说,重要的不是规模,而是结构。

以前使用互联网,更多是站在用户侧:

打开网页、注册账号、上传内容、使用服务。

现在我开始尝试站到另一侧一点点:

配置服务、管理域名、控制访问、组织系统、维护运行状态。

这个转变并不会让我立刻变成什么工程师,但它确实改变了我理解互联网的方式。

我以前理解的“网站”,更多是浏览器里的页面;现在我会更自然地想到它背后的服务、容器、端口、DNS、证书、反向代理、访问控制和日志。

我以前理解的“邮箱”,更多是一个收发邮件的工具;现在我会想到域名、MX 记录、SPF、DKIM、DMARC,以及为什么邮件系统需要这些东西来证明一封邮件确实来自它声称的域名。

我以前理解的“登录”,更多是输入账号密码;现在我会想到 OAuth、身份提供商、Access policy,以及如何在不直接暴露服务的情况下完成认证。

这些变化都不是靠看一篇文章突然完成的,而是在一次次具体配置里慢慢发生的。

所以对我来说,LoopNull 不只是一个写文章的地方。

它更像是一个长期实验场。

我可以在这里记录技术学习,也可以记录项目实践;可以写配置过程,也可以写踩坑复盘;可以留下现在的理解,也可以在以后回头修改、补充甚至推翻。

博客最有价值的地方也许不在于“我现在写得多成熟”,而在于它可以持续积累一个人理解世界的痕迹。

至少对现在的我来说,LoopNull 是一个开始。

它让我从“只是使用互联网”,开始尝试“拥有并维护一小块互联网”。


现在的 LoopNull

目前,LoopNull 已经不是最开始那个“我有一台服务器,不知道能干什么”的状态了。

它现在至少已经有了一个比较清晰的雏形:一个可以访问的个人博客,一个可以维护的服务器环境,一套围绕域名组织起来的访问入口,以及一些正在运行的辅助服务。

现在这个站点主要由这些部分组成:

  • 使用 Halo 作为博客系统
  • 使用 1Panel 管理服务器和应用
  • 使用 Docker 运行相关服务
  • 使用 Cloudflare Tunnel 暴露部分内部服务
  • 使用 Cloudflare Access 保护 1Panel 和远程 Chromium
  • 使用 Lark Mail 管理 @loopnull.com 域名邮箱

这些东西单独拿出来看,其实都不算特别复杂。

Halo 是博客系统,1Panel 是服务器管理面板,Docker 用来运行服务,Cloudflare Tunnel 用来把内网服务暴露到公网,Cloudflare Access 用来在访问前加一层身份认证,Lark Mail 用来接管域名邮箱。

但它们组合在一起之后,就不只是“装了几个工具”。

它们开始形成一个小型系统。

比如,loopnull.com 是博客的主入口;一些内部服务不再直接通过 IP 和端口暴露,而是通过子域名访问;1Panel 和远程 Chromium 这类不适合裸露在公网的服务,则放在 Cloudflare Access 后面,通过 Google / GitHub 认证后再进入;@loopnull.com 邮箱则让这个域名不只是一个网站地址,也开始具备独立的通信身份。

这套东西现在还很初级,也远远谈不上成熟。

但它已经让我开始意识到:所谓“个人网站”,如果只是一个页面,那当然很简单;但如果把它当成一个长期运行的系统,就会涉及很多更底层的问题。

比如:

  • 服务如何部署?
  • 数据如何保存?
  • 域名如何解析?
  • 访问如何控制?
  • 后台是否安全?
  • 邮件如何验证?
  • 出问题后怎么恢复?
  • 未来迁移时如何减少损失?

这些问题一开始并不会同时出现。

它们通常是一个接一个冒出来的。

网站跑起来之后,会开始关心域名;域名配好之后,会开始关心 HTTPS;后台能访问之后,会开始担心安全;服务越来越多之后,会开始关心管理方式;邮箱接入之后,又会开始研究 SPF、DKIM、DMARC 这些原本完全不会主动去看的东西。

所以现在的 LoopNull 对我来说,不只是一个“已经搭好的博客”。

它更像是一个正在运行的学习环境。

我可以在这个环境里真实地接触 Linux、Docker、DNS、网络、访问控制、身份认证、邮件系统和服务器维护。每一个配置都不是孤立的,它们会互相影响,也会共同决定这个站点能不能稳定、安全、长期地运行下去。

当然,目前我对很多东西的理解还很浅。

很多配置是先跟着教程做,再在出问题时慢慢理解。很多概念也是先知道“应该这样配”,再回头查“为什么要这样配”。这并不理想,但它很真实。

至少它让我从完全停留在概念层,向实际操作层走了一步。

现在的 LoopNull,就是这样一个还不成熟、但已经开始运转的小系统。

它不会一次成型,也不应该一次成型。

后面它大概率还会经历很多调整:主题可能会换,分类可能会改,服务可能会重构,服务器可能会迁移,安全策略也可能会重新设计。

但只要它还在继续维护,它就不是一个静态页面,而是一个持续生长的东西。


以后这里会写什么

既然这个站点已经搭起来了,接下来更重要的问题就是:这里到底要写什么?

我不太想把它做成一个纯粹的日记站,也不想把它写成那种为了“输出”而输出的内容农场。

更准确地说,我希望它成为一个长期记录技术实践和思考的地方。

目前大概会写这些内容。

第一类是服务器和基础设施相关的记录。

比如 Linux、Docker、1Panel、Halo、Cloudflare Tunnel / Access、域名、DNS、邮箱配置、备份、安全策略等内容。这些东西大多来自我自己的实际部署过程。遇到问题、查资料、解决问题、回头复盘,这些过程都可以记录下来。

这种记录不一定每次都很高级。

有时候可能只是一个很小的问题,比如某个 DNS 记录为什么没有生效,某个容器为什么启动失败,某个端口为什么访问不到,Cloudflare Access 的策略为什么没有按预期工作。

但这些小问题如果记录下来,以后就不只是一次性的踩坑,而会变成可以复用的经验。

第二类是 self-hosting 和个人工具链。

我对“自己维护一部分工具”这件事带点兴趣。所有东西都要自己造轮子,在这个过程中可以更清楚地理解工具背后的结构。

比如:

  • 为什么很多人要自托管服务?
  • 哪些服务适合自托管,哪些不适合?
  • 自托管的成本到底在哪里?
  • 安全、备份、维护、迁移分别会带来什么问题?
  • 个人服务器如何在可用性和复杂度之间取得平衡?

这些问题不只是技术问题,也涉及取舍。

一个服务能跑起来,不代表它值得长期维护;一个工具很酷,也不代表它适合自己的实际需求。后面如果继续折腾这些东西,我也会尽量把判断过程写清楚,而不是只写“部署成功”。

第三类是编程学习和项目实践。

我现在仍然处在基础积累阶段。C++、后端、网络、数据库、操作系统、工程化,这些内容都还需要系统学习。后面如果做一些小项目,或者在学习过程中遇到值得记录的问题,也会写在这里。

对我来说,写技术文章的目的并非是假装自己已经懂了,而是倒逼自己把一个问题讲清楚。

如果一个东西只能在脑子里模糊地觉得“好像懂了”,但写不出来、解释不清、复现不了,那大概率还没有真正掌握。

所以这个站点也会承担一部分学习笔记的作用。

不过我希望它不是简单复制教程,而是尽量记录:

  • 我遇到了什么问题
  • 我最开始是怎么理解的
  • 后来发现哪里理解错了
  • 最终是怎么解决的
  • 这个问题背后的机制是什么

第四类是一些关于学习、系统和互联网的思考。

这些内容可能不会特别技术化,但会和我的学习过程有关。

比如,为什么真实项目比单纯看教程更容易暴露问题;为什么很多知识只有在被一个具体问题调用时才会真正变得清晰;为什么互联网不仅是内容平台,也是一套由协议、身份、服务、规则和基础设施组成的系统。

对这些问题的理解我现在还很有限。

但这恰好也是记录的价值所在。

如果等到完全成熟、完全正确、完全体系化之后再写,很多最初的变化反而会被忘掉。很多时候,一个人刚开始理解某件事时留下的痕迹,反而比后来的总结更有现场感。

所以这里不会只放“最终答案”。

也会放一些过程、修正和不成熟的判断。

后面回头看,如果发现以前写错了,那就修改;如果发现以前理解太浅,那就补充;如果发现某些想法已经不适用了,那就推翻。

这也是我想要一个自己博客的原因之一。

平台上的内容更像一次性发布,而自己的站点更像一个可以长期维护的工作区。


作为起点

LoopNull 现在只是刚刚开始。

它不是一个完成品,我也不想把它包装成一个已经成熟的个人品牌或者技术站点。现在的它更像一个刚刚搭起来的工作台:工具还没有摆整齐,很多地方还比较粗糙,但至少已经可以开始使用了。

这篇文章也是一样。

它不是为了证明我已经做成了什么,而是记录一个起点:我从一台服务器开始,慢慢搭起了一个博客,又顺着这个博客接触到更多关于服务器、网络、域名、访问控制、邮件和个人基础设施的东西。

很多配置现在还只是“能跑”。

很多理解也只是“刚开始知道为什么”。

但这并不妨碍它成为一个开始。

对我来说,比较重要的变化是,我不再只是把互联网当成一个使用对象,而是开始尝试理解它背后的组织方式。

一个网站为什么能被访问?

一个域名为什么能指向服务器?

一个服务为什么不应该直接暴露在公网?

一封来自自己域名的邮件为什么需要被验证?

一个后台入口为什么需要访问控制?

一个容器为什么能把应用和环境一起封装起来?

这些问题以前离我很远,现在开始变成我会实际遇到的问题。

这就是 LoopNull 对我当前阶段的意义。

它给了我一个可以持续折腾、记录和修正的地方。

以后这里可能会有很多很基础的文章,也可能会有很多现在看来不成熟的判断。但只要这些内容来自真实的问题、真实的部署、真实的学习过程,它们就有被记录下来的价值。

我不确定这个站点最后会长成什么样。

可能会变成一个技术笔记站,可能会变成一个个人知识库,也可能只是长期记录我学习和折腾互联网基础设施的地方。

但至少现在,它已经开始运行了。

这篇文章就当作 LoopNull 的第一条记录。

从一台服务器开始,从一个域名开始,从一个还能不断修改的地方开始。

正如首页副标题—— Reset. Rebuild. Repeat.


评论