如我们所知,现在仍然可以将Nextcloud和ownCloud看作一个东西,至少核心功能是相差无几的。这也使你可以将ownCloud更换为Nextcloud而不必操心兼容性。本文提供了两种迁移ownCloud至Nextcloud的方法。

法一:使用迁移脚本

这是比较简单省力的方法,Nextcloud提供了用于迁移的各项脚本。这个脚本支持ownCloud 8.2~10.0版本。

迁移之前首先要明确一点:你的ownCloud装在了哪里?

这是个很简单的问题,但是仍然有必要确定清楚,一般的,ownCloud会放在
/var/www/html

里。也许它装在子目录(不推荐),比如
/var/www/html/owncloud

,当然还可以是其他目录,比如
/cloudserver/owncloud

。在ownCloud的Docker镜像中,
ownCloud被安装在/var/www/html

确定这点之后,进入安装目录:
cd /安/装/目/录

下载

下载Nextcloud提供的迁移工具:
wget https://download.nextcloud.com/server/installer/migrator/index.php

因为在安装目录中已经存在一个index.php了,所以下载的脚本会被自动重命名为index.php.1。接下来将下载好的文件重命名为index.php并放到
updater

文件夹中:
mv index.php.1 updater/index.php

完成之后设置权限(
www-data

是HTTP服务器的用户和组):
chmod 750 updater/index.php && chown www-data:www-data updater/index.php

在浏览器中登录ownCloud,然后访问刚才下载的脚本,例如:
https://your.owncloudserver.com/updater/index.php

确保你的ownCloud版本小于10.0.2,不然会出现Could not determine migration path to Nextcloud.的错误。这个BUG在未来可能会被修复

点击“Start update”开始迁移:

然后创建备份、下载Nextcloud(时间可能会比较长)。

对于ownCloud9.1.6版本,在解压时可能会出现一个错误:

这个错误挺尴尬的。解决方法是将ownCloud的版本手动设置为9.1.5。编辑config/config.php
vim config/config.php

'version' => '9.1.6.2',
改为
'version' => '9.1.5.2',

保存退出,刷新浏览器页面。

因为ownCloud9.1.5和9.1.6版本稍有不同,所以这不是一个值得推荐的方法。更好的方法可以参考后文中有关手动迁移的内容。

选择
No(for usage of the web based updater)

,关闭维护模式。

在打开的页面中点击“开始更新”:

稍后,页面会自动跳转,你可以看到ownCloud已经被换成Nextcloud,所有的数据和文件都已经完成自动迁移。

个别图标仍是ownCloud的样式,清除浏览器缓存即可。

法二:手动迁移

相比之下,手动迁移更加灵活,步骤类似手动升级ownCloud。

1.启用维护模式

用OCC命令行工具启用维护模式:
sudo -u www-data php occ maintenance:mode --on

也可以在config.php中手动设置。在config/config.php里添加这样一行:
'maintenance' => true,

访问ownCloud,看看维护模式是否已经开启是

2.备份设置和数据库

这个步骤主要是为了以防万一。

需要备份的是data目录和config目录,而里面分别存放这数据和设置。
cp config/config.php /home/config.php.bk
cp data /home/databk -rf

然后备份数据库(假设数据库名为nextcloud):
mysqldump -u root -p nextcloud>nextcloud.sql,

恢复方法:
mysql -u root -p
mysql>show database; #查看数据库是否还存在
mysql>create database nextcloud; #创建缺失的数据库
mysql>use nextcloud; #切换数据库
mysql>source nextcloud.sql; #恢复数据库

P.S.:如果你使用的是SQLite数据库,SQLite在迁移后会出现丢失的情况。你需要在迁移之前将SQLite转换成MySQL或者MariaDB:
sudo -u www-data php occ db:convert-type [options] type username hostname database
username:数据库用户名
hostname:MySQL的地址
database:数据库名

示例:
php occ db:convert-type --all-apps mysql oc_mysql_user 127.0.0.1 new_db_name

转换之后再按照上文的步骤备份数据库。

3.更换程序源码

为了方便些,先将需要保留的文件都迁移出来:
cp config/config.php /home/config.php.bk
cp data /home/databk -rf

然后清空目录:
rm * -Rf

下载Nextcloud,ownCloud与Nextcloud版本有对应关系,参照下表下载相应的版本的Nextcloud:

ownCloud 8.0.x -> ownCloud 8.1.x -> ownCloud 8.2.x -> Nextcloud 9.0.x -> Nextcloud 10.0.x
ownCloud 8.2.x -> Nextcloud 9.0.x -> Nextcloud 10.0.x
ownCloud 9.0.x -> Nextcloud 9.0.x -> Nextcloud 10.0.x
ownCloud 9.1.x -> Nextcloud 10.0.x -> Nextcloud 11.0.x
ownCloud 10.0.- -> Nextcloud 12.0.0

例如我的ownCloud版本是9.1.5,我需要下载Nextcloud 11.0.x
wget https://download.nextcloud.com/server/releases/nextcloud-11.0.2.zip

解压、迁移文件:
unzip nextcloud-11.0.2.zip -d /var/www/
mv /var/www/nextcloud/* /var/www/html/
调整文件权限
chown -R www-data:www-data /var/www/html
find /var/www/html/ -type d -exec chmod 750 {} \;
find /var/www/html/ -type f -exec chmod 640 {} \;

迁移配置文件:
cp /home/config.php.bk /var/www/html/config/config.php
cp /home/databk /var/www/html/data -rf #data目录的位置由你在ownCloud中的设置决定

关闭维护模式:

方法1:使用OCC命令
sudo -u www-data php occ maintenance:mode --off

方法2:修改config.php

将config/config.php中之前所添加的
'maintenance' => true,

改为
'maintenance' => false,

如果在迁移之前使用的是SQLite数据库,那么在迁移的时候会出现
An unhandled exception has been thrown: exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1 no such table: oc_appconfig' in /var/www/html/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:104

的错误

在浏览器中访问ownCloud,点击“开始更新”。

你也可以执行以下命令:
sudo -u www-data:www-data php occ upgrade

因为ownCloud和Nextcloud有一些插件不兼容,所以在升级为Nextcloud时,个别插件会被禁用。

点击“继续访问Nextcloud”,就可以使用Nextcloud了。

文件完整性检查错误

在迁移文件时可能会出现.htaccess文件没有迁移的情况。在校验文件完整性时就会报错。

Technical information

The following list covers which files have failed the integrity check. Please read
the previous linked documentation to learn more about the errors and how to fix
them.

Results

  • core - INVALID_HASH - .htaccess

    Raw output

    Array
    ( [core] => Array ( [INVALID_HASH] => Array ( [.htaccess] => Array ( [expected] => 11e2db30f0cf23df1b5aa1cdf329a8c88d253f86e43f9e7af1b30969eb0175030103b138e2f7ab7608c902bbb57a5d578c2c0ca09f3abf2ef83415f4bc6f6e20 [current] => 9e034bf735877287df33d6ee93465c62c23727a90ed71d1731a7448d239a44054b37c582bb85949307e161d18cfd14420383f55c4862aa8b4975181270e4a761 ) ) )
    )

我们可以看到.htaccess文件的哈希码错误。解决方法很简单,从Nextcloud安装包中拷贝一个.htaccess过去即可。
rm /var/www/html/.htaccess #删除当前的.htaccess文件
cp -r nextcloud/.htaccess /var/www/html #将安装包内的.htaccess文件拷贝到目录中

点击重新扫描:

可以看到文件完整性检查的错误信息已经消失。

原链接: https://www.orgleaf.com/2644.html
仅供学习之用

标签: none

添加新评论