使用lnmp+owncloud+ossfs+oss搭建属于自己的私有云盘

经常写一写文档之类的东西,需要一个同步网盘,但是现在市面上的还是满足不了我的要求,突然发现阿里云的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,其他系统看官方的文档就行

1
2
3
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

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

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

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

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

1
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.下载并解压

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

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

1
mv owncloud/ /data/wwwroot/

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

1
2
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之后没有问题的话,

1
2
3
4
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官方示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
 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;
}
}