
今天把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.conf
和enable-php7.1.conf
、enable-php5.6.conf
等,而没有enable-php-pathinfo.conf
的多版本(enable-php7.1-pathinfo.conf
和enable-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;