经常写一写文档之类的东西,需要一个同步网盘,但是现在市面上的还是满足不了我的要求,突然发现阿里云的 oss 可以挂载成虚拟磁盘,试着折腾了一下效果还不错,不过这中间还是有许多的坑

之前使用的云盘

  1. 坚果云
    个人认为是现在市面上最好的同步盘了,支持增量同步,多平台有 linux 版本,可以使用 webdav。美中不足的免费版每个月限制上传下载流量,收费版不限制流量有空间限制。有段时间突然有大量文件需要备份导致流量不足,但是平时又用不了太多,开一个月专业版的空间又不够,用的有点憋屈所以就弃用了。

  2. 百度云等
    在使用坚果云之前的主力网盘,同步盘功能竟然要会员才能用,而且同步盘做的很不好用,不过用来做资源分享之类的还不错

为什么使用 oss

  1. 数据的稳定性,我比较喜欢折腾所以服务器有时候就会重装这时候对于文件就非常的不好管理和备份,放在 oss 上面能够更好的管理

  2. 第二个就是便宜,不和其他几家的云服务对比仅仅和阿里云的云盘,就是买服务器的时候的一个选项,便宜很多。40g 的话一年也就差不多 10 多块的样子。而且和 ECS 搭配使用没有流量费用

准备工作

安装 lnmp 架构

其实 owncloud 官方更加推荐 lamp,但是我个人更喜欢 nginx,要比 Apache 省资源一些,能够用 Apache 的也很不错,可以少踩很多配置的坑,owncloud 的 nginx 官方示例配置很多坑,之后会说到

安装 ossfs

注意:在这之前你需要先开通 oss,最好是和你的 ECS 是一个地区的,当然不是用的 ECS 也可以用,只是速度会慢一些,还有就是下载会使用公网流量,上传没有

1.点击打开 ossfs 的下载页面下载对应系统的安装包 2.我已 Ubuntu 为例,安装 ossfs,其他系统看官方的文档就行

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

3.将my-bucket这个 bucket 挂载到/data/cloud目录下,AccessKeyId 是faint, AccessKeySecret 是123,oss endpoint 是http://oss-cn-hangzhou.aliyuncs.com

echo my-bucket:faint:123 > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs
mkdir /data/cloud

最后一步很重要,不能直接照官方文档上面的来,不然安装 owncloud 的时候可能会出现没有访问权限的问题

  • 首先先看一下 nginx 的用户 id,以我的是www为例
id www

会返回给你用户的 uid 和 gid 等等,我假设返回的 uid 和 gid 都为 1001

ossfs my-bucket /data/cloud -ourl=http://oss-cn-hangzhou-internal.aliyuncs.com -ouid=1001 -ogid=1001 -o allow_other -o umask=007

这里面allow_other是允许其他用户访问,但是默认设置的是 777 权限这样 owncloud 会提示不安全,用umask=007挂载为 770 权限,不知道为啥这里 0 代表 7,7 表示 0

到这里 ossfs 就安装完毕了下面开始安装 owncloud

安装 OWNCLOUD

owncloud 的安装网上已经有很多的教程我就不多说了

先打开owncloud 的官网的服务器端的安装地址,我安装的时候最新稳定版是9.0.2建议国内主机用迅雷之类的下载软件先下载下来上传到服务器,直接 wget 比较慢

1.下载并解压

wget  https://download.owncloud.org/community/owncloud-9.0.2.tar.bz2 //手动上传这一步就不用了
tar xvf owncloud-9.0.2.tar.bz2 //以实际的文件名为准

2.移动到站点目录,假设站点目录为/data/wwwroot

mv owncloud/ /data/wwwroot/

3.设置目录权限,这一步很重要

chown -R www:www /data/wwwroot/owncloud/
chmod 777 /data/wwwroot/owncloud//config/

设置 nginx 规则(Apache 基本不用改,只需要自己去设置一下 ssl,和常规的设置就行了)

注意规则设置好之后,安装的时候点高级设置,使用 mysql 或者其他数据库,sqllite的性能不够,然后就是数据文件目录填写之前你 ossfs 的挂载目录,我之前挂载的是/data/cloud

后面有 9.x 官方的示例,我这儿提示一下有些坑的地方

1.本身的设置里面没有 log 的设置,不方便 debug,access_log 可以不用,error_log 还是需要加上的 2.里面没有 index 的设置,如果打开首页一片空白,加上 index.php 之后没有问题的话,

location / {
		index index.php #加上这一句
      rewrite ^ /index.php$uri;
}

3.如果你进入安装页面,按照提示安装好了之后出现说找不到文件目录之类的话,那么很有可能是你没有开启pathinfo,owncloud 需要 pathinfo 的支持(示例的配置里面是有 pathinfo 的设置的)

NEXT

到这里基本上 owncloud 的安装应该就结束了,使用也没有什么问题,我建议开启 ssl,不知道为什么,我开了 ssl 之后访问的速度提升了好几倍

附送官方插件的地址点我点我,国内主机在线安装插件可能装不上,可以 FQ 之后在这里面下载相应插件包,上传到 apps 目录下即可,下一篇说一下用 owncloud 实现离线下载功能,现在 9.0.2 版本的使用 owncloud 的离线下载插件有问题,但是看了一下这个 bug 很早就有,只是好像一直没有修复。之后我改一下能够用了再写下一篇吧

9.x 官方示例

 upstream php-handler {
    server 127.0.0.1:9000; #注意一下你自己的php服务设置,这一行可能需要自己调整
    #server unix:/var/run/php5-fpm.sock;
}
server {
    listen 80;
    server_name cloud.example.com;
    # enforce https
    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;
    server_name cloud.example.com;

    #ssl证书的位置
    ssl_certificate /etc/ssl/nginx/cloud.example.com.crt;
    ssl_certificate_key /etc/ssl/nginx/cloud.example.com.key;

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.

    # 安装好之后,后台可能会提示相应错误,把这一段的注释去掉就行
    # add_header Strict-Transport-Security "max-age=15768000;
    # includeSubDomains; preload;";

    #后面安装好了之后后台可能会提示header的错误,把这一短删除掉即可
    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;

    # Path to the root of your installation
    root /var/www/owncloud/;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    location = /.well-known/carddav { return 301
     $scheme://$host/remote.php/dav; }
    location = /.well-known/caldav { return 301
     $scheme://$host/remote.php/dav; }

    location /.well-known/acme-challenge { }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed 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;
    }

    location ~
    ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater
    /.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
        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;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* \.(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        # 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;
        # Optional: Don't log access to assets
        access_log off;
    }

    location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
    }
}