将ownCloud迁移至Nextcloud的两种方法

Posted by 橙叶 on Fri, Aug 25, 2017

如我们所知,现在仍然可以将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

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

点击“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',

 

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

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

选择

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:

[ssbluelist]

  • 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
[/ssbluelist]

例如我的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,
 。

[infobox]如果在迁移之前使用的是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
的错误[/infobox]

在浏览器中访问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文件拷贝到目录中

点击重新扫描:

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

 



comments powered by Disqus