ubuntu下搭建私人同步云盘nextcloud

虽然搭建后才发觉和自己的需求有点偏差,不过其支持WebDAV协议还是有点用处。

最初的动机是为了解决QFile移动端自动上传照片的各种不便:

  1. QFile移动版(包括安卓和iOS)不像群晖那样能设置自动连接,每次都要手动选择连接,所以做不到后台自动上传新拍照片。
  2. 即便连上后,触发自动上传的时间不定,有时要亮屏放半天才会上传,且没有手动触发检测上传的选项。
  3. 上传时必须保持亮屏,否则会停止。

但搭建好nextcloud后才发觉其软件定位不是备份文件,而是同步与分享。目前暂不支持单向同步,即我需要的手机照片自动上传,但不同步下载服务器的照片。后通过免费的FolderSync解决这个问题。
不过其支持WebDAV协议,故可用来给如Joplin之类的第三方程序做同步用,故仍旧保留了。
本文没用Docker官方脚本的方式安装,因为前者对性能有损失且设置有限、不利于调试,而后者适合新装好的系统只跑nextcloud。

安装配置apache

php设置

编辑/etc/php/7.2/apache2/php.ini

1
2
3
memory_limit = 1024M
post_max_size = 1024M
upload_max_filesize = 1024M

安装mysql

1
2
sudo apt install mariadb-server php7.2-mysql
sudo mysql_secure_installation

输入并记好root用户的密码。注意root权限的用户是通过auth_socket而并非密码来验证的,故通过sudo mysql -u root -p登录时不输入密码或任意密码都能成功登录,而不是密码未设置成功。想取消auth_socket可以看这里
启用4字节字符支持,编辑/etc/mysql/mariadb.cnf

1
2
3
[mysqld]
innodb_file_per_table=1
character-set-server=utf8mb4

重启mysql。

mysql创建nextcloud数据库

以root登录。

1
sudo mysql -u root

创建nextcloud用户和数据库。
1
2
3
4
5
CREATE DATABASE nextclouddb;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON nextclouddb.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
exit

创建数据文件夹

从数据安全和硬盘空间扩展的角度强烈建议将nextcloud的数据放到别的地方,而不是默认的/var/www/html/nextcloud/data,否则后期想做数据迁移时由于官方不支持会很麻烦

1
2
sudo mkdir /srv/hdd1/nextcloud
sudo chown -R www-data:www-data /srv/hdd1/nextcloud

安装nextcloud

下载nextcloud源码,解压并复制到网页服务器位置并修改权限为www-data,否则会报错Internal Server Error

1
2
3
sudo mkdir /var/www/example.com
sudo cp -r nextcloud /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com/nextcloud/

打开安装页面https://example.com/nextcloud并输入数据库相关配置执行安装初始化。
1
2
3
nextcloud
nextclouddb
localhost

如果安装正确则能进入网盘页面。
配置可信任域名。打开/var/www/example.com/nextcloud/config/config.php文件,添加域名和内网IP。
1
2
3
4
5
6
'trusted_domains' =>
array (
0 => 'localhost',
1 => 'example.com',
2 => '192.168.1.2',
),

安装并启用Redis缓存提升性能(可选)

如果只是几个人轻度使用没必要用牛刀。
安装。

1
sudo apt install php-apcu redis-server php-redis

配置Redis。打开/etc/redis/redis.conf
1
2
3
port 0
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770

添加Apache用户www-dataredis组。
1
sudo usermod -a -G redis www-data

重启apache服务,开始redis服务。
1
2
sudo service apache2 restart
sudo service redis-server start

修改nextcloud配置文件/var/www/example.com/nextcloud/config/config.php,添加以下内容。
1
2
3
4
5
6
7
8
9
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'filelocking.enabled' => 'true',
'redis' =>
array (
'host' => '/var/run/redis/redis-server.sock',
'port' => 0,
'timeout' => 0.0,
),

启用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
2
3
4
5
6
7
8
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
RewriteRule ^\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
RewriteRule ^\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav/ [R=301,L]
</IfModule>

注,如果用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
2
3
sudo rm -rf /var/www/example.com/nextcloud
sudo rm -rf /srv/hdd1/nextcloud
DROP DATABASE nextclouddb;

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 安装配置apache
  2. 2. php设置
  3. 3. 安装mysql
  4. 4. mysql创建nextcloud数据库
  5. 5. 创建数据文件夹
  6. 6. 安装nextcloud
  7. 7. 安装并启用Redis缓存提升性能(可选)
  8. 8. Debug
    1. 8.1. Your web server is not properly set up to resolve “/.well-known/caldav”
    2. 8.2. 500 Internal Server Error
    3. 8.3. 重装nextcloud
  9. 9. 移除nextcloud
,