Oss挂载Nextcloud存储网盘

  1. Ossfs是什么

ossfs能让您在Linux系统中,将对象存储OSS的存储空间(Bucket)挂载到本地文件系统中,您能够像操作本地文件一样操作OSS的对象(Object),实现数据的共享。

2.主要功能

ossfs基于s3fs构建,具有s3fs的全部功能。其中包括:

  • 支持POSIX文件系统的大部分功能,包括文件读写、目录、链接操作、权限、uid/gid、以及扩展属性(extended attributes)。
  • 使用OSS的multipart功能上传大文件。
  • 支持MD5校验,保证数据完整性

3.使用限制

ossfs使用有以下限制:

  • 不支持挂载归档型Bucket。
  • 编辑已上传文件会导致文件被重新上传。
  • 元数据操作,例如list directory,因为需要远程访问OSS服务器,所以性能较差。
  • 重命名文件/文件夹可能会出错。若操作失败,可能会导致数据不一致。
  • 不适合高并发读/写的场景。
  • 多个客户端挂载同一个OSS Bucket时,数据一致性由您自行维护。例如,合理规划文件使用时间,避免出现多个客户端写同一个文件的情况。
  • 不支持hard link。

4.快速安装

由于低版本的Linux系统内核版本比较低,ossfs进程在运行过程中容易出现掉线或者其他问题。因此建议您将操作系统升级到CentOS 7.0或者Ubuntu 14.04及以上版本。

1.下载安装包。

以下载CentOS 7.0 (x64)版本为例:

Wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm

2.安装ossfs。

2.1 Ubuntu系统的安装命令:

  • sudo apt-get update
  • sudo apt-get install gdebi-core

    sudo gdebi your_ossfs_package

2.2 CentOS6.5及以上系统版本的安装命令:

sudo yum localinstall your_ossfs_package

说明 对于使用yum安装rpm包的客户端,如果客户端节点网络环境特殊,无法直接用yum下载依赖包。可以在网络正常的、相同版本操作系统的节点上,使用yum下载依赖包并拷贝到网络特殊的节点。例如,ossfs需要依赖fuse 2.8.4以上版本,可使用如下命令,下载yum源中最新的fuse到本地:

sudo yum install --downloadonly --downloaddir=./ fuse

如果需要下载其他依赖包,则将fuse换成对应包的名称。

CentOS5系统版本的安装命令:

sudo yum localinstall your_ossfs_package --nogpgcheck

2.3配置账号访问信息。

将Bucket名称以及具有此Bucket访问权限的AccessKeyId/AccessKeySecret信息存放在/etc/passwd-ossfs文件中。注意这个文件的权限必须正确设置,建议设为640。

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

chmod 640 /etc/passwd-ossfs

2.4将Bucket挂载到指定目录。

ossfs my-bucket my-mount-point -ourl=my-oss-endpoint

挂载示例:将杭州地域名称为bucket-test的Bucket挂载到/tmp/ossfs目录下。

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

chmod 640 /etc/passwd-ossfs

mkdir /tmp/ossfs

ossfs bucket-test /tmp/ossfs -ourl=http://oss-cn-hangzhou.aliyuncs.com

注意 如果您使用从阿里云购买的云服务器(ECS)来提供ossfs服务,您可以使用内网域名,在这个示例中您可以将OSS endpoint 改为oss-cn-hangzhou-internal.aliyuncs.com,这样可以节省流量费用

2.5如果您不希望继续挂载此Bucket,您可以将其卸载。

fusermount -u /tmp/ossfs

5.Nextcloud挂载ossfs

几年前还百家争锋的国内网盘市场,如今只剩下百度网盘一枝独秀了。虽然还有一些稳定的国外网盘,如 OneDrive、DropBox、Google Drive 等,但国内访问并不友好。

私有云和 NAS 这种完全掌握在自己手中的云端存储方案就体现其优势了。本文就介绍下如何在 VPS 上快速使用 Nextcloud 搭建个人专属的私有云同步网盘。

Nextcloud 跨平台支持 Windows、Mac、Android、iOS、Linux 等平台,而且还提供了「网页版」以及 WebDAV 形式访问,因此你几乎可以在任何电脑、手机设备上都能轻松获取和访问你的文件文档

优势:

  • 私密,自己全权管理所有文件;
  • 稳定,不存在服务商关闭网盘服务的问题;
  • 高速,直链下载,不限速;
  • 功能丰富,可安装插件实现各种云端功能。

不足:

  • 需要自己维护备份;
  • 存储容量多为几十G,不适合做仓库盘。

自建网盘方案选择

推荐的比较多的有三个:

  • Nextcloud
  • ownCloud
  • Seafile

适合个人和企业使用,基础版免费。都是成熟方案,主体功能上大同小异,且都支持在线查看/播放文件、插件扩展等功能。

1.安装nextcloud安装yum扩展源

yum install -y epel-release

2. 安装Remi源(包含最新的PHP和mysql)

yum install http://rpms.remirepo.net/enterprise/remi-release-6.rpm

3.安装yum-utils

yum install -y yum-utils

4. 指定安装php版本

yum-config-manager --enable remi-php72

5. 安装php7.2

yum -y install php-fpm php-cli php-gd php-mcrypt php-mysql php-pear php-xml php-mbstring php-pdo php-json php-pecl-apcu php-pecl-apcu-devel

6. 检查安装是否成功

[root@oms cert]# php -v

PHP 7.2.19 (cli) (built: May 29 2019 11:20:29) ( NTS )

Copyright (c) 1997-2018 The PHP Group

Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

with Zend OPcache v7.2.19, Copyright (c) 1999-2018, by Zend Technologies

7. 编辑php-fpm

vim /etc/php-fpm.d/www.conf

修改内容如下:

user = nginx ##将用户和组都改为nginx的用户

group = nginx

env[HOSTNAME] = $HOSTNAME ##去掉下面几行注释

env[PATH] = /usr/local/bin:/usr/bin:/bin

env[TMP] = /tmp

env[TMPDIR] = /tmp

env[TEMP] = /tmp

8. 设置权限

在/var/lib目录下为session路径创建一个新的文件夹,并将用户名和组设为nginx

mkdir -p /var/lib/php/session

chown nginx:nginx -R /var/lib/php/session/

9. 启动Nginx和php-fpm服务,并添加开机启动

systemctl start php-fpm

systemctl start nginx

systemctl enable php-fpm

systemctl enable nginx

10. 连接mysql创建数据库和数据库账户

MariaDB [(none)]> create database nextcloud;

MariaDB [(none)]> create user nextcloud@localhost identified by '123456';

MariaDB [(none)]> grant all privileges on nextcloud.* to nextcloud@localhost

MariaDB [(none)]> flush privileges;

11. ssl证书可选择云运营商

12.下载并安装Nextcloud

nextcloud官方下载网址:https://download.nextcloud.com/server/releases/

下载

wget https://download.nextcloud.com/server/releases/nextcloud-16.0.1.tar.bz2

解压

tar jxvf nextcloud-16.0.1.tar.bz2

mv nextcloud /data/

13. 为Nextcloud创建data目录,将Nextcloud的用户和组修改为nginx

mkdir -p nextcloud/data/

chown nginx:nginx -R nextcloud/

14. 配置Nginx虚拟主机

nginx主配置文件可以参考如下:

user nginx nginx;

worker_processes 2;

error_log /usr/local/nginx/logs/nginx_error.log crit;

pid /usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile 51200;

 

events

{

use epoll;

worker_connections 6000;

}

 

http

{

include mime.types;

default_type application/octet-stream;

server_names_hash_bucket_size 3526;

server_names_hash_max_size 4096;

log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'

' $host "$request_uri" $status'

' "$http_referer" "$http_user_agent"';

sendfile on;

tcp_nopush on;

keepalive_timeout 30;

client_header_timeout 3m;

client_body_timeout 3m;

send_timeout 3m;

connection_pool_size 256;

client_header_buffer_size 1k;

large_client_header_buffers 8 4k;

request_pool_size 4k;

output_buffers 4 32k;

postpone_output 1460;

client_max_body_size 10m;

client_body_buffer_size 256k;

client_body_temp_path /usr/local/nginx/client_body_temp;

proxy_temp_path /usr/local/nginx/proxy_temp;

fastcgi_temp_path /usr/local/nginx/fastcgi_temp;

fastcgi_intercept_errors on;

tcp_nodelay on;

gzip on;

gzip_min_length 1k;

gzip_buffers 4 8k;

gzip_comp_level 5;

gzip_http_version 1.1;

gzip_types text/plain application/x-javascript text/css text/htm

application/xml;

include vhost/*.conf;

}

创建并添加nextcloud的配置文件

vim nginx/conf/vhost/nextcloud.conf

内容如下:

upstream php-handler {

server 127.0.0.1:9000;

}

server {

listen 80;

listen 443 ssl;

server_name localhost;

ssl_certificate /usr/local/nginx/cert/nextcloud.pem; ##证书文件路径,后缀自建为crt,此处为freessl申请的证书

ssl_certificate_key /usr/local/nginx/cert/nextcloud.key;

add_header Strict-Transport-Security "max-age=15768000;

includeSubDomains; preload;";

add_header X-Content-Type-Options nosniff;

add_header X-Frame-Options "SAMEORIGIN";

add_header X-XSS-Protection "1; mode=block";

add_header X-Robots-Tag none;

add_header X-Download-Options noopen;

add_header X-Permitted-Cross-Domain-Policies none;

 

root /data/nextcloud/;

if ( $scheme != "https" ) {

return 301 https://$host$request_uri;

}

 

location = /robots.txt {

allow all;

log_not_found off;

access_log off;

}

 

location = /.well-known/carddav {

location = /.well-known/caldav {

return 301 $scheme://$host/remote.php/dav;

}

client_max_body_size 512M;

fastcgi_buffers 64 4K;

gzip off;

 

error_page 403 /core/templates/403.php;

error_page 404 /core/templates/404.php;

 

location / {

rewrite ^ /index.php$uri;

}

 

location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {

deny all;

}

location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {

deny all;

}

include fastcgi_params;

fastcgi_split_path_info ^(.+\.php)(/.*)$;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param PATH_INFO $fastcgi_path_info;

fastcgi_param HTTPS on;

fastcgi_param modHeadersAvailable true;

fastcgi_param front_controller_active true;

fastcgi_pass php-handler;

fastcgi_intercept_errors on;

fastcgi_request_buffering off;

fastcgi_buffers 8 128k;

fastcgi_buffer_size 128k;

fastcgi_busy_buffers_size 256k;

fastcgi_temp_file_write_size 256k;

fastcgi_connect_timeout 300s;

fastcgi_send_timeout 300s;

fastcgi_read_timeout 300s;

}

location ~ ^/(?:updater|ocs-provider)(?:$|/) {

try_files $uri/ =404;

index index.php;

}

location ~* \.(?:css|js)$ {

try_files $uri /index.php$uri$is_args$args;

add_header Cache-Control "public, max-age=7200";

add_header Strict-Transport-Security "max-age=15768000;includeSubDomains; preload;";

add_header X-Content-Type-Options nosniff;

add_header X-Frame-Options "SAMEORIGIN";

add_header X-XSS-Protection "1; mode=block";

add_header X-Robots-Tag none;

add_header X-Download-Options noopen;

add_header X-Permitted-Cross-Domain-Policies none;

access_log off;

}

location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {

try_files $uri /index.php$uri$is_args$args;

access_log off;

}

}

15. 检测配置是否正确并重新加载配置

nginx -t && nginx -s reload

16. 游览器登录,根据提示安装nextcloud即可

  • 输入浏览器的链接
  • 添加用户名/密码
  • 选择数据库

17.添加外部存储插件

Oss挂载Nextcloud存储网盘

18.在应用中,找到应用软件包,选择插件,启动

Oss挂载Nextcloud存储网盘

19.选择设置:

Oss挂载Nextcloud存储网盘

20.在左边找到外部存储选项

Oss挂载Nextcloud存储网盘

21.添加外部存储的目录

Oss挂载Nextcloud存储网盘

22.创建成功后,选择文件,则看到外部oss目录的添加名

Oss挂载Nextcloud存储网盘

Oss挂载Nextcloud存储网盘

上一篇:Warnsdorff‘s algorithm 完成骑兵游行(Knight tour)问题


下一篇:452. 用最少数量的箭引爆气球—力扣 Knight_45