这是一篇关于将现有 Linux 服务器迁移到 NixOS 的文章,主要内容如下:
- 背景/历史:过去十年,作者使用过多种操作系统用于 NAS 需求,包括 Debian、CoreOS、Ubuntu 和 NixOS 等。
- NAS 软件需求:需要远程管理、自动化更新且易于回滚,CoreOS/Flatcar 通过 A/B 更新方案实现,NixOS 则通过“generation”概念实现。
从 CoreOS/Flatcar 迁移到 NixOS 的原因:
- cloud-init 被弃用,Ignition 更强大但使用复杂。
- 容器过时,Docker Hub 自动化构建需订阅。
- 依赖中央服务,如 Docker Hub 停止运营将无法部署软件。
- 无法在 Flatcar 上尝试 Immich,而 NixOS 软件库更大,配置更抽象。
- 在虚拟机中进行原型设计:为确保 NAS 系统安全,先在虚拟机中测试配置,然后再迁移到实际机器上。
迁移步骤:
- M1. 安装 NixOS:按照教程安装 NixOS,并进行一些网络和用户配置。
- M2. 设置远程磁盘解锁:将 CoreOS/Flatcar 的 cloud-init 配置转换为 NixOS 服务,实现磁盘解锁。
- M3. 设置 Samba 访问:启用 Docker NixOS 模块,使用 Docker 运行 Samba 服务,实现文件共享。
- M4. 设置 SSH/rsync 备份:使用 rrsync 通过 SSH 进行备份,确保备份安全。
其他优化:
- N1. Prometheus Node Exporter:安装 Prometheus Node Exporter 和 Tailscale,实现监控和网络连接。
- N2. 可靠的挂载:让 systemd 管理挂载,避免直接调用 mount(8)导致的不可靠问题。
- N3. nginx-healthz:配置 Web 服务器,检测 /srv 挂载状态,实现系统启动监控。
- N4. NixOS Jellyfin:简化 Jellyfin 的配置,将相关设置移至 jellyfin.nix 文件中。
- N5. NixOS samba:使用 NixOS 的 samba 模块,设置 Samba 共享和用户密码。
- N6. NixOS rrsync:将 rrsync 从 Docker 迁移到 NixOS,简化配置。
- N7. sync.pl 脚本:将 sync.pl 脚本转换为 Nix 表达式,减少对 Docker 的依赖。
- N8. 共享配置:将用户设置提取到 user-settings.nix 文件中,实现配置共享。
- N9. 尝试 Immich:在 NixOS 上安装并配置 Immich,实现媒体管理。
- 结论:作者对 NixOS 配置满意,能够 declaratively 管理所有内容,建议考虑使用 NixOS 管理其他系统,但对于单一系统可能过于复杂。文章还提供了 GitHub 上的完整配置目录,并感谢读者支持。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。