如何将 Nextcloud Docker 迁移到新机器

How to migrate Nextcloud Docker to a new machine

我在使用 docker-compose 安装的服务器上安装了 Nextcloud。此安装使用 Nextcloud docker 映像和单独的 MySQL (8.0) docker 映像进行数据库访问。数据和配置文件放置在 docker-compose.yml 文件中指定的外部卷中。

我最近组装了一台新机器,它有更多的内存、更快的 CPU 和(最重要的)更多的磁盘 space。我想将我当前的安装迁移到新机器上。

实际安装非常简单:我只需将我的 docker-compose.yml 文件复制到新机器并 运行 它即可。问题在于我拥有的数据和(有点独特的)配置。我想把它们放到新机器上。

迁移 dockerized Nextcloud 安装的问题与迁移裸机或 VM 安装相关的问题不同。一方面,没有明确的方法将安装置于维护模式,您正在使用两个容器(实际上,这就像协调两台不同的机器)并且描述的用于迁移裸机安装的许多步骤都行不通可靠地用于容器化安装(是的,可以进入容器以 运行 一些命令。必需的,但我这样做的尝试导致迁移失败)。

进行 Google 搜索后,我看到了很多关于如何将裸机 Nextcloud 安装从一台机器迁移到另一台机器以及如何将裸机(和虚拟机)安装迁移到Docker。这些过程非常复杂,涉及将安装置于维护模式并执行各种备份和恢复。不幸的是,虽然我看到一些人询问如何迁移 dockerized Nextcloud 安装,但没有关于如何执行此操作的明确说明(至少 none 确实有效!)。甚至 Nextcloud 网站也不讨论这个!

有人成功地将 docker 化的 Nextcloud 安装从一台机器迁移到另一台机器吗?如果有,具体是怎么做到的?

我自己只能做到这一点,尽管我正在将我的 nextcloud 安装从我的主要家庭服务器迁移到一个较慢的 NAS-ish 盒子,我在搬家后一起抢救。

我 运行 遇到的主要问题是 file/dir 所有权从一台机器转移到另一台机器。次要确保在 config.php

中正确设置受信任域

我确信在机器之间使用 rsync 来 copy/move 文件并确保您保持所有权完整会更好,但我使用了 scp 并手动更改了所有权。您的 nextcloud_data 容器需要 www-data 用户拥有您映射到 /var/www/html 的目录的所有权,而 nextcloud_db(我在这里使用 mariadb,YMMV)容器需要 systemd-coredump 用户拥有你映射到的目录的所有权 /var/lib/mysql (或者你的数据库后端等价物是什么)

然后确保切换 trusted_domains 和 trusted_proxies,使用 docker-compose 环境变量,或直接编辑 /var/www/html/config/config.php

根据 Raphael PICCOLO 的评论,我为原始安装使用的卷中的所有内容创建了一个 tarball,在我的目标机器上创建了一个新安装,然后在新机器上提取了 tarball。但是,如果您这样做,还必须采取其他步骤:您必须更改 tarball 中所有文件的所有权,以便它们属于新 Nextcloud 安装所使用的用户 ID。否则,新的 Nextcloud 应用程序将无法访问任何资源,甚至尝试登录都会在浏览器上出现 500 次失败。

MySQL 容器还使用了一个唯一 ID,因此所有与数据库相关的数据文件也必须进行所有权更改。

获取正确的用户 ID 非常简单:当您首次安装新的 Nextcloud 和 MySQL 数据库时,使用您在原始 docker-compose.yml 文件中设置的相同卷。然后,在解压缩数据之前,查看数据库文件夹和 Nextcloud 文件夹中文件的用户 ID。然后,当您将 tarball 的内容放入新安装时,使用 chown -R 更改所有权。

请注意,我正在将我的安装从 Centos 7 机器 运行 Docker 与传统 root 用户转移到 Centos 8 机器 运行 Docker 在一个“非 root 用户”模式。我不知道权限会如何影响其他机器或模式。

不过,一旦权限设置正确,一切正常。