因为对LibreOffice的兼容性不看好,加上Collabora Online (LibreOffice Online)的界面语言显示不知道到底和什么有关。加上网络上关于他的资料多数较老。所以继续尝试onlyoffice。
onlyoffice 社区开源版本,限制20个文件同时编辑。但是因为开源,所以是可以绕过去的。我这里用不到所以没有尝试修改这个限制。
本文主要内容:
- 搭建公网环境可用的onlyoffice
- 限制仅限自己可用的onlyoffice
基于 pve7.3-4 lxc alpine3.17
初步搭建。
lxc alpine安装docker
参考之前的文章:基本配置和安装docker https://dev.leiyanhui.com/pve/alpine-docker
准备证书
我这里是 部署到github上的acme.sh,直接拉回来解压
1
2
3
| wget https://github.com/joyanhui/ssl/raw/main/ssl.zip
apk add p7zip
7z x ssl.zip -p密码 #密码和p字母之间没有空格
|
自动更新 参考 :https://dev.leiyanhui.com/web/auto-updatessl-form-github
docker安装onlyoffice
onlyoffice 依赖不少,直接docker弄吧。 我这里证书用nginx处理,方便后面禁止别人使用。
也可以把证书挂载到 /var/www/onlyoffice/Data/certs/ onlyoffice.crt onlyoffice.key
直接开443。如果你有80和443的话,他好像会自动帮你申请证书。
1
| docker run -itd -p 8080:80 --name office2 -e WOPI_ENABLED=true --restart always -e TZ=Asia/Shanghai onlyoffice/documentserver
|
打开检查
群友的,可以参考
1
| docker run -i -t -d -p 9001:80 -p 9002:443 -e WOPI_ENABLED=true -v /root/onlyoffice/DocumentServer/logs:/var/log/onlyoffice -v /root/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data -v /root/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice -v /root/onlyoffice/DocumentServer/rabbitmq:/var/lib/rabbitmq -v /root/onlyoffice/DocumentServer/redis:/var/lib/redis -v /root/onlyoffice/DocumentServer/db:/var/lib/postgresql onlyoffice/documentserver
|
nginx反代
alpine下nginx的配置文件 是在 http.d 目录下哈
1
2
3
4
| apk add nginx
rc-update add nginx
rc-service nginx start
nginx -s reload # 重载
|
1
2
| mv /etc/nginx/http.d/default.conf /etc/nginx/http.d/default.conf-bak #非必须
nano /etc/nginx/http.d/office.conf
|
内容,如果你还有其他虚拟主机,记得处理 段落位置
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
| upstream docservice {
server 127.0.0.1:8080;
}
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;
}
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;
#陷阱主机 为了拦截域名错误的请求
server {
listen 10011 ssl;
server_name trap.ddns.leiyanhui.com *.ddns.leiyanhui.com *.leiyanhui.com;
ssl_certificate /root/ssl/ddns.leiyanhui.com.cer; # fullchain.pem
ssl_certificate_key /root/ssl/ddns.leiyanhui.com.key; #privkey.pem
ssl_verify_client off;
server_tokens off;
root /usr/share/nginx/html;
}
#真实主机
server {
listen 10011 ssl;
server_name office.ddns.leiyanhui.com;
server_tokens off;
root /usr/share/nginx/html;
# 证书位置
ssl_certificate /root/ssl/ddns.leiyanhui.com.cer; # fullchain.pem
ssl_certificate_key /root/ssl/ddns.leiyanhui.com.key; #privkey.pem
ssl_verify_client off;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=1209600; includeSubDomains" always;
add_header X-Content-Type-Options nosniff;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
}
}
|
另外找到 nginx.conf 的 ssl_session_cache shared:SSL:2m;
注释掉
重载nginx nginx -s reload
测试
打开网站 https://office.ddns.leiyanhui.com:10011/ 没问题了,在cloudreve 后台面板中 图像预览中配置
https://office.ddns.leiyanhui.com:10011/hosting/discovery
打开office文档测试
注意和Collabora Online (LibreOffice Online)不同的地方。onlyoffice 对 doc xsl ppt 旧版格式 是不支持的,这个困扰我好久,最后在 cloudreve作者的提醒下 才知道,必须用 docx xslx pptx
限制只能自己使用
因为onlyoffice 没有验证功能,所以任何人知道你接口地址 后 都可以访问你。那么就会导致 很容易超过20个文件的限制。而且自己资源被别人白嫖你心理也不爽。
初步解决方案
前面 nginx 配置的 server_name 的 域名弄一个复杂的子域名 ,例如上例中的 office.ddns.leiyanhui.com
修改成 office-ankN35wvy5owLv-3JtR8cCguagRct.ddns.leiyanhui.com
如果要这样做,这个子域名 必须是泛域名的一个下级域名,dns解析记录里面 不应该有他。
比如,我的*.ddns.leiyanhui.com cname 到ddns.leiyanhui.com,ddns.leiyanhui.com 配置了ddns。这样几乎没有被扫到可能性。
然后分享预览,最好也关闭。不然依旧会暴露。
限制referers
前面的
1
2
3
4
| location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
}
|
修改为
1
2
3
4
5
6
7
|
location / {
valid_referers none blocked 调用域名.com onlyoffice的域名.com;
if ($invalid_referer) {return 403;}
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
}
|
同时把 cloudreve和onlyoffice 的地址添加进去即可
限制wopisrc
在前面的 location / 再添加一段
1
2
3
4
5
6
| location /hosting/wopi {
if ( $args ~ wopisrc=https%3A%2F%2F你的域名.com%3A ) {
proxy_pass http://127.0.0.1:8080;
}
proxy_http_version 1.1;
}
|
%3A 是冒号转义符 后面跟的端口号,如果你的没有记得删除%3A。