Nextcloud 나 ownCloud 에서 문서를 열 때 "WOPI 요청에 대한 허용 목록이 설정되지 않았습니다" 가 나오는 것은 Collabora Online 이 자기에게 문서를 요청한 호스트를 신뢰 목록에서 찾지 못한 상태다. WOPI 는 저장소(Nextcloud)와 편집기(Collabora) 사이의 규약이고, Collabora 는 아무 호스트에게나 문서를 내주지 않도록 허용 목록을 두고 있다.
현행 CODE 이미지는 aliasgroup1 환경 변수로 허용할 저장소 주소를 받는다. 값은 정규식이므로 점을 \. 로 이스케이프한다.
docker run -t -d -p 9980:9980 \
-e "aliasgroup1=https://nextcloud\.example\.com:443" \
-e "extra_params=--o:ssl.enable=false --o:ssl.termination=true" \
--cap-add MKNOD --restart always \
collabora/code
Compose 로는 이렇게 쓴다.
services:
collabora:
image: collabora/code
environment:
- aliasgroup1=https://nextcloud\.example\.com:443
- extra_params=--o:ssl.enable=false --o:ssl.termination=true
cap_add:
- MKNOD
ports:
- "9980:9980"
여러 저장소를 허용하려면 aliasgroup2 · aliasgroup3 으로 번호를 늘린다. 한 그룹 안에서 여러 주소를 묶을 때는 | 로 잇는다.
domain 환경 변수를 쓰라는 옛 안내가 아직 많이 보인다. 21.11 이후 이미지에서는 aliasgroup 으로 대체됐고, 두 방식을 섞으면 의도한 대로 동작하지 않는다.
리버스 프록시 뒤에 두어 TLS 를 프록시가 끊는 구성이라면 ssl.enable=false 와 ssl.termination=true 를 함께 준다. 하나만 주면 Collabora 가 스스로 HTTPS 를 시도하거나 반대로 프로토콜을 잘못 판단한다.
설정 파일에서 직접 허용한다. 파일 이름은 버전에 따라 다르다 — 22.05 부터 loolwsd 계열 이름이 coolwsd 로 바뀌었다.
sudo vi /etc/coolwsd/coolwsd.xml # 구버전은 /etc/loolwsd/loolwsd.xml
<storage>
<wopi desc="Allowed WOPI hosts" allow="true">
<alias_groups desc="WOPI host aliases" mode="groups">
<group>
<host desc="Nextcloud" allow="true">https://nextcloud\.example\.com:443</host>
</group>
</alias_groups>
</wopi>
</storage>
sudo systemctl restart coolwsd
sudo journalctl -u coolwsd -n 100 --no-pager
Nextcloud 의 Collabora 앱 설정에 등록한 서버 주소가 실제로 Collabora 에 닿는 주소여야 하고, 그 주소가 위에서 허용한 값과 프로토콜·포트까지 일치해야 한다.
sudo -u www-data php occ config:app:get richdocuments wopi_url
sudo -u www-data php occ richdocuments:activate-config
허용 목록에 넣은 주소는 Collabora 가 Nextcloud 를 부를 때 쓰는 주소다. 두 서비스가 같은 도커 네트워크 안에 있고 내부 이름으로 통신한다면 그 내부 이름도 함께 허용해야 한다.
방화벽에서 9980/TCP 가 열려 있는지, 프록시가 WebSocket 업그레이드를 막지 않는지도 함께 본다.
sudo ufw allow 9980/tcp
docker logs collabora 2>&1 | tail -50