前提
一台装了nexcloud-snap的服务器A;一台有足够空间装下前者保存的所有文档的服务器B。
导出备份
导出数据库
在A上执行
1
nextcloud.mysqldump > my-old-nextcloud.sql
导出数据库。然后scp把这个文件发到B。
备份文件
nextcloud-snap的文件在
1
/var/snap/nextcloud/common/nextcloud/data/
里,所以用scp把这个文件夹传输到B。scp的语法:
1
scp -r local_folder remote_username@remote_ip:remote_folder
装nextcloud
环境准备
重装A的系统,用lnmp一键包装lamp,数据库用MariaDB,PHP选7以上。然后lnmp vhost add添加原来的域名,但是不新建数据库。
接下来创建nextcloud用的数据库:
1
2
3
4
5
6
mysql -u root -p
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL ON nextcloud.* TO 'nextclouduser'@'localhost' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
然后从B把数据库备份scp回来,并且导入:
1
mysql -u root -p nextcloud < my-old-nextcloud.sql
部署nextcloud
nextcloud的最新release在这里看,一般来说下载链接应该是latest.zip。喜欢在哪个目录保存这个包没所谓,wget下来:
1
wget https://download.nextcloud.com/server/releases/latest.zip
unzip之后把nextcloud目录里的所有东西搬到_/home/wwwroot/域名_里面,记得把隐藏文件比如.htaccess带上。然后chown改一下wwwroot的所有者信息。
恢复备份
从B那里把备份的文件夹scp到网站域名下面,和nextcloud其他的文件同级,然后chown恢复一下所有者信息。
然后就可以输入网站域名打开了。一上来可能会让你新建一个管理员帐号,同时下面可以选用什么数据库,记得选MariaDB,输入对应的帐号密码和nextcloud数据库名字。管理员帐号的名字不能和迁移之前的那个一样。
因为之前导入了数据库的备份,所以可能会什么都输好了但是爆炸了,这样的话就要重新设置一次nextclouduser的密码了:
1
2
3
4
5
6
select host,user,password from mysql.user where user='nextclouduser'
set password for 'nextclouduser'@'localhost'=password('密码');
flush privileges;
exit;
就没问题了。
后遗症
- 之前登录的所有客户端都要重新登录
- nextcloud-snap上的app数据不会丢失但是需要从官方库重新安装一次
- iOS、Android的客户端会疯狂尝试登录,然后被服务器屏蔽IP 30秒,所以先退出客户端的登录,然后等半分钟再重新授权就好了。