# NAS 进阶第一步，了解“本地部署”

> 本文公开全文。

原文：https://utgd.net/article/8749

“本地部署”（Self\-hosted）这个词对开发者这个群体来说并不陌生。然而这篇文章是针对个人使用情况下的本地部署。

## 为什么我们需要本地部署？

本地部署服务最大的好处在于“自己可控”。从网络到硬件、从系统到软件、从服务到内容，整个本地部署服务都可以靠自己的想法来做启用、调整、升级、关停。这是本地部署服务最积极的意义。虽然看起来涉及到的概念很多，但是整个生态已经越来越成熟，非技术用户上手也越来越简单。

本地部署还能够补充公共服务的短板。网盘提供的容量和速度不够用，我就自己搭一个够用的。同时也不需要放弃公共服务带来的便利。

在人人都可以买上一台 NAS 的今天，本地部署的最大门槛——硬件，它的成本已经大大降低了。而软件方面，NAS 厂商都在提供大量自带的本地部署服务，万一满足不了你，我们还可以通过 Docker，把第三方的服务部署到本地。

因此，尽管对于普通人而言仍需一些软件知识才能更好地完成部署工作，但“本地部署”服务已经不再像以往那样高高在上，只适合给企业使用了。甚至将个人电脑作为本地服务部署的平台也是完全可行的。对于我们平台的读者来说，应该没什么难度。

## 什么情况下需要本地部署？

“本地部署服务”是一类服务的统称，就像软件分类里的“本地工具”一样宽泛。具体服务之间的差异千差万别，很难给出一个绝对的标准，来判断是否需要本地部署一个服务。

以我自己的经验来说，可以参考这几条来做判断什么情况下需要本地部署。

- 了解服务的实用性，确定你需要这项服务。

- 了解服务的特点和功能，不是所有服务都适合本地部署。

- 了解服务的部署难度和时间成本后，再做决定。

我来依次解释一下。

### 1\. 了解其实用性

如果我想部署一个本地服务，通常不是出于“折腾”这种无目的或单纯提升技术能力的角度去做的，更多是考虑到其实用性。

可以说，本地部署是为了“让体验变得更好”。比如我希望管理我的一些照片视频素材，我就会自己搭建一个 Plex 或者 Emby 这样的影音媒体库服务。搭建完成后体验获得了极大提升，这就是实用性。

从“提高体验”这个出发点出发，我会首先尝试在线版服务。拿“看板服务”来说，市面上已经有大量可选的在线版“看板服务”了，那我就会先试试这些在线版服务，如果已经能满足自己 90% 的需求了，也许我就会直接使用这些公共的看板服务，而不是选择自己搭一个。

因为像看板服务通常需要和同伴一起使用，如果本地部署后，同伴访问起来更困难了，那么自己搭一个这样的本地服务就不那么实用了。一个没人用的服务，往往很快就会荒废掉。

### 2\. 了解其功能和特点

好的本地服务能提供比公共服务更好的体验。如果不确定，那就需要预先了解这项本地服务的功能和特点。例如 Plex 这个媒体库本地服务，它能带来的 4K 高清、本地视频、无订阅费用这样的体验，也许是任何公共的流媒体服务都提供不了的。那它就非常值得部署在本地。

当然也有一些普通的本地服务由于缺乏开发资源，或者公有云提供了更具优势的服务。这时本地服务就不如公共服务了。比如自己部署一个 RSS 抓取服务，也许就比不上 Inoreader。Inoreader 作为公共 RSS 服务，它的手机端 App 和网页端功能都非常完善。本地服务缺乏 App 的情况下，就享受不了 Inoreader App 提供的全文翻译、一键进入原网页、对外分享订阅 XML 等特色功能了。

关于这一点，我会在部署前，先试用一下这些服务提供的在线 Demo，甚至 NAS 本身的系统都有 Demo：

? 群晖 DSM 系统在线 Demo

? 威联通 QNAP 系统在线 Demo

? NextCloud 在线 Demo

? Git 服务 Gogs\.io 在线 Demo

即便没有 Demo，也应该上它的官网多了解一些功能和特点。不要看到一篇推荐文章就头脑一热去安装，装完又发现根本不适合自己，白白付出了时间。

### 3\. 了解其部署难度和时间成本

本地部署服务与本地软件的安装还是有不少区别。越复杂、越偏商用的服务，部署难度和时间成本也越高。

本地软件的目标是尽可能让用户简单安装，一直点下一步就可以完成安装，尽量减少用户的安装成本。

本地部署服务的目标是保证突发情况、避免宕机。安装流程的简便程度对开发者来说是次要的。安装期间有时还要配置数据库之类的参数。不熟悉的时候很容易出现各种报错，挫败感很强。

所以当你决定要部署一个本地服务之间，建议充分看看他们的文档，网上搜索一下有没有人在相同的环境下部署这个服务，能剩下很多时间，毕竟安装一次要花不少时间了解相关知识。

## 试试最简单的本地部署

也许你对本地部署还没有一个明确的概念，这里就介绍一个微缩版的本地部署教程。

我打包了一个可以在本地独立运行的 Markdown 编辑器：Editor\.md 。

这个小工具可以很轻松地部署在自己的电脑上，当成本地工具来使用。也可以将其放在 NAS 上作为云端服务运行。

### 安装方法

- 第一步：下载源代码到本地。? 下载地址

- 第二步：解压缩，并打开其中的 index\.html 文件。

- 第三步：什么？哪有第三步，已经安装完了。

尝试一下，你会发现其实本地部署一点也不难。像这种简单的服务，不需要你有任何专业知识就可以完成部署。

### 如果想部署到 NAS 上

那么为什么要把它部署到 NAS 上呢？因为这样以来，你就可以同时让多人使用。能够同时让多人使用，这正是“服务端软件”和“客户端软件”之间最大的区别。

这种级别的轻量服务不需要数据库、也不需要后端服务。因此想部署在 NAS 上的话，也是非常简单的。

- 第一步：将压缩包需要放进网页服务器目录下（比如群晖是 /web ），将文件夹命名为 editor。

- 第二步：访问 NAS 的 IP 地址，例如 http\://192\.168\.1\.188/editor

- 可选步骤：把这个服务部署在了 NAS 上之后，如果你想再开放到外网使用也是可以的，只不过需要你再多了解一些网络相关知识，这一点不会特别容易。但内网使用已经足够你一个人用了。

完成上面这些步骤，就可以在任意一台电脑上用浏览器打开你部署好的本地服务。

## 关于本地部署的门槛

本地部署就像上面这样，部署的难度取决于需要的服务，服务依赖的东西越少，需要做的步骤就越少。反之，服务越是重度越是无所不包，你需要配置的步骤就越多。这就带来一个问题，如果我从 0 开始学习本地部署有什么样的门槛？

### 硬件门槛

本地部署的最大门槛，是硬件。日所当然的，需要一台合适的机器来运行这些服务。

不同于本地安装的“客户端软件”，需要做本地部署的服务通常被称为“服务端软件”。这就意味着应该有一台 7 \* 24 小时开机的设备来提供这样的服务。

这个硬件可以是以下选项中的任意一个：

- 任意品牌的 NAS

- 个人 PC

- 租用云服务器

NAS 应该是目前个人玩家上手的最佳途径，因为它硬件完全自主可控、容量足够大、不产生长期订阅费用。自家网络下还能有更好的内网体验。

个人 PC 则可以作为初期尝鲜进行部署，Docker 目前也提供 Windows 和 macOS 版本，在图形化界面下部署和运维并不复杂。不过 PC 由于并不 24 小时开机，Windows 或 macOS 环境在部署方面也有一定的阻碍，长期使用不够稳定。

租用云服务器，合用作小型团队使用。现在各大云服务商，最低配服务器的最便宜套餐，活动价已经低至 120 元。来跑一些小型网页服务绰绰有余。适合家里环境不适合放 NAS 的玩家。

除了机器，硬件门槛还包括网络。国内运营商封了家用的 80、443 端口，但其他端口并不受影响。这带来的影响是打电话向运营商申请、访问服务时需要带上端口号。也是有办法解决的，这一点在《家用 NAS 入门指南》 付费教程中有详细介绍，以后可以再展开讲讲。

### 软件门槛

如果你购买的是群晖、威联通这些厂商的 NAS，这些机器的系统是内置了很多本地服务的，像家用场景下常用的 “文件管理”、“照片管理”、“影音管理” 等，都可以用原厂自带的服务，不需要额外折腾。

上面介绍的 Markdown 编辑器是最简单的本地部署服务，它本质上是一个静态网页，因此无需考虑后端网页服务器、数据库之类的问题，部署起来也非常容易。

目前做的比较好的本地部署服务，可能还会提供开箱即用的安装包，适合你在任何位置进行部署，比如 Plex 这种影音服务，原生安装时也许需要依赖不少东西，但如果你在群晖的 NAS 上安装，就可以直接用它提供的 \.spk 格式的安装包进行安装，不再需要考虑太多门槛。

现在最简便的方式是采用 Docker 方式部署，对系统环境的影响最小，时间成本也最低。大多数面向个人的服务都都会提供 Docker 这种通用又简便的的安装方式。

TIP\: 关于 Docker

Docker 可以简单理解为一个小型的虚拟机，它包含了运行服务端所有必要的元素。Docker 的出现解决了很多部署方面的问题，只要你学会了 Docker 部署的通用方法，就基本不需要考虑部署期间的环境差异、技术细节了。

即便是比较复杂的服务，也会提供比较完整的部署文档，足够解决各种各样的麻烦。

## 小结

本地部署服务，这是一个很大的话题，我想通过这篇文章来阐述我对本地部署服务的看法。未来我会继续带来更多值得本地部署服务的看法、使用技巧和安装方法。

---

[前往标准阅读页](https://utgd.net/article/8749?audience=web)
