前言

最近想用一下云文件管理系统试试上传其他格式的云文件,想跳过兰空图床只能上传图片的限制,在网上找到了一些的看着还不错的开源项目:

Cloudreve

nextcloud

Cloudreve之前部署过,后面没有需求就不用了,现在又想试试了,有经验就先试试这个

Cloudreve介绍

Cloudreve 可以让您快速搭建起公私兼备的网盘系统。Cloudreve 在底层支持不同的云存储平台,用户在实际使用时无须关心物理存储方式。你可以使用 Cloudreve 搭建个人用网盘、文件分享系统,亦或是针对大小团体的公有云系统。

截图

首页

pdf

ppt

excel

word

先放出我的docker命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkdir -vp /www/cloudreve/{uploads,avatar} \
&& touch /www/cloudreve/conf.ini \
&& touch /www/cloudreve/cloudreve.db

docker run -d \
--name cloudreve --restart=always \
-p 9112:5212 \
--mount type=bind,source=/www/cloudreve/conf.ini,target=/cloudreve/conf.ini \
--mount type=bind,source=/www/cloudreve/cloudreve.db,target=/cloudreve/cloudreve.db \
-v /www/cloudreve/uploads:/cloudreve/uploads \
-v /www/cloudreve/avatar:/cloudreve/avatar \
cloudreve/cloudreve:latest

docker logs cloudreve

账号密码就在docker打印出来的日志里面

docker跑完后访问ip:端口

Cloudreve预览office三件套

由于微软的预览时不时发癫,无法预览,所以得设置wopi(在管理面板->参数设置->图像与预览->WOPI 客户端)

我先照着Cloudreve官方试着部署了onlyoffice

onlyoffice的nginx代理

由于onlyoffice是http的(可以搞https,但是我不会),需要https,所以需要nginx监听https并代理http,配置如下:

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
#view.aqcoder.cn
server {
listen 80;
server_name view.aqcoder.cn;
rewrite ^(.*)$ https://$host$request_uri;
}


server {
listen 443 ssl;
server_name view.aqcoder.cn;

ssl_certificate /etc/ssl/aqcoder.cn/aqcoder.cn.cer;
ssl_certificate_key /etc/ssl/aqcoder.cn/aqcoder.cn.key;
ssl_session_cache shared:SSL:4m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
charset utf-8;

location / {
proxy_pass http://127.0.0.1:9170;
}
}

按照cloudreve的教程弄完后,发现用不了:

error

一查网络,好家伙,访问到本地了:

本地Ip

折腾了好久,搜到网上这篇文章:https://www.jianshu.com/p/3f99d45fb4b8

代理配置搞错了!

同时官方也有对应的场景

onlyoffice

示例配置也给了,可以根据以上教程

得出正确的代理:

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
upstream docservice {
server 127.0.0.1:9170;
}

map $http_host $this_host {
"" $host;
default $http_host;
}

map $http_x_forwarded_proto $the_scheme {
default $http_x_forwarded_proto;
"" $scheme;
}

map $http_x_forwarded_host $the_host {
default $http_x_forwarded_host;
"" $this_host;
}

map $http_upgrade $proxy_connection {
default upgrade;
"" close;
}

#view.aqcoder.cn
server {
listen 80;
server_name view.aqcoder.cn;
rewrite ^(.*)$ https://$host$request_uri;
}


server {
listen 443 ssl;
server_name view.aqcoder.cn;

ssl_certificate /etc/ssl/aqcoder.cn/aqcoder.cn.cer;
ssl_certificate_key /etc/ssl/aqcoder.cn/aqcoder.cn.key;
ssl_session_cache shared:SSL:4m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
charset utf-8;

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

location / {
proxy_pass http://127.0.0.1:9170;
}
}

访问https://view.aqcoder.cn/hosting/discovery也返回预期的 XML 响应

不过Cloudreve官方也说了:

OnlyOffice 不支持过滤 WOPI 请求来源,如果你有对公使用需求,请通过外部应用防火墙检查预览页面请求中 wopisrc 参数是否为预期的 Cloudreve 站点。

Collabora Online的nginx代理

Collabora Online 部署的时候也遇到了一样的问题

原docker部署命令:

1
2
3
4
5
6
docker run -t -d -p 9980:9980 \
-e "aliasgroup1=xxxxxx:443" \
-e "username=xxxxx" \
-e "password=xxxxx" \
--cap-add MKNOD \
--name code --restart always collabora/code

原nginx的代理配置:

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
#view1.aqcoder.cn
server {
listen 80;
server_name view1.aqcoder.cn;

rewrite ^(.*)$ https://$host$request_uri;
}


server {
listen 443 ssl;
server_name view1.aqcoder.cn;

ssl_certificate /etc/ssl/aqcoder.cn/aqcoder.cn.cer;
ssl_certificate_key /etc/ssl/aqcoder.cn/aqcoder.cn.key;
ssl_session_cache shared:SSL:4m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
charset utf-8;

# static files
location ^~ /browser {
proxy_pass https://127.0.0.1:9980;
proxy_set_header Host $http_host;
}


# WOPI discovery URL
location ^~ /hosting/discovery {
proxy_pass https://127.0.0.1:9980;
proxy_set_header Host $http_host;
}


# Capabilities
location ^~ /hosting/capabilities {
proxy_pass https://127.0.0.1:9980;
proxy_set_header Host $http_host;
}


# main websocket
location ~ ^/cool/(.*)/ws$ {
proxy_pass https://127.0.0.1:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}


# download, presentation and image upload
location ~ ^/(c|l)ool {
proxy_pass https://127.0.0.1:9980;
proxy_set_header Host $http_host;
}


# Admin Console websocket
location ^~ /cool/adminws {
proxy_pass https://127.0.0.1:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}

}


后来也是借着cloudreve官方文档查到了collaboraonline官方文档

collaboraonline官方文档有一处配置server_name,解释是:CODE没有为websocket连接提供正确的主机,如果在它前面有一个代理。

server_name

简单来说呢,就是可以设置主机名

所以正确的docker部署命令应该是:

1
2
3
4
5
6
7
docker run -t -d -p 9980:9980 \
-e "aliasgroup1=https://file.aqcoder.cn:443" \
-e "username=xxx" \
-e "password=xxxx" \
-e "server_name=view1.aqcoder.cn" \
--cap-add MKNOD \
--name code --restart always collabora/code

总结

多看文档

参考文章

onlyoffice配置ssl证书并进行Nginx反向代理遇到的坑,docker 安装onlyoffice Nginx SSL

在代理后使用 ONLYOFFICE Docs - ONLYOFFICE

CODE Docker image — SDK

扩展文档预览/编辑 - Cloudreve