想在自己的服务器上部署一个服务时,我们当然可以通过 Google 或 ChatGPT 查找方案。但搜索有一个前提:首先要知道这个服务存在,也要知道应该搜索什么名字。
这篇文章不是 All-in-One 的安装教程,而是一份服务地图。我会按用途简要介绍自己使用或纳入管理的服务,包括 GitLab、Immich、Transmission、Jellyfin、Nextcloud 等。读者可以先认识它们,再选择感兴趣的方向继续了解。
1. 开发与内容发布
1.1 GitLab:代码托管与持续集成
GitLab 是一套完整的 DevOps 平台。除了保存 Git 仓库,它还提供 Issue、Merge Request、CI/CD、软件包仓库和用户权限管理。
在我的 All-in-One 中,GitLab 是代码和自动化流程的中心。网站、服务配置和部署脚本都可以通过分支与 Merge Request 审查,再由 CI/CD 完成测试、构建或部署。它适合希望把代码与自动化留在自己控制范围内的人。
1.2 BookOrbit:个人书库与阅读管理
BookOrbit 用来管理电子书和阅读相关数据。它不只是一个文件目录,而是为书籍提供检索、元数据和应用层的管理能力,并使用 PostgreSQL 与 pgvector 支持数据存储和向量能力。
如果电子书分散在多个目录中,或者希望围绕书库继续增加搜索、推荐和 AI 功能,这类专用应用会比直接浏览文件系统更方便。
1.3 Overleaf:在线 LaTeX 写作
Overleaf 是在线 LaTeX 编辑器,适合编写论文、报告和包含复杂公式的技术文档。浏览器提供编辑界面,服务器负责保存项目并执行 LaTeX 编译。
自托管版本适合希望控制文档数据、需要内网协作,或者想建立稳定 LaTeX 编译环境的用户。它由应用、MongoDB 和 Redis 等组件组成,因此比普通文本编辑器需要更多资源和安全管理。
2. 照片、文件与个人数据
2.1 Immich:照片和视频管理
Immich 是面向自托管场景的照片与视频管理服务,常被用作手机相册备份和浏览工具。它提供时间线、相册、搜索、人物识别、地图和移动端自动备份等功能。
我的部署还包括 PostgreSQL/VectorChord、Valkey 和使用 CUDA 的机器学习服务。Immich 适合希望保留原始照片、又想获得接近现代云相册使用体验的人,但照片库和数据库都必须进入可靠的备份计划。
2.2 Nextcloud:文件同步与协作
Nextcloud 可以理解为自托管的文件云。它支持浏览器访问、桌面与移动端同步、文件共享、版本记录,并可以通过应用扩展日历、联系人和协作功能。
它适合在多台设备之间同步文档,或者为家庭成员提供统一文件入口。与普通网络共享相比,Nextcloud 更关注跨设备同步和 Web 协作;代价是需要维护数据库、缓存和后台任务。
Nextcloud 还提供标准的 WebDAV 接口,可以作为其他应用和设备的文件同步端点。例如,Obsidian 可以配合 WebDAV 同步插件在不同设备之间同步知识库,Sony Digital Paper(DPT)也可以通过 WebDAV 同步 PDF 和批注文档。这样,两类工具都可以继续使用原有工作方式,而文件统一保存在自己的服务器中。
2.3 Joplin Server:笔记同步后端
Joplin 是一款支持 Markdown 的笔记应用,Joplin Server 则为桌面端和移动端提供自托管同步服务。
如果已经使用 Joplin 写笔记,又不希望依赖第三方同步平台,可以用它集中保存笔记、附件和同步状态。它的定位很明确:负责 Joplin 客户端之间的同步,而不是替代完整的在线文档平台。
2.4 Vaultwarden:轻量密码管理
Vaultwarden 是兼容 Bitwarden 客户端的自托管密码管理服务器。浏览器插件和移动端可以继续使用熟悉的 Bitwarden 生态,服务端则运行在自己的基础设施中。
它很适合个人或家庭保存密码、密钥和安全笔记。不过,自托管密码管理并不会自动变得更安全:访问控制、HTTPS、更新和离线备份都必须认真处理。
3. 媒体与下载
3.1 Transmission:轻量 BitTorrent 客户端
Transmission 是资源占用较低的 BitTorrent 客户端。它可以在服务器上持续运行,通过 Web UI 添加种子、查看进度、设置速度限制和管理下载目录,不需要让个人电脑一直开机。
它适合承担长期下载任务。Web 管理界面可以通过 HTTPS 访问,而 peer 流量使用独立的 TCP 和 UDP 端口,两类流量应该分别设置网络和安全规则。
3.2 Jellyfin:个人媒体中心
Jellyfin 用于整理和播放电影、剧集、音乐等本地媒体。它会读取媒体目录、获取元数据,并向电视、浏览器和移动设备提供统一的媒体库界面。
它是 Plex 的常见开源替代方案,适合希望由自己控制媒体文件和播放服务的人。Transmission 负责下载,Jellyfin 负责呈现已经整理好的内容;两者可以使用相邻的数据流程,但不必绑定成一个不可拆分的系统。
4. 存储与通信
4.1 Garage:S3 兼容对象存储
Garage 是为自托管和分布式环境设计的 S3 兼容对象存储。应用可以使用标准 S3 API 保存附件、备份和其他对象,而不必依赖公有云对象存储。
我的 All-in-One 使用单节点 Garage,主要目的是获得统一的对象存储接口,并不代表已经实现高可用或数据冗余。单节点中的数据仍然需要备份,管理接口也只应在可信网络中开放。
4.2 Stalwart Mail Server:自托管邮件系统
Stalwart Mail Server 是一个现代邮件服务器,覆盖 SMTP、IMAP、JMAP 等协议,可用于建立自己的邮箱服务。
邮件服务比一般 Web 应用更依赖公网 DNS、TLS、反向解析、端口可达性和反垃圾信誉,因此它被作为独立服务管理。知道这个项目可以帮助我们了解自托管邮件的选择,但真正公开部署之前还需要专门规划。
4.3 Certbot:申请和续期本地 HTTPS 证书
Certbot 是用于申请和续期 Let’s Encrypt 证书的自动化工具。在我的 All-in-One 中,它通过 Cloudflare DNS 验证域名所有权,因此不需要为了证书签发而开放 HTTP 端口。
签发后的证书和私钥保存在本机,由 Nginx 以只读方式挂载并提供给不同域名使用。续期成功后再重新加载 Nginx,就可以让各项服务持续使用受浏览器信任的 HTTPS 证书。这里的“本地证书”是指证书文件由本机保存和管理,并不是自签名证书。
5. 监控与日志
5.1 Prometheus:收集和查询指标
Prometheus 定期采集带时间戳的指标,例如 CPU、内存、磁盘空间、网络流量、容器资源以及应用内部状态,并提供查询语言用于分析这些数据。
我的 Prometheus 会汇总主机、容器和 Immich 等应用的指标。它解决的是“系统正在发生什么”,例如磁盘是否接近写满、某个容器是否持续占用大量内存,或者照片处理任务是否停滞。
5.2 Grafana:把指标和日志变成仪表盘
Grafana 是可视化和观测入口。它可以连接 Prometheus、Loki 等数据源,把查询结果组织成仪表盘,也可以进一步配置告警。
All-in-One 总览展示整台主机和各容器的状态,另外还可以为 Immich、GitLab 等关键服务制作专用页面。Grafana 本身不负责采集数据,它负责把分散的观测信息放到一个容易阅读的位置。
5.3 Loki:集中保存日志
Loki 是面向日志的存储与查询系统,经常与 Grafana 配合使用。它让不同容器的日志进入同一个查询入口,排查问题时不必逐台机器、逐个容器查找。
这套环境中的 Loki 使用文件系统保存一段时间的日志,并保持在私有网络内。它适合规模不大的 All-in-One:结构简单,又能提供比临时查看 Docker 日志更完整的历史记录。
5.4 node_exporter、cAdvisor 与 Alloy:数据采集器
监控系统还需要负责采集数据的代理:
- node_exporter 采集整台 Linux 主机的 CPU、内存、磁盘、文件系统和网络指标;
- cAdvisor 采集每个容器的资源使用情况;
- Grafana Alloy 发现 Docker 容器,并把它们的日志转发到 Loki。
它们通常没有复杂的用户界面,却是可观测链路的起点。Prometheus、Loki 和 Grafana 能看到什么,取决于这些采集器提供了什么。
6. 这些服务如何组成一个整体
6.1 统一入口,独立运行
Nginx 作为统一的 HTTPS 入口,根据域名把请求转发给各个 Web 应用。只有需要接收 Web 请求的应用容器加入共享的 proxy 网络,数据库、缓存和管理端点继续留在各自的内部网络中。
每项服务仍然是独立的 Git 仓库和 Docker Compose 项目。升级 Immich 不需要同时重启 GitLab,暂停 Jellyfin 也不会影响 Nextcloud。All-in-One 仓库只负责记录这些项目在当前环境中的版本、网络和部署差异。
6.2 配置、密钥和数据分开管理
Git 保存能够公开审查和重新执行的配置;密码、证书和环境变量保存在仓库之外;照片、文档、数据库与媒体文件则进入持久化存储和备份体系。
这项边界比安装了多少应用更重要。容器和源码通常可以重新获得,个人数据和密钥却不能在故障后凭空重建。