NixOS让我变得不那么害怕
不久之前发生了一件有趣的事情:我阅读了关于FreshRSS的内容,感觉不错,于是我在一台服务器上安装了它并开始使用。去年我不会这么做,但去年我也没有任何NixOS服务器。在过去的几年里,我的RSS订阅只在我的手机上本地存活。这样做背后有个好主意1 1,因为我在远离电脑的时候,通常可以花时间阅读这些内容,但实际上却从未真正工作过。首先,许多东西在更大的屏幕上更容易阅读。此外,信任一个手机应用来管理跨越百个订阅的成千上万篇文章的已读/未读状态,这也是不靠谱的。2 2 尤其是当我切换到另一部手机时,我可以将所有订阅迁移过去,但已读/未读状态却在途中丢失了。我真正想要的是一个服务器端的聚合器。这是运行在服务器上的软件,管理RSS订阅,然后我可以通过web界面或客户端应用程序来阅读RSS订阅。我想要这样一个功能已经很久了,但我从未采取行动,因为那将是又一个需要维护的侧项目。但现在,有了一些NixOS的经验,添加一个完整的FreshRSS配置(包括备份)只需要9行Nix代码3 3,再加上十几行用于nginx反向代理的配置。因为我想要从特定位置块中进行proxy_pass,这需要重写cookie路径,所以事情变得有些复杂。但这是我的问题,不是NixOS的问题。该安装在过去几个月中一直顺利运行。如果这台服务器发生故障,我可以在大约15分钟内启动一台运行相同配置的新服务器。当我们能做到这一点时,实际上就没有理由不去尝试新的软件。想想看,FreshRSS在NixOS外部的安装过程是怎样的。那时我们要下载并解压一个文件到正确的位置;根据说明配置权限;安装nginx和php-fpm以及必要的额外依赖项;配置php-fpm池,并使nginx将请求传递给php-fpm;设置Let’s Encrypt证书;设置备份;并希望如果出现问题需要在新或升级的服务器上重新安装FreshRSS,能记住怎么做上述所有操作。当然,FreshRSS项目提供了一个容器镜像,这可以缩短一些过程。它声称设置Apache与mod_php并以正确的方式进行配置。那时我们只需要配置备份,创建一个运行容器的systemd服务,并管理nginx作为在前面终止tls的反向代理,因为该容器镜像合理地不带有tls支持。这些仍然是需要记住的东西,而且在重新安装时,六个月后相同的东西不一定有效,除非我们记下我们下载的确切容器镜像。4 4 从源代码构建容器镜像也没有帮助,因为两次间隔时间较长的相同Dockerfile构建可能导致不同的容器镜像。我之前提到过我有多不喜欢维护侧项目。这包括我自己的代码,但也包括他人开发的自托管服务。我可以在这里和那里花几分钟时间维护,但必须安排数小时的不间断工作来升级某个东西,或者在紧急维护上花费任何时间,真的会打击我与计算机工作的欲望。你可能会想,我这样的人会深入到配置管理、容器编排,或者两者都涉及,但不是的。我曾认真尝试过CFEngine、Ansible、podman和k3s,但它们都没有显著改善我的安装/配置/部署体验,主要依赖于(a)仔细记录事情,有时(b)将这些仔细的笔记转换成执行一系列ssh命令的shell脚本。5 5 是的,这本质上是在重新发明Ansible,但不那么脆弱。它不会因为有人从侧面看pip而中断。shell脚本的缺点是,它往往依赖于随着时间推移变得无效的假设,或者在不同的环境中使用时。NixOS配置的读取方式与我自己对自己小心说明的方式非常相似,只是它们是可执行的,并且每次都产生相同的结果。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡