什么是OSS对象存储

  关于这个技术其实很早就出来了,现在在阿里云和腾讯云等各大云平台都已经做成熟了,其实各个平台的OSS对象存储都是一样的,现在就浅谈一下OSS对象存储的技术,不做各个平台之间的测评,如果你想深入了解OSS对象存储这个东西就点我去看看阿里云写的文档, 个人认为这个文档还是很不错的,对象存储认为是一个很不错的技术首先就三点:安全、低成本、高可靠这个就很无敌,安全性就不说了,需要你的access ID才能去对接应用,而且这也是大厂商做的对象存储,阿里云的还有同城冗余存储防止存在一个机房发生问题时你的数据丢失,这就是高可靠,还有价格4块钱半年40G,当然也可以选择其他的套餐,OK说到这里就够了,有点广告嫌疑,现在有一个问题,就是当我们购买的学生机,只有40GB的固态硬盘,我们用来存储文件肯定是不够的呀,而这个对象存储既便宜又方便,现在考虑的问题就是如何对接
nextcloud网盘对接OSS

  说到存储应用当然是以nextcloud来举例了,当然只要学会了这个应用,其他的原理都是一样的, 后期自己搭建的图床可以直接对接在OSS上面。我们现在举例有一个nextcloud网盘,看看我们原来的大小。可以在Linux终端里面看:

df -h

  上面的命令是查看你的分区大小,如图我的就只有40G的根目录。
wXwh.png
  怎么对接一个分区到我想要的目录下面呢。

购买OSS对象存储服务

  以阿里云为例,在你的搜索框搜索OSS,然后点击第一个,然后开通,开通之后点击管理控制台,然后选择资源包管理
wMPk.png
  选择购买资源包,这里就建议你购买一个中国大陆通用的,因为如果你的服务器买的是在深圳的,那么你的资源包就要买深圳的,你买北京的资源包就不可以对接到你深圳的服务器上,毕竟人家是内网对接啊,所以如果你不知道你的服务器地址在哪就买一个全国大陆通用的,然后就买40G的就OK了,不要觉得不够用,后面有惊喜
wQYo.png
  购买完成之后就可以创建一个bucket了,这个bucket的意思就可以理解为你创建了一个存储空间。Bucket的命名有以下规范:

  • 只能包括小写字母,数字,短横线(-)
  • 必须以小写字母或者数字开头
  • 长度必须在3-63字节之间
    wNZi.png

  如果不会填写就照我上面填写,注意注意,看你的服务器是哪里的,你的区域就写哪里,怎么看你服务器在哪,可以点击你购买的轻量应用服务器控制台,或者ECS控制台,里面有地址,或者输服务器公网IP在百度上面搜索也就有了。区域一定要选择正确,其他的就不要开通。其他的设置默认就行了,有的功能如果你想开通,一定要看看他的资费。建议不要乱开通,设置好之后点击bucket列表,然后选择概览,需要的信息就是这个bucket的名称,还有内网的地域节点域名,因为你的服务器是阿里云深圳的,那么你的对象存储包也是阿里云深圳或者全国通用的,那么这二者之间传输是不会扣费的,因为走得是内网,所以要这里的内网地址。注意这个bucket列表里面有一个文件管理,这个文件管理里面的文件就是等下上传上来的位置。

云服务器对接OSS对象存储服务

  现在用ssh连接到云服务器然后安装一个ossfs这么一个软件,来实现把bucket挂载到本地来。点我进行下载,各个版本的ossfs都在这个官网文档里面,我这里以我的Ubuntu为例,我就需要去下载我的Ubuntu18.04版本的ossfs软件:

wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_ubuntu18.04_amd64.deb

  下载完之后安装ossfs:

apt-get install gdebi-core
gdebi ossfs_1.80.6_ubuntu18.04_amd64.deb

  这样就安装好了,这里我的gdebi后面跟的就是我下载的那个ossfs软件包名字,如果你的是centos或者其他版本的Ubuntu要注意你的软件名字。然后配置账号访问信息,这里就体现出了安全性:

echo my-bucket:my-access-key-id:my-access-key-secret > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs

  这里echo后面的my-bucket就是你刚创建的那个bucket名称,我这里就是wangpan666然后这个access-key-id和access-key-secret点击你的阿里云头像,选择access key管理就可以看到,其他云平台同理,都在头像那里。
wl2v.png
  那么我就应该写成:

echo bucket-test:LTAIbZcdVCmQ****:MOk8x0y9hxQ31coh7A5e2MZEUz**** > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs

  这一步应该没啥问题,就是在etc目录下面创建了一个passwd-ossfs的文件。里面的内容就是写的那些,注意冒号空格,最后把文件权限给到640即可。然后就是挂载的事了,一般你的nextcloud文件存储位置在

data/user/files

  这个位置在你的网盘程序的根目录下载的data文件夹里面,在输入挂载命令之前一定要确保里面是空的文件夹,如果里面有任何内容那么就无法挂载,你想想,如果你这个文件夹里面有内容,但是你要拿去跟OSS同步,那么该以哪边的为准呢,所以要将其清空,以后的文件用户通过登录nextcloud然后直接上传,但是传到的位置却不在服务器的nextcloud文件夹里面,而是在你的OSS的bucket里面。
wqAe.png
  看上面这个图就可以理解了,灵魂画师
  现在目录的事情搞好了,在挂载之前尤其是像这种php程序,或者其他的http程序, 挂载的时候都需要注意一个事情就是权限,ossfs挂载的目录访问权限默认为挂载点的所有者,即执行挂载命令的用户,其他用户无法访问。如果要修改默认的权限设置,例如允许其他用户或用户组访问挂载点,可以在运行ossfs的时候使用如下参数,做到期望的权限设置。

  • allow_other:赋予计算机上其他用户访问挂载目录的权限,但不包括目录内的文件。如果您要更改文件夹中的文件访问权限,请用chmod命令。该选项不需要设置选项值,如果需要启用,请直接添加-oallow_other选项。
  • uid:设置文件夹属于某个用户时填写的用户uid。
  • gid:设置文件夹属于某个用户时填写的用户gid。
  • mp_umask:用来设定挂载点的权限掩码,只有当allow_other选项设置后,该选项才生效,默认值为000。使用方法与umask命令使用方式一致。例如需要设置挂载点的权限为770,则增加-oallow_other -omp_umask=007;需要设置挂载点的权限为700,则增加-oallow_other -omp_umask=077。
      我们可以先看看我们的这个网盘程序是给哪个用户的,输入下面的命令:
ll

  看下图可以看到都是给了www这个用户的
w10y.png
  现在需要获取到这个www用户的uig和gid

root@pan:~# id www
uid=1001(www) gid=1001(www) groups=1001(www)

  Nginx的好像都是1001,Apache的好像是1000,获取到这个之后我们就可以挂载了:

ossfs bucket_name mount_point -ourl=endpoint -oallow_other -ouid=1000 -ogid=1000 -omp_umask=007

  上面是挂载参数,ossfs后面接你的bucket名字,然后mount_point是指你要挂载的本地文件的目录,这个目录必须是空的,还有-ourl后面的endpoint这里指的就是刚才最开始bucket概览里面的内网地址,如果忘了请翻到前面去看看,之后的-oallow_other就是所有用户可以使用,然后gid和uid就是你的www用户的id,那么举例,我的写法就是:

ossfs wangpan666 /123 -ourl=oss-cn-beijing-internal.aliyuncs.com -oallow_other -ouid=1001 -ogid=1001 -omp_umask=007

  由于我的网盘里面有文件,所以就在根目录下面创建了一个123文件夹,我后面的权限是给了www这个用户,我们可以去看看根目录下面123文件夹的用户权限:
wenc.png
  可以看到这个123文件夹的用户权限是www的,这样你在nextcloud里面就可以上传文件了,而且注意到一个细节了吗,明明购买的是40G,但是写的却是256T。其实这算是个小惊喜吧,当你用超过了40G,阿里云的资费标准是很低的,只有几分钱1G,同时这个是内网的,所以传输起来是免费的。而且在你的手机上看你的容量不觉得很爽吗??
wxgl.png
  其他的无论是php还是静态的或者Tomcat等应用都一样, 搞好权限就可以了

最后修改:2020 年 07 月 10 日 08 : 02 PM
请俺喝杯咖啡呗