前言

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

Cloudreve

nextcloud

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

Cloudreve 介绍

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

截图

首页

pdf

ppt

excel

word

先放出我的 docker 命令:

shell
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,配置如下:

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
#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

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

得出正确的代理:

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
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 部署命令:

shell
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 的代理配置:

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 部署命令应该是:

shell
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