教程

Nextcloud迁移采坑

jxtxzzw · 8月1日 · 2018年 · · · 152次已读

今天把Nextcloud从一台服务器迁移到了另一台服务器

花了整整一个下午的时间,踩了不少坑,下面记录一下踩过的坑,以便自己或者其他有需要的人再遇到这些坑的时候能跳过去

因为不是教程向,所以不会说的太仔细

多版本PHP共存

因为Nextcloud13.0.4需要PHP5.6以上的环境

然而我的博客这里只有PHP5.4,由于某些原因我必须保持5.4的版本不能升级 我的博客已升级到PHP5.6,且NextCloud已弃用,用Seafile代替(Seafile也不好用,换成了CloudReve),PHP共存5.4、5.6、7.1

所以就涉及到了PHP多版本共存的问题

正好,我也一直有需求想要PHP5和7共存,趁着这个机会研究一下

其实用LNMP就非常简单了,直接进入LNMP的目录,然后 ./install.sh mphp就可以进入Multi-PHP的安装界面

然后根据提示,输入对应的信息,耐心等待编译和安装即可

安装完成以后,在添加vhost的时候就会提示你,已发现多版本的PHP,你是要用默认的,还是指定版本

数据库导出

非PHPMyAdmin环境下怎么导出数据库?

mysqldump -uroot -p dbname > dbname.sql

如果是只需要导出表结构而不包含数据,可以加上参数 -d

Nextcloud出现404错误

这是因为PHP默认不支持带路径的情况

解决方法很简单

  • LNMP下nginx的配置文件nginx.conf中的include enable-php.conf修改为include enable-php-pathinfo.conf
  • 把PHP配置文件php.ini中的cgi.fix_pathinfo=0修改为cgi.fix_pathinfo=1

需要注意的是,如果是在多PHP环境下,首先要找到自己使用的那个版本的PHP的配置文件,修改那里面的cgi.fix_pathinfo=1

另外如果是多版本PHP,可能只有默认环境的enable-php.conf被配置了多版本,即enable-php.confenable-php7.1.confenable-php5.6.conf等,而没有enable-php-pathinfo.conf的多版本(enable-php7.1-pathinfo.confenable-php-pathinfo7.1.conf都不存在)

这种情况下只能把enable-php-pathinfo.conf的信息手动添加到vhost的配置中了

vhost的配置中,或者是对应虚拟主机的配置中,用以下字段替换include enable-php.conf

如果是多版本环境,那就是用以下字段替换include enable-php.conf

location ~ [^/]\.php(/|$)
{
    fastcgi_pass  unix:/tmp/php-cgi7.1.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
    include pathinfo.conf;
}

对于多版本环境,注意修改php-cgi7.1.sock为需要的版本

.user.ini权限不足

即便是root也无法修改

那就需要 chattr -i ./.user.ini
之后用 chown chmod 修改权限

迁移太慢

文件太多、太小,所以最好打包以后传输,到新服务器上以后解压

直接用 tar 就可以了

如果打包的时候带了最外层的目录,解压的时候又想直接解压到虚拟主机的目录, --strip-components 1 ,最后一个参数是一个整数,可以修改为2表示跳过2层目录以此类推

解压以后可能是996的用户组,同样需要修改用户组

更多

更多的修改,比如HTTP跳HTTPS等就不赘述了

安全性的转发,例如禁止访问data目录,可以做转发,也可以直接给403

下面是一种参考的配置方法

location / {
    rewrite ^ /index.php$uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
    deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
    deny all;
}
location = /.well-known/carddav {
    return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
    return 301 $scheme://$host/remote.php/dav;
}
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;
# Disable gzip to avoid the removal of the ETag header
gzip off;

评论

根据相关法律法规,评论系统暂不开放