前言

本教程同时适用 NextcloudOwncloud,目的是实现国内云计算大厂提供的对象储存服务在私人云上的挂载。完成挂载之后,于云计算厂商购买的对象储存服务中的文件可直接在自己的私人云平台上无缝访问。无需输入密码即支持创建文件、删除文件、更改目录、访问编辑等...

本教程演示平台为已经构建好Nextcloud的Centos7,挂载的云服务为腾讯云COS。挂载阿里云OSS需要使用阿里云对象存储的挂载工具,原理相同。

步骤一:创建 SecretId 和 SecretKey

  1. 进入腾讯云控制台
  2. 左上角云产品 > 管理与审计 > 访问密钥
  3. 点击新建密钥 > 记下SecretIdSecretKey
    访问密钥

步骤二:构建官方提供的挂载工具 COSFS

1- 安装必要编译环境

yum install automake gcc-c++ git libcurl-devel libxml2-devel fuse-devel make openssl-devel fuse

2- 获取COSFS源码至指定目录/usr/cosfs

git clone https://github.com/tencentyun/cosfs /usr/cosfs

3 -编译并安装COSFS

cd /usr/cosfs
# 访问刚才源码克隆到的目录

./autogen.sh
# 生成初始化脚本文件

./configure
# 配置包

make
# 开始编译包

make install
# 安装编译完成的 COSFS

cosfs --version
# 查看是否安装成功,如果成功安装,控制台会输出 "Tencentyun Object Storage Service File System V.当前版本 with OpenSSL"...

步骤三:将储存桶挂载到本地文件夹

1- 进入控制台 > 对象存储 > 储存桶列表 > 概览,查看储存桶的详细信息。
储存桶的详细信息
2- 设置COSFS的挂载对象,将1-中获取的详细信息填入。

echo <BucketName>:<SecretId>:<SecretKey> > /etc/passwd-cosfs
# 命令使用方法

<BucketName> = 基本信息 > 储存桶名称 (通常为 一个单词 dash 一堆数字)
<SecretId> = 详见步骤一
<SecretKey> = 详见步骤一
3- 给目录添加可读写权限

chmod 640 /etc/passwd-cosfs

4- 在Nextcloud中创建挂载目录

cd /<你的网站根目录>/<Nextcloud根目录>/data/<Nextcloud用户名>/files/
# 访问 Nextcloud 文件存储根目录
mkdir 腾讯云COS
# 创建 腾讯云COS 文件夹

5- 运行工具挂载储存桶

cosfs <BucketName> <MountPoint> -ourl=<CosDomainName> -odbglevel=info -oallow_other
# 挂载位于 <CosDomainName> 的 <BucketName> 储存桶至 <MountPoint>

<BucketName> = 基本信息 > 储存桶名称 (通常为 一个单词 dash 一堆数字)
<MountPoint> = 刚才创建的挂载文件夹路径 (/腾讯云COS)
<CosDomainName> = 存储桶对应的访问域名,形式为 http://cos.<;Region>.myqcloud.com (适用于XML API),其中<Region> 为地域简称, 如: ap-guangzhoueu-frankfurt 等。更多地域信息,请查阅 腾讯云地域列表。如果储存桶在上海则填写 http://cos.ap-shanghai.myqcloud.com

根据COSFS常见问题指引,http/https两种方式均可挂载储存桶!

-odbglevel=info = 定义日志的记录等级
-oallow_other = 对挂载介质系统中的所有用户开放权限
6- 测试挂载状态

df -h
# 如成功挂载,文件系统中会出现 COSFS,其容量为 256T,挂载点为刚才设置的挂载目录(/腾讯云COS)

步骤四:与Nextcloud搭桥

1- 虽然在成功挂载了储存桶,但是细心的小伙伴们会发现,在刷新了Nextcloud后,储存桶并没有在文件列表中显示。这是因为虽然上传了文件,但是Nextcloud的数据库里并没有这个文件的信息。文件信息都被存储在数据库的oc_filecache表中。对应的解决方法是使用Nextcloud包中的OCC工具重新把data/用户中的所有文件重新扫描并记录进数据库。
2- Nextcloud包中的OCC工具仅能由对应的Web服务环境用户才能操作,所以首先需要弄清楚Web服务环境的用户名。

Debian/Ubuntu 默认用户 = www-data
Fedora/CentOS 使用Apache服务的默认用户 = apache
Arch Linux 里的默认用户 = http
openSUSE 里的默认用户 = wwwrun, 组 = www

不一定所有Web环境用户都是默认配置,比如使用宝塔Linux面板构建的LNMP环境的用户不是www-data而是www。

3- 使用OCC工具扫描指令,必须指定扫描路径和使用角色,否则报错

sudo -u <Web环境用户名> php <Nextcloud安装路径>/occ files:scan --path="/<Nextcloud用户>/files/<COSFS挂载文件夹>" 
# 让系统用户 <Web环境用户名> 访问 <Nextcloud安装路径> 中的 OCC

由于OCC是使用PHP编译的,所以使用php occ files:scan(文件扫描),特别指定用户<Nextcloud>的<COSFS挂载>文件夹

sudo -u www-data php occ files:scan --path="/David233/files/Miku" 
# 指向用户 David233 的 Miku 文件夹

4- 完成扫描后,控制台会输出如下表格,代表成功扫描。
PHP OCC 扫描总结表格
5- 再次刷新Nextcloud的文件列表,发现成功显示挂载的储存桶,并且可以无缝访问更改,教程至此结束。

注意事项

  • 按照步骤四的扫描搭桥法,无需重启Web服务。
  • 步骤四中的3-需要注意--path="/<Nextcloud用户>/files/<COSFS挂载文件夹>",这个路径是不需要/的前半部分的,因为--path=""这个函数的目标是Nextcloud根目录中的data文件夹。如果把完整目录填入则会报错找不到用户。
  • 步骤三中的5-需要注意<CosDomainName>不是储存桶的访问域名,而是储存桶所在地域的访问域名。填写错误则会报错,找不到所属地域。
  • 步骤三中的5-需要注意-oallow_other函数一定需要加上,因为接下来的PHP OCC文件扫描步骤中,OCC仅能使用Web服务环境的用户打开。如果不增加-oallow_other函数,则储存桶默认只有Root可以读写(看到),从而导致PHP OCC扫描不到挂载的路径,因为Web服务环境用户没有读写(看到的权限)
  • 步骤四中的2-需要注意,如果用户填写错误或不存在,sudo会报错找不到用户。可以使用cat /etc/passwd查看全部用户。

参考文章

最后修改:2021 年 04 月 13 日 06 : 58 AM
花要叶扶,人要人帮