diff --git a/bin/install-federated.sh b/bin/install-federated.sh index 958fa78..71b7552 100755 --- a/bin/install-federated.sh +++ b/bin/install-federated.sh @@ -61,6 +61,7 @@ get_config() { . /federated/lib/panel.sh . /federated/lib/proxy.sh . /federated/lib/wireguard.sh + . /federated/lib/connector.sh echo -ne "\nFederated Stack install script\n\n" read -p '* Enter domain name (domain.com): ' DOMAIN @@ -91,13 +92,26 @@ check_ports config_network # Configure and start each federated service -for i in dns postgresql ldap mail collabora proxy nextcloud matrix element listmonk vaultwarden panel wireguard jitsi; do +for i in postgresql ldap mail collabora proxy nextcloud matrix element listmonk vaultwarden panel wireguard jitsi connector; do config_$i start_$i done -# Print out fstack environment details -echo -ne "\n\nInstall completed successfully.\n\n" -echo -ne "Certificates at apps/dns/data/etc/letsencrypt/archive/$DOMAIN\n" -echo -ne "Webmail is at http://www.$DOMAIN:9002\n" -echo -ne "Login user: admin Password: Provided at start\n" +# Print out federated environment details +cat << EOF +* The services are at these hostnames.. +mail.$DOMAIN +www.$DOMAIN +panel.$DOMAIN +nextcloud.$DOMAIN +jitsi.$DOMAIN +element.$DOMAIN +listmonk.$DOMAIN +vaultwarden.$DOMAIN +vpn.$DOMAIN +connector.$DOMAIN + +* Your VPN Wireguard configuration is.. +EOF + +cat /federated/apps/wireguard/data/config/peer1/peer1.conf diff --git a/bin/start.sh b/bin/start.sh index e362d76..38aeb8e 100755 --- a/bin/start.sh +++ b/bin/start.sh @@ -3,7 +3,7 @@ # Federated Start Script usage() { - echo "$0: all|dns|postgresql|ldap|mail|collabora|nextcloud|matrix|jitsi|listmonk|vaultwarden|panel|proxy|wireguard" + echo "$0: all|dns|postgresql|ldap|mail|collabora|nextcloud|matrix|jitsi|listmonk|vaultwarden|panel|proxy|wireguard|connector" exit 2 } startservice() { @@ -11,7 +11,7 @@ startservice() { cd /federated/apps/$SERVICE && docker-compose -f docker-compose.yml -p $SERVICE up -d } startservice_all() { - for i in dns postgresql ldap mail collabora nextcloud matrix jitsi listmonk vaultwarden panel proxy wireguard; do + for i in dns postgresql ldap mail collabora nextcloud matrix jitsi listmonk vaultwarden panel proxy wireguard connector; do echo "* Starting $i.." cd /federated/apps/$i && docker-compose -f docker-compose.yml -p $i up -d done @@ -22,6 +22,6 @@ SERVICE=$1 case "$SERVICE" in all) startservice_all;; - dns|postgresql|ldap|mail|collabora|nextcloud|matrix|jitsi|listmonk|vaultwarden|panel|proxy|wireguard) startservice;; + dns|postgresql|ldap|mail|collabora|nextcloud|matrix|jitsi|listmonk|vaultwarden|panel|proxy|wireguard|connector) startservice;; *) usage;; esac diff --git a/bin/stop.sh b/bin/stop.sh index bdc63e1..0ee45a6 100755 --- a/bin/stop.sh +++ b/bin/stop.sh @@ -3,7 +3,7 @@ # Federated Stop Script usage() { - echo "$0: all|dns|postgresql|ldap|mail|collabora|nextcloud|matrix|jitsi|listmonk|vaultwarden|panel|proxy|wireguard" + echo "$0: all|dns|postgresql|ldap|mail|collabora|nextcloud|matrix|jitsi|listmonk|vaultwarden|panel|proxy|wireguard|connector" exit 2 } stopservice() { @@ -11,7 +11,7 @@ stopservice() { cd /federated/apps/$SERVICE && docker-compose -f docker-compose.yml -p $SERVICE down } stopservice_all() { - for i in dns postgresql ldap mail collabora nextcloud matrix jitsi listmonk vaultwarden panel proxy wireguard; do + for i in dns postgresql ldap mail collabora nextcloud matrix jitsi listmonk vaultwarden panel proxy wireguard connector; do echo "* Stopping $i.." cd /federated/apps/$i && docker-compose -f docker-compose.yml -p $i down done @@ -22,6 +22,6 @@ SERVICE=$1 case "$SERVICE" in all) stopservice_all;; - dns|postgresql|ldap|mail|collabora|nextcloud|matrix|jitsi|listmonk|vaultwarden|panel|proxy|wireguard) stopservice;; + dns|postgresql|ldap|mail|collabora|nextcloud|matrix|jitsi|listmonk|vaultwarden|panel|proxy|wireguard|connector) stopservice;; *) usage;; esac diff --git a/lib/connector.sh b/lib/connector.sh new file mode 100644 index 0000000..84a6b48 --- /dev/null +++ b/lib/connector.sh @@ -0,0 +1,94 @@ +#!/bin/bash +# +# Connector Service + +PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +config_connector() { + echo -ne "\n* Configuring /federated/apps/connector container.." + spin & + SPINPID=$! + + if [ ! -d "/federated/apps/connector" ]; then + mkdir -p /federated/apps/connector/data/source/public/downloads + fi + + DOMAIN_ARRAY=(${DOMAIN//./ }) + DOMAIN_FIRST=${DOMAIN_ARRAY[0]} + DOMAIN_LAST=${DOMAIN_ARRAY[1]} + +cat > /federated/apps/connector/docker-compose.yml < /federated/apps/connector/.env < /dev/null +echo -ne "done." +} + +start_connector() { + # Start /federated/apps/connector with output to /dev/null + echo -ne "\n* Starting /federated/apps/connector service.." + spin & + SPINPID=$! + + if [ $DEBUG ]; then + # Start /federated/apps/connector with output to console for debug + docker-compose -f /federated/apps/connector/docker-compose.yml -p connector up + [ $? -eq 0 ] && echo -ne "done.\n" || fail "There was a problem starting service /federated/apps/connector" + else + docker-compose -f /federated/apps/connector/docker-compose.yml -p connector up -d &> /dev/null + + # Keep trying connector port 80 to make sure it's up + # before we proceed + RETRY="30" + while [ $RETRY -gt 0 ]; do + nc -z 172.99.0.27 3000 &> /dev/null + if [ $? -eq 0 ]; then + break + else + if [ "$RETRY" == 1 ]; then + docker-compose -f /federated/apps/connector/docker-compose.yml -p connector down &> /dev/null + kill -9 $SPINPID &> /dev/null + fail "There was a problem starting service /federated/apps/connector\nCheck the output of 'docker logs connector' or turn on\ndebug with -d" + fi + ((RETRY--)) + sleep 7 + fi + done + fi + + kill -9 $SPINPID &> /dev/null + echo -ne "done." +} diff --git a/lib/dns.sh b/lib/dns.sh index 3dea556..f3f4f86 100644 --- a/lib/dns.sh +++ b/lib/dns.sh @@ -15,7 +15,7 @@ config_dns() { mkdir -p /federated/apps/dns/data/etc/bind/zones mkdir -p /federated/apps/dns/data/var/log/letsencrypt -cat > /federated/apps/dns/docker-compose.yml <<'EOF' +cat > /federated/apps/dns/docker-compose.yml < /dev/null + + # Keep trying service port to make sure it's up before + # we proceed + RETRY="30" + while [ $RETRY -gt 0 ]; do + nc -z 172.99.0.19 9000 &> /dev/null + if [ $? -eq 0 ]; then + break + else + if [ "$RETRY" == 1 ]; then + docker-compose -f /federated/apps/$SERVICE/docker-compose.yml -p $SERVICE down &> /dev/null + kill -9 $SPINPID &> /dev/null + fail "There was a problem starting service /federated/apps/$SERVICE\nCheck the output of 'docker logs $SERVICE' or turn on\ndebug with -d" + fi + ((RETRY--)) + sleep 7 + fi + done + fi +} diff --git a/lib/jitsi.sh b/lib/jitsi.sh index d2cac9a..89b55e1 100644 --- a/lib/jitsi.sh +++ b/lib/jitsi.sh @@ -630,7 +630,7 @@ start_jitsi() { # before we proceed RETRY="30" while [ $RETRY -gt 0 ]; do - nc -z 172.99.0.25 443 &> /dev/null + nc -z 172.99.0.23 443 &> /dev/null if [ $? -eq 0 ]; then break else diff --git a/lib/matrix.sh b/lib/matrix.sh index f56ac08..ea1e2ee 100644 --- a/lib/matrix.sh +++ b/lib/matrix.sh @@ -90,7 +90,6 @@ modules: local_certificate_file: /data/fullchain1.pem local_private_key_file: /data/privkey1.pem EOF -chmod 600 /federated/apps/matrix/data/matrix/homeserver.yaml kill -9 $SPINPID &> /dev/null echo -ne "done." diff --git a/lib/nextcloud.sh b/lib/nextcloud.sh index 53b14c4..1122b2f 100644 --- a/lib/nextcloud.sh +++ b/lib/nextcloud.sh @@ -160,6 +160,7 @@ PATH=/var/www/html:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/sbin:/bin ./occ ldap:set-config s01 turnOnPasswordChange 0 ./occ ldap:set-config s01 useMemberOfToDetectMembership 1 ./occ ldap:set-config s01 ldapConfigurationActive 1 +./occ config:system:set overwriteprotocol --value=https ./occ config:system:delete trusted_domains ./occ config:system:set trusted_domains 1 --value=* ADMINUUID=\`./occ user:list | grep admin | awk '{ print \$2 }' | awk -F: '{ print \$1 }'\` diff --git a/lib/postgresql.sh b/lib/postgresql.sh index 254ffa4..ecdd609 100644 --- a/lib/postgresql.sh +++ b/lib/postgresql.sh @@ -26,7 +26,7 @@ version: "3.7" services: postgresql: - image: postgres:${IMAGE_VERSION} + image: postgres:\${IMAGE_VERSION} container_name: postgresql hostname: postgresql.$DOMAIN domainname: $DOMAIN