forked from 0k/0k-charms
Valentin Lab
1 year ago
6 changed files with 182 additions and 0 deletions
-
3collabora/README.org
-
25collabora/hooks/init
-
55collabora/hooks/post_deploy
-
29collabora/hooks/web_proxy-relation-joined
-
3collabora/lib/common
-
67collabora/metadata.yml
@ -0,0 +1,3 @@ |
|||||
|
# -*- ispell-local-dictionary: "english" -*- |
||||
|
|
||||
|
|
@ -0,0 +1,25 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
## Init is run on host |
||||
|
## For now it is run every time the script is launched, but |
||||
|
## it should be launched only once after build. |
||||
|
|
||||
|
## Accessible variables are: |
||||
|
## - SERVICE_NAME Name of current service |
||||
|
## - DOCKER_BASE_IMAGE Base image from which this service might be built if any |
||||
|
## - SERVICE_DATASTORE Location on host of the DATASTORE of this service |
||||
|
## - SERVICE_CONFIGSTORE Location on host of the CONFIGSTORE of this service |
||||
|
|
||||
|
|
||||
|
set -e |
||||
|
|
||||
|
version_gt() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; } |
||||
|
|
||||
|
## bug: https://github.com/adoptium/containers/issues/215#issuecomment-1142046045 |
||||
|
docker_version=$(docker info --format '{{.ServerVersion}}') |
||||
|
if ! version_gt "$docker_version" 20.10.0; then |
||||
|
err "Sorry, $SERVICE_NAME require docker version >= 20.10 (current: $docker_version)" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
|
@ -0,0 +1,55 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
set -e |
||||
|
|
||||
|
|
||||
|
# if ! nextcloud_domain=$(relation:get "$MASTER_TARGET_SERVICE_NAME":web-proxy domain) || [ -z "$nextcloud_domain" ]; then |
||||
|
# ## No domain, probably no web-proxy then. |
||||
|
|
||||
|
# container=$(get_running_containers_for_service "$MASTER_TARGET_SERVICE_NAME" | head -n 1) |
||||
|
# container_network_ip=$(get_docker_ip "$container") |
||||
|
# container_ip=${container_network_ip#*:} |
||||
|
|
||||
|
# nextcloud_domain="${container_ip}:80" |
||||
|
# fi |
||||
|
|
||||
|
if ! nextcloud_app_service=$(service:traverse "$MASTER_BASE_SERVICE_NAME":nextcloud-app); then |
||||
|
err "Couldn't find service for"\ |
||||
|
"${DARKYELLOW}$MASTER_BASE_SERVICE_NAME${NORMAL}--${DARKCYAN}nextcloud-app${NORMAL}--> ?" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if ! collabora_domain=$(relation:get "$MASTER_BASE_SERVICE_NAME":web-proxy url) || [ -z "$collabora_domain" ]; then |
||||
|
## No domain, probably no web-proxy then. |
||||
|
|
||||
|
# container=$(get_running_containers_for_service "$MASTER_BASE_SERVICE_NAME" | head -n 1) |
||||
|
# container_network_ip=$(get_docker_ip "$container") |
||||
|
# container_ip=${container_network_ip#*:} |
||||
|
|
||||
|
collabora_domain="$SERVICE_NAME:9980" |
||||
|
fi |
||||
|
|
||||
|
info "collabora_domain: '$collabora_domain'" |
||||
|
|
||||
|
if ! get_healthy_container_ip_for_service "$SERVICE_NAME" 9980; then |
||||
|
exit 17 |
||||
|
fi |
||||
|
|
||||
|
|
||||
|
## XXXvlab: we really need to have a state based cache thingy, because |
||||
|
## setting the same password each time is really time consumming. |
||||
|
compose --no-relations --no-init \ |
||||
|
occ "$nextcloud_app_service" \ |
||||
|
app:install richdocuments \; \ |
||||
|
config:app:set --value="${collabora_domain}" richdocuments wopi_url \; \ |
||||
|
richdocuments:activate-config |
||||
|
|
||||
|
|
||||
|
# nextcloud_domain="${nextcloud_domain//./\\.}" |
||||
|
|
||||
|
# config-add "\ |
||||
|
# services: |
||||
|
# $MASTER_BASE_SERVICE_NAME: |
||||
|
# environment: |
||||
|
# domain: \"${nextcloud_domain}\" |
||||
|
# " |
@ -0,0 +1,29 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
set -e |
||||
|
|
||||
|
URL=$(relation-get url) || exit 1 |
||||
|
PROTO="${URL%%://*}" |
||||
|
|
||||
|
ssl_enable=true |
||||
|
case "$PROTO" in |
||||
|
http) |
||||
|
ssl_enable=false |
||||
|
;; |
||||
|
https) |
||||
|
ssl_enable=true |
||||
|
;; |
||||
|
*) |
||||
|
err "Invalid protocol '$PROTO'." |
||||
|
exit 1 |
||||
|
;; |
||||
|
esac |
||||
|
|
||||
|
|
||||
|
config-add "\ |
||||
|
services: |
||||
|
$MASTER_BASE_SERVICE_NAME: |
||||
|
environment: |
||||
|
server_name: \"$URL\" |
||||
|
extra_params: \"--o:ssl.enable=false --o:ssl.termination=${ssl_enable} \" |
||||
|
" |
@ -0,0 +1,3 @@ |
|||||
|
# -*- mode: shell-script -*- |
||||
|
|
||||
|
|
@ -0,0 +1,67 @@ |
|||||
|
# from: collabora/code:23.05.3.1.1 |
||||
|
docker-image: docker.0k.io/collabora:2305.3.1 |
||||
|
|
||||
|
docker-compose: |
||||
|
cap_add: |
||||
|
- MKNOD |
||||
|
|
||||
|
|
||||
|
uses: |
||||
|
nextcloud-app: |
||||
|
#constraint: required | recommended | optional |
||||
|
#auto: pair | summon | none ## default: pair |
||||
|
constraint: required |
||||
|
auto: pair |
||||
|
solves: |
||||
|
server: "document server" |
||||
|
|
||||
|
web-proxy: |
||||
|
#constraint: required | recommended | optional |
||||
|
#auto: pair | summon | none ## default: pair |
||||
|
constraint: required |
||||
|
auto: summon |
||||
|
solves: |
||||
|
proxy: "Public access" |
||||
|
default-options: |
||||
|
target: !var-expand ${MASTER_BASE_SERVICE_NAME}:9980 |
||||
|
apache-custom-rules: |
||||
|
- !var-expand | |
||||
|
# From: https://help.nextcloud.com/t/how-to-install-collabora-in-docker-with-nextcloud-23/133730 |
||||
|
# Encoded slashes need to be allowed |
||||
|
AllowEncodedSlashes NoDecode |
||||
|
|
||||
|
# Container uses a unique non-signed certificate |
||||
|
# SSLProxyEngine On |
||||
|
# SSLProxyVerify None |
||||
|
# SSLProxyCheckPeerCN Off |
||||
|
# SSLProxyCheckPeerName Off |
||||
|
|
||||
|
# keep the host |
||||
|
ProxyPreserveHost On |
||||
|
|
||||
|
# static html, js, images, etc. served from coolwsd |
||||
|
# browser is the client part of Collabora Online |
||||
|
ProxyPass /browser http://${MASTER_BASE_SERVICE_NAME}:9980/browser retry=0 |
||||
|
ProxyPassReverse /browser http://${MASTER_BASE_SERVICE_NAME}:9980/browser |
||||
|
|
||||
|
# WOPI discovery URL |
||||
|
ProxyPass /hosting/discovery http://${MASTER_BASE_SERVICE_NAME}:9980/hosting/discovery retry=0 |
||||
|
ProxyPassReverse /hosting/discovery http://${MASTER_BASE_SERVICE_NAME}:9980/hosting/discovery |
||||
|
|
||||
|
# Capabilities |
||||
|
ProxyPass /hosting/capabilities http://${MASTER_BASE_SERVICE_NAME}:9980/hosting/capabilities retry=0 |
||||
|
ProxyPassReverse /hosting/capabilities http://${MASTER_BASE_SERVICE_NAME}:9980/hosting/capabilities |
||||
|
|
||||
|
# Main websocket |
||||
|
ProxyPassMatch "/cool/(.*)/ws$" ws://${MASTER_BASE_SERVICE_NAME}:9980/cool/\$1/ws nocanon |
||||
|
|
||||
|
# Admin Console websocket |
||||
|
ProxyPass /cool/adminws ws://${MASTER_BASE_SERVICE_NAME}:9980/cool/adminws |
||||
|
|
||||
|
# Download as, Fullscreen presentation and Image upload operations |
||||
|
ProxyPass /cool http://${MASTER_BASE_SERVICE_NAME}:9980/cool |
||||
|
ProxyPassReverse /cool http://${MASTER_BASE_SERVICE_NAME}:9980/cool |
||||
|
|
||||
|
# Compatibility with integrations that use the /lool/convert-to endpoint |
||||
|
ProxyPass /lool http://${MASTER_BASE_SERVICE_NAME}:9980/cool |
||||
|
ProxyPassReverse /lool http://${MASTER_BASE_SERVICE_NAME}:9980/cool |
Write
Preview
Loading…
Cancel
Save
Reference in new issue