ubuntu下搭建私人同步云盘nextcloud
虽然搭建后才发觉和自己的需求有点偏差,不过其支持WebDAV协议还是有点用处。
最初的需求是为了解决QFile移动端自动上传照片的各种不便:
- QFile移动版(包括安卓和iOS)不像群晖那样能设置自动连接,每次都要手动选择连接,所以做不到后台自动上传新拍照片。
- 即便连上后,触发自动上传的时间不定,有时要亮屏放半天才会上传,且没有手动触发检测上传的选项。
- 上传时必须保持亮屏,否则会停止。
但搭建好nextcloud后才发觉其软件定位不是备份文件,而是同步与分享。目前暂不支持单向同步,即我需要的手机照片自动上传,但不同步下载服务器的照片。后通过免费的FolderSync解决这个问题。
不过其支持WebDAV协议,故可用来给如Joplin之类的第三方程序做同步用,故仍旧保留了。
本文没用Docker或官方脚本的方式安装,因为前者对性能有损失且设置有限、不利于调试,而后者适合新装好的系统只跑nextcloud。
安装配置apache
php设置
编辑/etc/php/7.2/apache2/php.ini
。
1 | memory_limit = 1024M |
安装mysql
1 | sudo apt install mariadb-server php7.2-mysql |
输入并记好root用户的密码。注意root权限的用户是通过auth_socket
而并非密码来验证的,故通过sudo mysql -u root -p
登录时不输入密码或任意密码都能成功登录,而不是密码未设置成功。想取消auth_socket
可以看这里。
启用4字节字符支持,编辑/etc/mysql/mariadb.cnf
。
1 | [mysqld] |
重启mysql。
mysql创建nextcloud数据库
以root登录。
1 | sudo mysql -u root |
创建nextcloud用户和数据库。
1 | CREATE DATABASE nextclouddb; |
创建数据文件夹
从数据安全和硬盘空间扩展的角度强烈建议将nextcloud的数据放到别的地方,而不是默认的/var/www/html/nextcloud/data
,否则后期想做数据迁移时由于官方不支持会很麻烦。
1 | sudo mkdir /srv/hdd1/nextcloud |
安装nextcloud
下载nextcloud源码,解压并复制到网页服务器位置并修改权限为www-data
,否则会报错Internal Server Error
。
1 | sudo mkdir /var/www/example.com |
打开安装页面https://example.com/nextcloud
并输入数据库相关配置执行安装初始化。
1 | nextcloud |
如果安装正确则能进入网盘页面。
配置可信任域名。打开/var/www/example.com/nextcloud/config/config.php
文件,添加域名和内网IP。
1 | 'trusted_domains' => |
安装并启用Redis缓存提升性能(可选)
如果只是几个人轻度使用没必要用牛刀。
安装。
1 | sudo apt install php-apcu redis-server php-redis |
配置Redis。打开/etc/redis/redis.conf
。
1 | port 0 |
添加Apache用户www-data
到redis
组。
1 | sudo usermod -a -G redis www-data |
重启apache服务,开始redis服务。
1 | sudo service apache2 restart |
修改nextcloud配置文件/var/www/example.com/nextcloud/config/config.php
,添加以下内容。
1 | 'memcache.local' => '\\OC\\Memcache\\Redis', |
启用redis服务。
1 | sudo systemctl enable redis-server |
测试redis服务。
1 | sudo redis-cli -s /var/run/redis/redis-server.sock ping |
正常会打印PONG
。
重启服务器。
Debug
打开nextcloud管理员概览页面(https://example.com/nextcloud/index.php/settings/admin/overview ),确保安全与设置警告
测试全部通过。
Your web server is not properly set up to resolve “/.well-known/caldav”
由于之前并未将nextcloud装在网站根目录,故需通过rewrite进行301跳转。
启用rewrite模块。
1 | sudo a2enmod rewrite |
编辑网站根目录/var/www/example.com/.htaccess
文件。
1 | <IfModule mod_rewrite.c> |
注,如果用nginx+apache方式搭建则需把以上RewriteRule
全部注释掉,在example.com.conf
中设置301跳转。
500 Internal Server Error
先检查redis-server是否正常工作,必要时注释掉config.php
中redis的内容来查错。
这多出现于域名改变的情况,若overwrite.cli.url
等设置改过仍无法解决,可以考虑重装。
重装nextcloud
在config
文件夹下重命名config.php
并新建CAN_INSTALL
文件。
浏览器打开https://example.com/nextcloud
会进入安装向导。输入数据库相关配置。
注意这里必须新建一个和旧管理员用户名不一样的新管理员,如果输入旧管理员会报错用户已存在。完成设置后注销登录旧管理员把新建的这个删掉即可。
移除nextcloud
删掉源文件,数据文件,数据库。
1 | sudo rm -rf /var/www/example.com/nextcloud |