我以前文章「超簡單安裝collabora online」敘述如何讓nextcloud搭配online document server達到線上編輯功能 ; 後來發現Onlyoffice 更好用, 版面格式比較不會跑掉,就變心改用onlyoffice。
隨著公司越來越多人使用onlyoffice ,沒想到onlyoffice免費版有10人開啟檔案的上限,預算考量,只能另想辦法。
我回過頭來看collabora online , 雖是免費,但官方編譯一樣有20人數限制;照這樣子應該真的要去拍桌,跟老闆說要加錢購買onlyoffice。
可是偶然間發現有個群組, 協助編譯開源版collabora online,並且解除20人限制, 甚至編譯成 docker 版本, 真是佛心來的。
以下請參考github與docker網站:
https://github.com/tiredofit/docker-collabora-online
https://hub.docker.com/r/tiredofit/collabora-online/tags
官方文件很少。但不囉嗦, 我測試後直接寫如何安裝。
- compose 文件
wget https://github.com/tiredofit/docker-collabora-online/raw/master/examples/docker-compose.yml
mv docker-compose.yml.traefik docker-compose.yml
vi docker-compose.yml
#改成醬
#紅色字需要修改
version: '3.7'
services:
collabora-online-app:
image: tiredofit/collabora-online:2.4.17
container_name: collabora-online-app
hostname: collabora-online.test.com
expose:
- 9980
ports:
- "9980:9980"
cap_add:
- MKNOD
- NET_ADMIN
privileged: true
labels:
- traefik.enable=true
- traefik.frontend.rule=Host:collabora-online.test.com
- traefik.port=9980
- traefik.protocol=http
- traefik.docker.network=proxy
- traefik.backend=collabora-online-app
volumes:
- ./logs:/logs
environment:
- CONTAINER_NAME=collabora-online-app
- ADMIN_USER=admin
- ADMIN_PASS=collabora-online
# 允許哪些網站存取
- ALLOWED_HOSTS=cloud.test.com,xxx.test.com
- ENABLE_TLS=FALSE
- ENABLE_TLS_REVERSE_PROXY=TRUE
restart: always
#2023/6/14
#2.4.17這版本pdf下載會出問題,因此更換2.4.34版,但是無法啟用成功,出現:
#ERROR: Cannot create container for service collabora-online-app: Conflict
#若要換新版本,需docker-compose down; docker rm collabora-online;
#修改yml檔案,改成新的版本號碼2.4.34後,再重新docker-compose up -d才能執行成功
- 反向代理(apache 2)
以下主機名稱需與compose文件相同
<VirtualHost *:443>
ServerName collabora-online.test.com:443
# SSL configuration, you may want to take the easy route instead and use Lets Encrypt!
SSLCertificateFile /etc/letsencrypt/live/collabora-online.test.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/collabora-online.test.com/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/collabora-online.test.com/fullchain.pem
SSLProtocol all -SSLv2 -SSLv3
SSLEngine on
SSLHonorCipherOrder on
AllowEncodedSlashes NoDecode
ProxyPreserveHost On
# static html, js, images, etc. served from coolwsd
# browser is the client part of Collabora Online
ProxyPass /browser http://127.0.0.1:9980/browser retry=0
ProxyPassReverse /browser http://127.0.0.1:9980/browser
# WOPI discovery URL
ProxyPass /hosting/discovery http://127.0.0.1:9980/hosting/discovery retry=0
ProxyPassReverse /hosting/discovery http://127.0.0.1:9980/hosting/discovery
# Capabilities
ProxyPass /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities retry=0
ProxyPassReverse /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities
# Main websocket
ProxyPassMatch "/cool/(.*)/ws$" ws://127.0.0.1:9980/cool/$1/ws nocanon
# Admin Console websocket
ProxyPass /cool/adminws ws://127.0.0.1:9980/cool/adminws
# Download as, Fullscreen presentation and Image upload operations
ProxyPass /cool http://127.0.0.1:9980/cool
ProxyPassReverse /cool http://127.0.0.1:9980/cool
# Compatibility with integrations that use the /lool/convert-to endpoint
ProxyPass /lool http://127.0.0.1:9980/cool
ProxyPassReverse /lool http://127.0.0.1:9980/cool
</VirtualHost>
- 反向代理(nginx)
server { listen 443 ssl; server_name collaboraonline.example.com; ssl_certificate /path/to/certificate; ssl_certificate_key /path/to/key; # static files location ^~ /browser { proxy_pass http://127.0.0.1:9980; proxy_set_header Host $http_host; } # WOPI discovery URL location ^~ /hosting/discovery { proxy_pass http://127.0.0.1:9980; proxy_set_header Host $http_host; } # Capabilities location ^~ /hosting/capabilities { proxy_pass http://127.0.0.1:9980; proxy_set_header Host $http_host; } # main websocket location ~ ^/cool/(.*)/ws$ { proxy_pass http://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 http://127.0.0.1:9980; proxy_set_header Host $http_host; } # Admin Console websocket location ^~ /cool/adminws { proxy_pass http://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; } }
- nextcloud 設定
要安裝Collabora Online
設定URL,以後開檔案將導入到 Collabora Online-server 達到線上作業功能
完成了
- 檢查運行狀況
需輸入compose上面的管理者帳號與密碼
https://collabora-online.test.com/browser/dist/admin/admin.html
- 上傳字型,需要登入到容器,加上額外字型的設定
docker exec -it <容器名稱> bash
vi etc/coolwsd/coolwsd.xml
<remote_font_config>
<url desc="URL of optional JSON file that lists fonts to be included in Online" type="string" default="">https://cloud.test.com/apps/richdocuments/settings/fonts.json</url>
</remote_font_config>
- 若nextcloud安裝pdf viewer 請停用,否則會衝突
- 唯讀請設定浮水印
這很重要,若公司被稽核,稽核員通常要求只能線上看ISO文件、程序書,且考慮版本無法管控,預設不可以下載
另外要設定安全機制WOPI,一樣是修改 coolwsd,只允許相關ip才能存取
docker exec -it <容器名稱> bash
vi etc/coolwsd/coolwsd.xml
#########################################################
<alias_groups desc="xxxxxx" mode="groups">
<group><host desc="hostname to allow or deny." allow="true">192.168.1.1</host></group>
<group><host desc="hostname to allow or deny." allow="true">cloud.test.com</host></group>
</alias_groups>