使用 Docker 管理自托管 Nextcloud 实例的 10 个易于遵循的技巧

下一云 无需介绍。 它是用于自托管协作套件的最受欢迎的开源软件,可让您访问文档协作、文件托管、项目管理板和聊天服务。

我们一直在使用 Nextcloud 来管理我们在 Linux Handbook 和 It’s FOSS 上的团队活动。 我们使用 Docker 容器自托管 Nextcloud 实例。 这种自我托管的经历教会了我们几个重要的教训,我将与您分享。 如果您碰巧是 Nextcloud 的日常管理员,这将对您有所帮助。

我假设你使用 Docker 来部署 Nextcloud。 大多数提示都围绕着这一点,而有些是对所有类型的 Nextcloud 部署都有效的通用建议。

1. 使用 Docker 上 Nextcloud 上的 occ 命令

occ 命令源自 ownCloud,是“ownCloud Console”的缩写,主要用于维护、诊断和修复。 由于 Nextcloud 是 ownCloud 2016 代码库的一个分支, occ的设计非常相似。

对于 Nextcloud 管理员来说,了解其使用情况对于维护活动非常方便,因此 参考手册 很有帮助。

然而,在 Docker 上,关于如何使用它的具体语法却大不相同且更长:

docker exec -u www-data -it nextcloud php occ <command>

在这里,您正在使用 docker execwww-data 作为用户。 nextcloud 是 Nextcloud Docker 容器的名称,并且 php 被用来运行 occ 容器内的命令。

2. 不要在新版本发布后立即升级 Nextcloud

Nextcloud 的全新版本可能非常诱人。 但是已经多次观察到,直接匆忙升级可能会完全渲染 Nextcloud 无法使用.

我建议至少等待第一个补丁发布。 为了 example,将 20.0.6 升级到 21.0.0 可能会有风险。 不建议从 xx.0.x 直接升级到 xy.0.0。 相反,更好的方法是至少等待 xy.0.1 版本。

3. 升级 Nextcloud 时,优先考虑安全性和错误修复而不是功能

很容易对仅在新发布版本上可用的新功能感兴趣。 确保升级不会以降低性能或恶化功能为代价。 它可能与整个 Nextcloud 或特定的 Nextcloud 应用程序相关,这会严重影响您的工作效率。

4. 升级 Nextcloud 实例之前需要考虑的事项

彻底检查 官方论坛 以及 GitHub 存储库,用于在您考虑升级时获取最新问题。 不幸的是,现在人们注意到了,现在很常见的问题是 Nextcloud 界面非常缓慢。

因此,请确保您可以在克隆服务器及其解决方案上复制该场景,然后再在生产服务器上执行此操作。 如果升级会降低功能,请暂停升级。

5. 升级前始终备份数据库和 Nextcloud 卷

在主机系统级别,您永远不能在升级的 Nextcloud 上使用降级版本的相同文件。 因此,请务必在执行升级之前创建 Nextcloud 及其相应数据库卷的备份。 该方法与我在上一篇文章中为 Ghost 讨论的方法相同。

6.定期关注Nextcloud设置中的“概述”部分

始终尝试确保您在绿色圆圈中看到此勾号,标记为“所有检查均已通过”

您知道“设置”下有一个概述部分吗? 本节警告您任何安全和设置问题。

您可以通过转到仪表板的右上角并转到设置来访问它。

您会在仪表板的右上角找到它

您将在“管理”部分下看到“概述”选项。

“管理”部分位于左侧“个人”部分的正下方

在这里,您可以通过仪表板上的相关报告了解 Nextcloud 上的任何性能或安全问题。

7. 确保定期检查安全

Nextcloud服务器安全扫描

Nextcloud 提供了一个 免费的网络工具 检查 Nextcloud 服务器上的任何已知漏洞。 最好的一点是您甚至不需要在服务器上安装任何东西。 只需输入您的实例的 URL。

有时,强烈建议您扫描您的实例 URL,以了解 Nextcloud 部署的安全参数。

8.密切关注您使用的应用程序

众所周知,Nextcloud 上的许多应用程序使整个 Nextcloud 界面完全无法使用。 密切关注您在 Nextcloud 实例上使用的各个应用程序的论坛和 GitHub 问题。

9. 克隆您的生产服务器以测试升级

如果您使用像 Linode 这样的云服务器,您可以选择轻松克隆整个服务器。

每当您考虑升级 Nextcloud 实例时,这是将停机时间(如果有)保持在绝对最低限度的一个非常有用的步骤。 它还可以确保在您克隆服务器时定期提供 Nextcloud 实例的实时备份副本。

一旦你确保它是一个稳定的升级,在克隆的服务器上继续监控它一段时间。 当您完全确定这是一个稳定的过渡时,请通过完整的升级过程文档记录您的体验,以及您在升级后可能为解决任何问题而采取的步骤。 稍后,您可以按照自己的文档继续在生产服务器上复制相同的步骤。

10.在论坛上搜索报告的问题

Nextcloud 通常会提供逐步解决其在概览设置中报告的问题的过程。 如果这还不够,您可以在“GitHub 问题”或 Nextcloud 论坛上复制并粘贴报告的问题。

该问题很可能是已知问题,并且已提供修复程序。 无需等待下一个补丁,您可以先在克隆的服务器上测试修复并自行缓解。

奖金提示

一般来说,Nextcloud 建议在需要特定命令时切换到维护模式。

为了 example, occ db:convert-filecache-bigint 这涉及 BigInt(64 位)标识符 升级后建议。

但我更愿意在运行“系统和安全部分”中建议的任何 occ 命令之前始终切换到维护模式。

跟进 example 第 1 点中提到的命令,相应的命令将是:

docker exec -u www-data -it nextcloud php occ maintenance:mode --on

现在按照建议运行命令。 为了 example,假设您注意到此消息:

Some indices are missing in the database. Because adding indexes to large tables may take some time, they have not been added automatically. By executing "occ db: add-missing-indices", missing indexes can be added manually while the instance is running. Once the indexes have been added, queries to these tables are usually faster.

在这里,建议是运行 occ db: add-missing-indices. 但正如第 1 点所讨论的,这个建议是不够​​的; 特别是如果您使用 Docker 运行 Nextcloud。 因此这里需要的完整命令是:

docker exec -u www-data -it nextcloud php occ db: add-missing-indices

[email protected]:~$ docker exec -u www-data -it nextcloud php occ db:add-missing-indices
Check indices of the share table.
Check indices of the filecache table.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Adding calendarobject_calid_index index to the calendarobjects_props table, this can take some time...
calendarobjects_props table updated successfully.
Check indices of the schedulingobjects table.
Adding schedulobj_principuri_index index to the schedulingobjects table, this can take some time...
schedulingobjects table updated successfully.

现在关闭维护模式:

docker exec -u www-data -it nextcloud php occ maintenance:mode --off

深思熟虑

以上10点都是在现场制作系统上体验一年多的结果。 在这段时间里,下面的三角形一直是我保持微妙平衡的非常重要的指南 安全性、可用性和功能性 并将其与 Nextcloud 的运作方式相关联。

这适用于每个部署系统,而不仅仅是 Nextcloud。 毫无疑问,这些是任何基于 DevOps 的部署的基础支柱。

红色标记表示您希望在哪里保持三者之间的平衡

谈到 Nextcloud,您必须始终牢记 Nextcloud 和 Nextcloud 集线器. Nextcloud 本身主要是一个文件托管服务,而 Nextcloud Hub 是一个内容协作平台(Nextcloud 的一个子集)。

您如何将此场景与功能和易用性联系起来? 在上面的讨论中,我已经提到 在线协作,它是 Nextcloud Hub 的一部分,可以清楚地与易用性相关联。

如果整个 Nextcloud Dashboard 因为新发布的 Collabora Online 版本而停滞不前,它的 功能性 完全失控。 Collabora Online 与 Nextcloud Hub 捆绑在一起,牢记 便于使用 在线管理文档。 但是,如果这是以大幅减慢整个 GUI 并使其完全无法使用为代价的,那么它就完全违背了它的主要目的! 因此,始终非常有必要注意保持功能和可用性之间的这种微妙平衡(当然要谨慎对待安全性)。

每个应用程序都是不同的,因此您如何校准这 3 个指标中的每一个都非常重要,具体取决于具体情况。

我真的希望这些指示和想法可以帮助您日常管理 Nextcloud 实例,尤其是如果您是 admin 谁使用 Docker 管理自托管的 Nextcloud 服务。 如果您有任何意见、建议或要分享的新观点,请在下面的部分中进行。