From 0fd744370b90d78bd86f6a20f43e6d4ce9609fd2 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Fri, 11 Nov 2022 22:30:10 +0000 Subject: [PATCH] nextcloud: works with sso and has a better setup/install script on first run --- Makefile | 3 + env.production | 1 + nextcloud.yaml | 48 +++++++++++ nextcloud/docker-compose.yaml | 36 -------- nextcloud/env.production | 1 - nextcloud/keycloak.sh | 4 + .../nginx.conf | 6 +- nextcloud/setup | 82 ------------------- nextcloud/setup.sh | 52 ++++++++++++ 9 files changed, 110 insertions(+), 123 deletions(-) create mode 100644 nextcloud.yaml delete mode 100644 nextcloud/docker-compose.yaml delete mode 100644 nextcloud/env.production create mode 100755 nextcloud/keycloak.sh rename nginx/nginx/templates/cloud.conf.template => nextcloud/nginx.conf (91%) delete mode 100755 nextcloud/setup create mode 100755 nextcloud/setup.sh diff --git a/Makefile b/Makefile index 0d7e613..2405b76 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ MODULES += grafana MODULES += prometheus MODULES += mastodon MODULES += matrix +MODULES += nextcloud #MODULES += pixelfed include env.production @@ -41,6 +42,8 @@ matrix-shell: $(DOCKER) exec matrix-synapse bash matrix-logs: $(DOCKER) logs -f matrix-synapse +nextcloud-logs: + $(DOCKER) logs -f nextcloud nginx-build: data/nginx/secrets $(DOCKER) build nginx diff --git a/env.production b/env.production index 1d807cb..3330897 100644 --- a/env.production +++ b/env.production @@ -24,3 +24,4 @@ PROMETHEUS_HOSTNAME=metrics AUTH_URL=https://${KEYCLOAK_HOSTNAME}.${DOMAIN_NAME}/realms/${REALM}/protocol/openid-connect/auth TOKEN_URL=https://${KEYCLOAK_HOSTNAME}.${DOMAIN_NAME}/realms/${REALM}/protocol/openid-connect/token USERINFO_URL=https://${KEYCLOAK_HOSTNAME}.${DOMAIN_NAME}/realms/${REALM}/protocol/openid-connect/userinfo +LOGOUT_URL=https://${KEYCLOAK_HOSTNAME}.${DOMAIN_NAME}/realms/${REALM}/protocol/openid-connect/logout diff --git a/nextcloud.yaml b/nextcloud.yaml new file mode 100644 index 0000000..9de5c77 --- /dev/null +++ b/nextcloud.yaml @@ -0,0 +1,48 @@ +version: "3" + +services: + nextcloud-db: + image: postgres:13.4-alpine + container_name: nextcloud-db + restart: always + environment: + - POSTGRES_USER=nextcloud + - POSTGRES_PASSWORD=nextcloud + - POSTGRES_DB=nextcloud + volumes: + - ./data/nextcloud/database:/var/lib/postgresql/data + + nextcloud: + image: nextcloud:25.0.1-apache + container_name: nextcloud + restart: always + env_file: + - env.production + environment: + POSTGRES_HOST: nextcloud-db + POSTGRES_DB: nextcloud + POSTGRES_USER: nextcloud + POSTGRES_PASSWORD: nextcloud + OVERWRITEPROTOCOL: https + NEXTCLOUD_ADMIN_USER: admin + NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD} + NEXTCLOUD_CLIENT_SECRET: ${NEXTCLOUD_CLIENT_SECRET} + NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_HOSTNAME}.${DOMAIN_NAME} + volumes: + - ./data/nextcloud/nextcloud:/var/www/html + - ./nextcloud/setup.sh:/setup.sh:ro + depends_on: + - nextcloud-db + entrypoint: ["/setup.sh"] + + # add the nginx configuration into the nginx volume + nginx: + volumes: + - ./nextcloud/nginx.conf:/etc/nginx/templates/nextcloud.conf.template:ro + + # add the grafana client secrets to the keycloak-setup volume + keycloak-setup: + env_file: + - data/nextcloud/secrets + volumes: + - ./nextcloud/keycloak.sh:/keycloak-setup/nextcloud.sh:ro diff --git a/nextcloud/docker-compose.yaml b/nextcloud/docker-compose.yaml deleted file mode 100644 index cf80a5a..0000000 --- a/nextcloud/docker-compose.yaml +++ /dev/null @@ -1,36 +0,0 @@ -version: "3" - -services: - database: - image: postgres:13.4-alpine - restart: always - environment: - - POSTGRES_USER=nextcloud - - POSTGRES_PASSWORD=nextcloud - - POSTGRES_DB=nextcloud - volumes: - - ../data/nextcloud/database:/var/lib/postgresql/data - - nextcloud: - image: nextcloud:23.0.4 - restart: always - ports: - - 9000:80 - env_file: - - ../env.production - - env.production - - ../data/nextcloud/env.secrets - environment: - POSTGRES_HOST: database - POSTGRES_DB: nextcloud - POSTGRES_USER: nextcloud - POSTGRES_PASSWORD: nextcloud - OVERWRITEPROTOCOL: https - NEXTCLOUD_ADMIN_USER: admin - # NEXTCLOUD_ADMIN_PASSWORD in env.secrets - # NEXTCLOUD_TRUSTED_DOMAINS also set in env.secrets - volumes: - - ../data/nextcloud/nextcloud:/var/www/html - depends_on: - - database - diff --git a/nextcloud/env.production b/nextcloud/env.production deleted file mode 100644 index 5fccdb9..0000000 --- a/nextcloud/env.production +++ /dev/null @@ -1 +0,0 @@ -# non-secret nextcloud config diff --git a/nextcloud/keycloak.sh b/nextcloud/keycloak.sh new file mode 100755 index 0000000..cce90b6 --- /dev/null +++ b/nextcloud/keycloak.sh @@ -0,0 +1,4 @@ +#!/bin/bash -x +# Setup the OAuth client connection + +client-create nextcloud "$NEXTCLOUD_HOSTNAME.$DOMAIN_NAME" "$NEXTCLOUD_CLIENT_SECRET" &2 "$@" ; exit 1 ; } - -DIRNAME="$(dirname $0)" -cd "$DIRNAME" -source ../env.production || die "no top level env?" -source env.production || die "no local env?" - -SECRETS="../data/nextcloud/env.secrets" -if [ -r "$SECRETS" ]; then - docker-compose up -d || die "nextcloud: unable to start" - exit 0 -fi - -docker-compose down 2>/dev/null - -NEXTCLOUD_CLIENT_SECRET="$(openssl rand -hex 32)" -NEXTCLOUD_ADMIN_PASSWORD="$(openssl rand -hex 6)" - -echo "Generating secrets: admin password $NEXTCLOUD_ADMIN_PASSWORD" -mkdir -p "$(dirname "$SECRETS")" -cat < "$SECRETS" -# Do not check in! -NEXTCLOUD_ADMIN_PASSWORD=$NEXTCLOUD_ADMIN_PASSWORD -NEXTCLOUD_TRUSTED_DOMAINS=$NEXTCLOUD_HOSTNAME -NEXTCLOUD_CLIENT_SECRET=$NEXTCLOUD_CLIENT_SECRET -EOF - -BASE="https://$KEYCLOAK_HOSTNAME/realms/$REALM/protocol/openid-connect" -PROVIDER="$(jq -c . <&2 "**** installing nextcloud" +NEXTCLOUD_UPDATE=1 bash /entrypoint.sh date || exit 1 + +echo >&2 "***** Setting up nextcloud for ${DOMAIN_NAME}" +occ() { su -p www-data -s /bin/sh -c "php /var/www/html/occ $*" ; } +#occ maintenance:install || exit 1 + +PROVIDER="$(cat <&2 "installing app $app" + occ app:install $app || exit 1 + touch "$CANARY.$app" + fi +done + +occ config:app:set sociallogin prevent_create_email_exists --value=1 || exit 1 +occ config:app:set sociallogin update_profile_on_login --value=1 || exit 1 +occ config:app:set sociallogin custom_providers --value=\'$PROVIDER\' || exit 1 + +touch "$CANARY" +exec "/entrypoint.sh" "$SERVER"