如我们所知,现在仍然可以将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。
用OCC命令行工具启用维护模式:
sudo -u www-data php occ maintenance:mode --on
也可以在config.php中手动设置。在config/config.php里添加这样一行:
'maintenance' => true,
访问ownCloud,看看维护模式是否已经开启是
这个步骤主要是为了以防万一。
需要备份的是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
示例:
php occ db:convert-type --all-apps mysql oc_mysql_user 127.0.0.1 new_db_name
转换之后再按照上文的步骤备份数据库。
为了方便些,先将需要保留的文件都迁移出来:
cp config/config.php /home/config.php.bk
cp data /home/databk -rf
然后清空目录:
rm * -Rf
下载Nextcloud,ownCloud与Nextcloud版本有对应关系,参照下表下载相应的版本的Nextcloud:
[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文件拷贝到目录中
点击重新扫描:
可以看到文件完整性检查的错误信息已经消失。