soarli

NextCloud+OSS搭建私有云
前言最近发现每月为iCloud氪金6¥的50GB方案已经捉襟见肘了,结合实际需求觉得没必要升级每月21¥的方案(使...
扫描右侧二维码阅读全文
06
2022/02

NextCloud+OSS搭建私有云

前言

最近发现每月为iCloud氪金6¥50GB方案已经捉襟见肘了,结合实际需求觉得没必要升级每月21¥的方案(使用范围局限,空间方案不灵活,最主要的是没钱),于是决定把归档类的图像、音频等数据存到其他位置。

研考之前恰好留意到NextCloud这一泰斗级解决方案并经过上个月在虚拟机中的安装体验,决定将其与OSS结合起来并应用到公网以满足“多设备文件同步”、“归档存储旧照片”、“Notability笔记文件备份”等诸多需求(之前在iOS上单一个传大文件传到电脑的需求就整的我够呛,懂的都懂)。

关于Nextcloud的简介如下:

Nextcloud是德国Nextcloud公司的一套开源的自托管文件同步和共享的通信应用平台。而NextCloud的创始人是ownCloud联合创始人Frank Karlitschek,16年他离开了原公司,成立了NextCloud

过程

1.安装LNMP/LAMP环境

安装宝塔面板(非必须)

wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

2.挂载阿里云OSS

为什么要在nextcloud安装之前挂载OSS

  • 如果在nextcloud安装完成后再移动数据库非常麻烦
  • 用过nextcloud的人可能会说nextcloud有一个内置应用可以添加外部存储,叫External storage support,可以在拥有服务器存储的条件下,直接添加一个外部存储空间。但是,这也是我踩的一个坑。当你的云盘有多个用户的时候,用这个添加的外部存储,所有人上传的文件其他人都能看到,相当于你将阿里云OSS变成了一个256T的共享文件夹,也不能对用户设置配额(除非你自己一个人用)。
  • 提前挂载阿里云OSS,再nextcloud安装时就能直接选择OSS作为数据盘,非常方便。

在阿里云 OSS 管理控制台页面,点击创建 Bucket:

image-20220206022536699

最好选择与服务器相同地域的Bucket,这样服务器到OSS的数据传输只需要使用内网,内网流量完全免费,而外网流量需要收费,0:00-8:000.25元/GB8:00-24:000.5元/GB

具体选项可以参考下图:

image-20220206022831073

3.创建AccessKey

image-20220206023218997

云账号 AccessKey 是您访问阿里云 API 的密钥,具有账户的完全权限,请您务必妥善保管!不要以任何方式公开 AccessKey 到外部渠道(例如 Github),避免被他人利用造成 安全威胁。强烈建议您遵循 阿里云安全最佳实践,使用 RAM 用户(而不是云账号)的 AccessKey 进行 API 调用。

一定要妥善保存自己的AccessKey

4.OSS挂载到服务器

获取Bucket 域名:

点击刚刚创建的 Bucket,按下图所示

image-20220206024105092

在宝塔控制面板新建网站,在网站根目录创建cloud/ossfs

下载对应的安装包并上传到/www/wwwroot/

Linux发行版下载
Ubuntu 18.04 (x64)ossfs_1.80.6_ubuntu18.04_amd64.de
Ubuntu 16.04 (x64)ossfs_1.80.6_ubuntu16.04_amd64.deb
Ubuntu 14.04 (x64)ossfs_1.80.6_ubuntu14.04_amd64.deb
CentOS 7.0 (x64)ossfs_1.80.6_centos7.0_x86_64.rpm
CentOS 6.5 (x64)ossfs_1.80.6_centos6.5_x86_64.rpm

以上列表中提供了常用系统的安装包,若你的系统版本不在列表中,请通过源码编译。源码地址请参见GitHub ossfs

安装ossfs

使用 SSH 远程连接服务器,依次输入以下命令:

对于 Ubuntu 系统,安装命令是:

sudo apt-get update
sudo apt-get install gdebi-core
cd /www/wwwroot/
sudo gdebi your_ossfs_package

对于 CentOS6.5 或更高版本,安装命令是:

sudo yum localinstall your_ossfs_package

对于 CentOS 5,安装命令是:

sudo yum localinstall your_ossfs_package --nogpgcheck

将自己的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

image-20220206032916590

我这里的www用户id为1001,所以接下来我的命令如下。

ossfs bucket名 /www/wwwroot/xxx.xxx.top/cloud/ossfs -o url=oss-cn-hangzhou-internal.aliyuncs.com -o nonempty  -ouid=1001 -ogid=1001  -oumask=007 -o allow_other

6.查看是否挂载成功

方法一:

df -lh

image-20220206034229740

方法二(宝塔):

image-20220206034318798

7.安装Nextcloud

在官网下载 Nextcloud 安装包,上传到网站根目录,解压,通过浏览器输入你的网站域名进入安装。

在安装页面的数据目录位置填入 OSS 的挂载位置

若提示您的数据目录可被其他用户读取 请更改权限为 0770 以避免其他用户查看目录

请在 example/config/config.php 中添加以下代码(不用担心下一步会解决访问权限问题)

'check_data_directory_permissions' => false

8.文件安全

安装完成后还需要通过网站配置文件设置禁止访问目录(本条仅限于将OSS挂载到根目录的用户)

在宝塔页面点击网站,点击设置,在配置文件中添加如下代码。

data是多余的(我的nextcloud存储位置不为data,所以其实我可以删掉这个。)

location ~ ^/(?:build|tests|config|lib|3rdparty|templates|cloud)/ {
    deny all;
}

代码中的 “build|tests|config|lib|3rdparty|templates|data” 就是禁止访问的目录,datanextcloud 默认的存储数据的位置,如果你直接将 OSS 作为 nextcloud 存储数据的位置,在上方将 data 更换为根目录(非下一级目录)中挂载 OSS 的位置,如果你最开始跟我的步骤一致,直接复制粘贴上方代码即可,无需更改。

9.上传限制

NginxPHP默认情况下对上传文件相关限制较为严格,若想上传大文件,可参考我上一篇关于Nextcloud的记录。

10.设置OSS开机自动挂载

  • /etc/init.d/目录下建立文件ossfs,把以下内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。

    #! /bin/bash
    #
    # ossfs Automount Aliyun OSS Bucket in the specified direcotry.
    #
    # chkconfig: 2345 90 10
    # description: Activates/Deactivates ossfs configured to start at boot time.
    ossfs your_bucket your_mountpoint -ourl=your_url -oallow_other
  • 执行命令:
chmod a+x /etc/init.d/ossfs
chkconfig ossfs on  // CentOS和低版本的Ubuntu

若第二条命令提示“chkconfig: command not found”,则需要使用sysv-rc-conf

sudo apt-get update
sudo apt-get install sysv-rc-conf
sudo sysv-rc-conf ossfs on

若提示Unable to locate package sysv-rc-conf,则说明软件源中没有sysv-rc-conf

打开sources.list文件:

sudo vi /etc/apt/sources.list

sources.list文件最后一行中添加如下一行文本:

deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse

更新apt-get并重新安装sysv-rc-conf

sudo apt-get install sysv-rc-conf

可查看服务情况:

sudo sysv-rc-conf

添加到启动项:

sudo sysv-rc-conf ossfs on
  • 重启服务器测试oss是否开机挂载,使用以下命令查看是否挂载成功,若成功则会显示类似如图所示的结果
    df -lh

总结

  • 为了这个,我把阿里云Windows系统轻量应用服务器给重置了(实在是挥泪斩马谡
  • 对于Linux“挂载”有了更进一步的认识
  • 后续研究一下Ossfs如何配置以同时挂载多个BucketECS

参考资料:

https://help.aliyun.com/document_detail/32196.html

https://www.aliyun.com/price/product?spm=a2c4g.11186623.0.0.75be7952LViDJs#/oss/detail/ossbag

https://www.vpsug.com/17846.html

https://www.cnblogs.com/jason-zhao/p/14537571.html

https://github.com/aliyun/ossfs

https://eck.ink/study/82.html

https://news.gandi.net/zh-hans/2020/06/backing-up-files-with-nextcloud/

https://blog.csdn.net/weixin_42222347/article/details/95977250

https://blog.nicky1605.com/linux-mount-oss.html

https://developer.aliyun.com/ask/213453

http://help.websoft9.com/cloudbox-practice/nextcloud/solution/mount-oss.html

https://help.aliyun.com/document_detail/51374.html?spm=5176.8465980.0.0.4e7014509BnefG

https://help.aliyun.com/document_detail/150638.html

https://blog.csdn.net/willingtolove/article/details/107494719

https://www.cnblogs.com/wumz/p/10236694.html

https://blog.csdn.net/willingtolove/article/details/107496063

最后修改:2022 年 02 月 20 日 05 : 24 AM

发表评论