lxc alpine下使用cloudreve 和 onlyoffice 的配置 包括onlyoffice的配置

因为对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
http://10.1.1.84:8080

群友的,可以参考

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。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计