原文链接:ECHK1NG’s 学习之路
近些年来各路网盘纷纷退市,只有为数不多的网盘还在死死坚持,例如百度网盘。
NextCloud逐渐进入了人们的视野。
这几天搭建网盘的过程,遇到了许多问题,最后总算是解决掉,结束折磨辽,为了方便大家能够顺利完成自己的网盘搭建,所以我写下了这篇博客。
阅读完本文你可以自己亲手搭建一个256T的个人云盘,如果有不懂的地方,可以通过网站联系方式联系我。
- Nextcloud是德国Nextcloud公司的一套开源的自托管文件同步和共享的通信应用平台。而NextCloud的创始人是ownCloud联合创始人Frank Karlitschek,16年他离开了原公司,成立了NextCloud。
- 可以看出NextCloud与ownCloud两者十分相像。
- 两者最大的区别涉及用户界面和企业许可协议。
- NextCloud有更强大的社区支持,且开源;为所有用户提供企业级安全。
安装
NextCloud需要在Nginx(或Apache),MySQL,PHP环境下运行,建议使用Linux系统
一、选购服务器
建议选购香港服务器,离大陆近,而且也不需要备案,阿里云香港轻量型服务器在我看来最为合适,因为轻量型服务器外网带宽大于同价位ESC(轻量型服务器每个月有流量限制,但很充足),实测网盘搭建好后下载速度在6MB/s以上甚至更快。
选购这一部分就不多加赘述了,十分简单,注意选择Linux系统(Centos,ubuntu)就行了
二、安装宝塔面板(对后续安装配置很方便)
Centos安装指令
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
ubuntu安装指令
curl -sSO http://download.bt.cn/install/install_panel.sh && bash install_panel.sh
安装完成后,会显示外网登录地址,账号密码。
接着不要急着登录宝塔面板,需要先在服务器控制台的防火墙页面打开8888端口,否则无法打开宝塔面板。
进入后台,安装LNMP环境(或者LAMP环境),本文使用的是LNMP环境。
三、挂载阿里云OSS
为什么要在nextcloud安装之前挂载OSS?
- 如果在nextcloud安装完成后再移动数据库非常麻烦,这也是我踩的坑之一。
- 用过nextcloud的人可能会说nextcloud有一个内置应用可以添加外部存储,叫External storage support,可以在拥有服务器存储的条件下,直接添加一个外部存储空间。但是,这也是我踩的一个坑。当你的云盘有多个用户的时候,用这个添加的外部存储,所有人上传的文件其他人都能看到,相当于你将阿里云OSS变成了一个256T的共享文件夹,也不能对用户设置配额(除非你自己一个人用)。
- 提前挂载阿里云OSS,再nextcloud安装时就能直接选择OSS作为数据盘,非常方便。
创建bucket
在阿里云OSS管理控制台页面,点击创建Bucket
最好选择与你服务器相同地域的Bucket,这样服务器到OSS的数据传输只需要使用内网,内网流量完全免费,而外网流量需要收费,0:00-8:00为0.25元/GB,8:00-24:00为0.5元/GB
具体配置可参考下图
四、创建AccessKey
云账号 AccessKey 是您访问阿里云 API 的密钥,具有账户的完全权限,请您务必妥善保管!不要以任何方式公开 AccessKey 到外部渠道(例如 Github),避免被他人利用造成 安全威胁。强烈建议您遵循 阿里云安全最佳实践,使用 RAM 用户(而不是云账号)的 AccessKey 进行 API 调用。
一定要妥善保存自己AccessKey
五、将OSS挂载到服务器
这一步我踩的坑最多,下面的内容都是我本人总结出来的,如果有问题大家可以参照网络上的教程多多测试或者向我提问。
1.获取Bucket 域名
点击刚刚创建的Bucket,按下图所示
2.在宝塔控制面板新建网站,在网站根目录创建cloud/ossfs
3.安装ossfs
需要先选取所需插件的版本
使用命令下载即可
GITHUB地址
以下载CentOS 7.0 (x64)版本为例:
wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm
安装命令
Ubuntu系统
以Ubuntu 16.04 (x64)版本为例,安装命令如下:
sudo apt-get update
sudo apt-get install gdebi-core
sudo gdebi ossfs_1.80.6_ubuntu16.04_amd64.deb
CentOS系统
以CentOS 7.0(x64)版本为例,安装命令如下:
sudo yum install ossfs_1.80.6_centos7.0_x86_64.rpm
- ossfs_1.80.5_centos6.5_x86_64.rpm1.55 MB
- ossfs_1.80.5_centos7.0_x86_64.rpm1.12 MB
- ossfs_1.80.5_ubuntu14.04_amd64.deb1.18 MB
- ossfs_1.80.5_ubuntu16.04_amd64.deb1.27 MB
- Source code (zip)
- Source code (tar.gz)
然后使用SSH远程连接服务器,依次输入以下命令
对于Ubuntu系统,安装命令是:
sudo apt-get update
sudo apt-get install gdebi-core
sudo gdebi your_ossfs_package
对于CentOS6.5或更高版本,安装命令是:
sudo yum localinstall your_ossfs_package
对于CentOS 5,安装命令是:
sudo yum localinstall your_ossfs_package --nogpgcheck
这个your_ossfs_package
就是你选择的插件版本
例如我的命令为:sudo yum localinstall ossfs_1.80.5_centos7.0_x86_64.rpm
4.将自己的AccessKey保存到服务器
echo my-bucket:my-access-key-id:my-access-key-secret > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs
- my-bucket:创建的bucket的名称
5.挂载OSS
我将oss挂载到了网站根目录,所以在网站根目录下创建cloud/ossfs,当然你也可以挂载到其他盘中。
接下来是关键步骤
使用ssh连接到服务器,输入如下指令
id www
可以看出我这里的www用户id为1001
例如bucket名称为cunchu
,挂载地址为/www/wwwroot/example.com/ossfs
,bucket的Endpoint(地域节点)为oss-cn-hongkong-internal.aliyuncs.com
(因为我的服务器跟oss在一个地区,所以我直接填内网地址就可以了)
具体命令为
ossfs cunchu /www/wwwroot/example.com/ossfs -o url=oss-cn-hongkong-internal.aliyuncs.com -o nonempty -ouid=1001 -ogid=1001 -oumask=007 -o allow_other
若挂载后提示
InvalidBucketName
原因是在挂载时,错误的使用了Buket域名,而不是Endpoint(地域节点),更换一下重新执行命令即可。
解除挂载命令
不想挂载在此位置再使用
fusermount -u /挂载的目录
tips:如果不设置ouid和ogid,nextcloud将无法访问oss。
挂载完成后,在宝塔页面可以看到挂载的OSS
挂载完成后,最好将挂载命令加入到服务器启动项中,避免每次重启都需要手动挂载。
6.安装Nextcloud
在官网上下载Nextcloud安装包,上传到网站根目录,解压,通过浏览器输入你的网站域名进入安装。
在安装页面的数据目录位置填入OSS的挂载位置
若提示您的数据目录可被其他用户读取 请更改权限为 0770 以避免其他用户查看目录
请在example/config/config.php中添加以下代码(不用担心下一步会解决访问权限问题)
'check_data_directory_permissions' => false
7.安装完成后还需要通过网站配置文件设置禁止访问目录(本条仅限于将OSS挂载到根目录的用户)
在宝塔页面点击网站,点击设置,在配置文件中添加如下代码。
data是多余的(我的nextcloud存储位置不为data,所以其实我可以删掉这个。)
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|cloud)/ {
deny all;
}
代码中的“build|tests|config|lib|3rdparty|templates|data”就是禁止访问的目录,data是nextcloud默认的存储数据的位置,如果你直接将OSS作为nextcloud存储数据的位置,在上方将data更换为根目录(非下一级目录)中挂载OSS的位置,如果你最开始跟我的步骤一致,直接复制粘贴上方代码即可,无需更改。
六、大功告成
Nextcloud更多的使用技巧可能我以后会再发布,敬请期待。
七、NextCloud常见问题解决(慢慢添加)
无法删除文件,提示文件被锁定:
{"reqId":"0DijSqEkfOg2iyh9VD8J","remoteAddr":"xx.xx.xx.xx","app":"webdav","message":"Exception: {\"Message\":\"HTTP\\\/1.1 423 \\\"path\\\/file.extension\\\" is locked\",\"Exception\":\"OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Exception\\\\FileLocked\",\"Code\":0,\"Trace\":\"#0
手动禁用锁定状态:
- 将NextCloud置于维护模式:编辑
config/config.php
并更改这一行:
'maintenance' => true,
- 修改字段
oc_file_locks
::使用phpmyadmin之类的工具,或者直接连接到数据库并运行(默认的表前缀是oc_
):
DELETE FROM oc_file_locks WHERE 1
- 关闭维护模式。
- 确保您的cron作业正常运行(您的管理页面告诉您cron上次运行的时间):Https://docs.nextcloud.org/server/13/admin_manual/configuration_server/background_jobs_configuration.html
永久解决(如果经常发生)
- 你的自己的服务器::此功能使用redis。它的速度更快,到目前为止还没有出现任何问题。您可以按照文档中的内存缓存说明:Https://docs.nextcloud.org/server/13/admin_manual/configuration_server/caching_configuration.html#id4
- 共享托管(其他无法安装redis的人):您可以禁用文件锁定,编辑配置文件
config/config.php
:
'filelocking.enabled' => false,
然而,禁用不是一个好的解决方案。当几个进程试图写入文件时(特别是web界面中的在线编辑器),您可能会遇到问题。在单用户和单客户环境中,这可能不是什么问题。
NextCloud原文链接