From 28a697bdfc2db74967a9a8bfc4c1fc91603db747 Mon Sep 17 00:00:00 2001 From: Derek Crudgington Date: Mon, 31 Oct 2022 13:10:08 +0000 Subject: [PATCH] Added Collabora service --- fstack/lib/checks.sh | 1 + fstack/lib/collabora.sh | 93 +++++++++++++++++++++++++++++++++++++++++ fstack/lib/dns.sh | 4 ++ fstack/lib/nextcloud.sh | 8 ++++ install-federated.sh | 5 +++ 5 files changed, 111 insertions(+) create mode 100644 fstack/lib/collabora.sh diff --git a/fstack/lib/checks.sh b/fstack/lib/checks.sh index db52a4b..dea561e 100644 --- a/fstack/lib/checks.sh +++ b/fstack/lib/checks.sh @@ -59,6 +59,7 @@ check_ports() { # Check if ss command exists if command -v ss &> /dev/null; then # Check every port we need if it's in use +# for i in 8000; do for i in 25 53 80 143 389 587 993 8000; do SS=`ss -tulwn | grep LISTEN | awk '{ print $5 }' | awk -F: '{ print $NF }' | grep "^$i$" | head -1` # If port 53 (dns) in use by system-resolvd (Ubuntu) then auto fix diff --git a/fstack/lib/collabora.sh b/fstack/lib/collabora.sh new file mode 100644 index 0000000..5c7a258 --- /dev/null +++ b/fstack/lib/collabora.sh @@ -0,0 +1,93 @@ +#!/bin/bash +# +# Federated Computer Collabora Service + +PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +config_collabora() { + echo -ne "\n* Configuring fstack/collabora container.." + spin & + SPINPID=$! + + if [ ! -d "fstack/collabora" ]; then + mkdir -p fstack/collabora/data/root/certs &> /dev/null + cp -rf fstack/dns/data/etc/letsencrypt/archive/$DOMAIN/*.pem fstack/collabora/data/root/certs/ + fi + + DOMAIN_ARRAY=(${DOMAIN//./ }) + DOMAIN_FIRST=${DOMAIN_ARRAY[0]} + DOMAIN_LAST=${DOMAIN_ARRAY[1]} + +cat > fstack/collabora/docker-compose.yml < /dev/null +echo -ne "done." +} + +start_collabora() { + # Start fstack/collabora with output to /dev/null + echo -ne "\n* Starting fstack/collabora service.." + spin & + SPINPID=$! + + if [ $DEBUG ]; then + # Start fstack/collabora with output to console for debug + docker-compose -f fstack/collabora/docker-compose.yml -p collabora up + [ $? -eq 0 ] && echo -ne "done.\n" || fail "There was a problem starting service fstack/collabora" + else + docker-compose -f fstack/collabora/docker-compose.yml -p collabora up -d &> /dev/null + + # Keep trying collabora port 9980 to make sure it's up + # before we proceed + RETRY="30" + while [ $RETRY -gt 0 ]; do + nc -z 172.99.0.20 9980 &> /dev/null + if [ $? -eq 0 ]; then + break + else + if [ "$RETRY" == 1 ]; then + docker-compose -f fstack/collabora/docker-compose.yml -p collabora down &> /dev/null + kill -9 $SPINPID &> /dev/null + fail "There was a problem starting service fstack/collabora\nCheck the output of 'docker logs collabora' or turn on\ndebug with -d" + fi + ((RETRY--)) + sleep 7 + fi + done + fi + + kill -9 $SPINPID &> /dev/null + echo -ne "done." +} diff --git a/fstack/lib/dns.sh b/fstack/lib/dns.sh index 7ddbd44..c49ddba 100644 --- a/fstack/lib/dns.sh +++ b/fstack/lib/dns.sh @@ -116,6 +116,9 @@ elif [ -e /etc/bind/.firstdone ] && [ -e /etc/bind/.failedcert ]; then fi wait -n else + # Install bind and certbot packages + apk add --no-cache bind + apk add --no-cache certbot [ ! `pgrep -x named` ] && named -f -g && crond fi EOF @@ -169,6 +172,7 @@ panel IN A $EXTERNALIP webmail IN A $EXTERNALIP nextcloud IN A $EXTERNALIP computer IN A $EXTERNALIP +collabora IN A $EXTERNALIP $DOMAIN. IN A $EXTERNALIP EOF diff --git a/fstack/lib/nextcloud.sh b/fstack/lib/nextcloud.sh index 2ba8dcc..c186391 100644 --- a/fstack/lib/nextcloud.sh +++ b/fstack/lib/nextcloud.sh @@ -57,6 +57,8 @@ services: ports: - "8000:80" - "8444:443" + extra_hosts: + - "collabora.$DOMAIN:$EXTERNALIP" volumes: - ./data/root:/root - ./data/etc/apache2/sites-enabled:/etc/apache2/sites-enabled @@ -184,12 +186,18 @@ ADMINUUID=\`./occ user:list | grep admin | awk '{ print \$2 }' | awk -F: '{ prin ./occ app:enable forms ./occ app:enable spreed ./occ mail:account:create \$ADMINUUID admin admin@$DOMAIN mail.$DOMAIN 993 ssl admin@$DOMAIN $ADMINPASS mail.$DOMAIN 465 ssl admin@$DOMAIN $ADMINPASS password +./occ app:enable richdocuments +./occ config:app:set --value https:\/\/collabora.$DOMAIN richdocuments public_wopi_url +./occ config:app:set --value https:\/\/collabora.$DOMAIN richdocuments wopi_url +./occ config:app:set --value ooxml richdocuments doc_format +./occ config:app:set --value "" richdocuments disable_certificate_verification EOF chmod +x fstack/nextcloud/data/root/*.sh cat > fstack/nextcloud/data/etc/apache2/sites-enabled/000-default.conf <<'EOF' LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so +Listen 443 ServerAdmin admin@localhost diff --git a/install-federated.sh b/install-federated.sh index 67236d6..892c0a8 100755 --- a/install-federated.sh +++ b/install-federated.sh @@ -49,6 +49,7 @@ get_config() { . fstack/lib/dns.sh . fstack/lib/ldap.sh . fstack/lib/mail.sh + . fstack/lib/collabora.sh . fstack/lib/nextcloud.sh . fstack/lib/panel.sh . fstack/lib/proxy.sh @@ -93,6 +94,10 @@ start_ldap config_mail start_mail +# Configure fstack/collabora container and start it +config_collabora +start_collabora + # Configure fstack/nextcloud container and start it config_nextcloud start_nextcloud