前言:
本文为在使用Nextcloud作为文档管理系统,CollaboraOnline作为office文件编辑器。并且https部署时的流程和遇到的bug整理与总结。
本文中使用
nextcloud.com作为Nextcloud域名,
collabora.com作为Collabora域名,
mydoc.com作为iframe嵌套网页域名。
部分隐私内容不做展示。
Collabora Online
-
下载镜像
docker pull collabora/code
-
容器部署
docker run -t -d -p 127.0.0.1:9980:9980 -e "domain=<your-dot-escaped-domain>" \ -e "username=admin" -e "password=xxx" --restart always --cap-add MKNOD collabora/code
填写目标服务器主机名,若你的nextcloud域名为 www.nextcloud.com 则 填写 www\.nextcloud\.com 需要使用 \ 转义
-
https与证书配置
在容器中取出coolwsd.xml 配置文件
docker cp 70af7d73d1b3:/etc/coolwsd/coolwsd.xml coolwsd.xml
在其中修改如下部分
其中 cert_file_path ,key_file_path , ca_file_path 放入ssl证书文件
enable与termination两项配置https,默认为https不用修改,但若使用http则修改enable为false
修改后再cp回去
docker cp coolwsd.xml 70af7d73d1b3:/etc/coolwsd/coolwsd.xml
注意,复制出来的文件存在权限问题,直接复制回去可能导致docker无法使用
chmod 777 coolwsd.xml
-
nginx配置
下面使用
collabora.com代替collabora域名server { listen 443 ssl; server_name collabora.com; ssl_certificate /etc/nginx/cert_2/collabora.com.pem; ssl_certificate_key /etc/nginx/cert_2/collabora.com.key; location / { proxy_set_header X-Real-IP $remote_addr; proxy_pass https://127.0.0.1:9980; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; client_max_body_size 4096m; } # 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; } }
-
服务器后台
部署成功后进入后台验证
进入的用户名与密码对应部署容器时使用的admin与password
NextCloud
-
下载镜像
docker pull nextcloud:25.0
26以上的版本貌似不适配服务器,curl会失效
-
容器部署
docker run -it --dns=114.114.114.114 -d --name nextcloud -v nextcloud_c:/var/www/html -p 8080:80 nextcloud:25.0
注意容器挂载位置,新版本到旧版本无法兼容,需要换位置挂载
-
初始化
配置管理员账号,以及数据库
-
配置config.php
注意框着的位置配置,将nextcloud配置为https,并且设置office wopi通道(collabora.com )
若没有进行这一步设置会出现即使是通过https+域名访问nextcloud系统,在设置中启用Collabora Online,绿色√,右上角也会出现
Saved with error: Collabora Online should expose the same protocol as the server installation. Please check the ssl.enable and ssl.termination settings of your Collabora Online server.
协议不同的错误。原因就是nextcloud内部使用的还是http,只是通过代理实现了https。
这里与Collabora Online的coolwsd.xml配置相同,需要cp出来编辑,也需要修改权限再cp回去
-
nginx配置
server { listen 443 ssl; server_name nextcloud.com; ssl_certificate /etc/nginx/cert_1/nextcloud.com.pem; ssl_certificate_key /etc/nginx/cert_1/nextcloud.com.key; ssl_session_timeout 5m; ssl_ciphers <算法不做展示>; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://内网连接ip:8080; #X-Frame-Options:ALLOW-FROM origin; add_header X-Frame-Options "ALLOW-FROM https://mydoc.com"; client_max_body_size 4096m; } location /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; } location /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; } }
-
应用 Collabora Online
下载 NextCloudOfiice插件
在管理设置>办公套件(NextOffice) 中配置好Collabora服务器
若 save后,没有报错并且√,则部署成功。否则观察日志排错
参考官方论坛文章(大部分问题都有提及,根据这个来部署会少踩很多坑)
https://help.nextcloud.com/t/collabora-integration/151879
验证两个容器间是否curl互通等等
在此引出先前使用27.0(或者26.0)版本nextcloud ,可能是服务器系统版本问题,在nextcloud容器内无法进行域名解析,curl Collabora 服务器一直报
curl error 6: getaddrinfo() thread failed to start
换了25 版本后成功curl通。
iFrame嵌套NextCloud并使用Collabora Online
因为在项目中,需求在iframe中嵌套nextcloud并使用Collabora Online,出现了一些iframe请求头,csp策略等问题,直接使用iframe嵌套无法顺利使用,需要进行部分配置
-
NextCloud配置
在25.0版本中,使用nginx直接配置
add_header X-Frame-Options
无法解决iframe出现
Refused to frame 'nextcloud网站名' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self'".
csp策略问题,网上搜索后发现需要修改源码,位置如下
/var/www/html/lib/public/AppFramework/Http/ContentSecurityPolicy.php
需要修改其中两项,添加需要嵌套iframe的域名
配置内容为需要嵌套iframe的域名mydoc.com
其中前一项单独配置貌似无用
-
Collabora Online配置
在nextcloud可以被iframe访问后,Collabora Online又出现相同问题,csp策略。
需要修改 Collabora Online 配置文件 coolwsd.xml
在其两项中添加需要嵌套iframe的域名(mydoc.com,不是nextcloud的域名)
其他
-
Custom CSS
该插件可以使用自定义的css覆盖在每个页面,可以用来配置系统的部分内容隐藏不可见(配置页面在,管理设置->主题)
如,隐藏左上角图标
/*左上菜单栏->动态*/ #header>div>nav>ul>li[data-app-id="activity"]{ display: none; }
-
新用户初始化配置
新建用户可以配置语言,默认文件模板等,在config.php内配置
前一项为 配置模板目录,若为空则无模板后两项为配置的地区与语言