parent
2e670279a6
commit
0fd744370b
@ -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
|
@ -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
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
# non-secret nextcloud config
|
|
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash -x
|
||||||
|
# Setup the OAuth client connection
|
||||||
|
|
||||||
|
client-create nextcloud "$NEXTCLOUD_HOSTNAME.$DOMAIN_NAME" "$NEXTCLOUD_CLIENT_SECRET" </dev/null
|
@ -1,82 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
die() { echo >&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 <<EOF > "$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 . <<EOF
|
|
||||||
{
|
|
||||||
"custom_oidc": [
|
|
||||||
{
|
|
||||||
"name": "keycloak",
|
|
||||||
"title": "Keycloak",
|
|
||||||
"clientId": "nextcloud",
|
|
||||||
"clientSecret": "$NEXTCLOUD_CLIENT_SECRET",
|
|
||||||
"authorizeUrl": "$BASE/auth",
|
|
||||||
"tokenUrl": "$BASE/token",
|
|
||||||
"userInfoUrl": "$BASE/userinfo",
|
|
||||||
"logoutUrl": "$BASE/logout",
|
|
||||||
"scope": "openid",
|
|
||||||
"groupsClaim": "roles",
|
|
||||||
"style": "keycloak",
|
|
||||||
"displayNameClaim": "",
|
|
||||||
"defaultGroup": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
)"
|
|
||||||
|
|
||||||
|
|
||||||
docker-compose up -d || die "unable to bring up docker"
|
|
||||||
|
|
||||||
# wait for the nextcloud instance to be responsive
|
|
||||||
# TODO: how to find out if it is ready?
|
|
||||||
echo "Sleeping a minute while nextcloud installs"
|
|
||||||
sleep 60
|
|
||||||
|
|
||||||
|
|
||||||
docker-compose exec -u www-data -T nextcloud bash -x <<EOF || die "unable to configure sociallogin"
|
|
||||||
./occ app:install calendar
|
|
||||||
./occ app:install sociallogin
|
|
||||||
./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
|
|
||||||
EOF
|
|
||||||
|
|
||||||
../keycloak/client-delete 'nextcloud' || echo "client did not exist?"
|
|
||||||
|
|
||||||
../keycloak/client-create << EOF || die "unable to create client id"
|
|
||||||
{
|
|
||||||
"clientId": "nextcloud",
|
|
||||||
"rootUrl": "https://$NEXTCLOUD_HOSTNAME/",
|
|
||||||
"adminUrl": "https://$NEXTCLOUD_HOSTNAME/",
|
|
||||||
"redirectUris": [ "https://$NEXTCLOUD_HOSTNAME/*" ],
|
|
||||||
"webOrigins": [ "https://$NEXTCLOUD_HOSTNAME" ],
|
|
||||||
"clientAuthenticatorType": "client-secret",
|
|
||||||
"secret": "$NEXTCLOUD_CLIENT_SECRET"
|
|
||||||
}
|
|
||||||
EOF
|
|
@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/bash -x
|
||||||
|
|
||||||
|
SERVER="apache2-foreground"
|
||||||
|
CANARY="/var/www/html/.installed"
|
||||||
|
if [ -r "$CANARY" ]; then
|
||||||
|
exec "/entrypoint.sh" "$SERVER"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo >&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 <<EOF
|
||||||
|
{
|
||||||
|
"custom_oidc": [
|
||||||
|
{
|
||||||
|
"name": "keycloak",
|
||||||
|
"title": "Keycloak",
|
||||||
|
"clientId": "nextcloud",
|
||||||
|
"clientSecret": "$NEXTCLOUD_CLIENT_SECRET",
|
||||||
|
"authorizeUrl": "$AUTH_URL",
|
||||||
|
"tokenUrl": "$TOKEN_URL",
|
||||||
|
"userInfoUrl": "$USERINFO_URL",
|
||||||
|
"logoutUrl": "$LOGOUT_URL",
|
||||||
|
"scope": "openid",
|
||||||
|
"groupsClaim": "roles",
|
||||||
|
"style": "keycloak",
|
||||||
|
"displayNameClaim": "",
|
||||||
|
"defaultGroup": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
)"
|
||||||
|
|
||||||
|
for app in calendar sociallogin; do
|
||||||
|
if [ ! -r "$CANARY.$app" ]; then
|
||||||
|
echo >&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"
|
Loading…
Reference in new issue