#!/bin/bash -x # # NextCloud Service PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin config_nextcloud() { echo -ne "* Configuring nextcloud container.." if [ ! -d "/federated/apps/nextcloud" ]; then mkdir -p /federated/apps/nextcloud/data/root &> /dev/null mkdir -p /federated/apps/nextcloud/data/home &> /dev/null mkdir -p /federated/apps/nextcloud/data/var/www/html &> /dev/null mkdir -p /federated/apps/nextcloud/data/var/www/html/custom_apps &> /dev/null mkdir -p /federated/apps/nextcloud/data/var/www/config &> /dev/null mkdir -p /federated/apps/nextcloud/data/var/www/data &> /dev/null mkdir -p /federated/apps/nextcloud/data/usr/local/etc/php/conf.d &> /dev/null fi get_appvars cat > /federated/apps/nextcloud/docker-compose.yml < /federated/apps/nextcloud/.postgresql.secret echo "$ADMINPASS" > /federated/apps/nextcloud/.nextcloud.secret chmod 600 /federated/apps/nextcloud/.postgresql.secret /federated/apps/nextcloud/.nextcloud.secret # Create database and user in postgresql docker exec postgresql psql -U postgres -c "CREATE DATABASE nextcloud" &> /dev/null docker exec postgresql psql -U postgres -c "CREATE USER nextcloud WITH PASSWORD '$NEXTCLOUD_SECRET'" &> /dev/null docker exec postgresql psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud" &> /dev/null cat > /federated/apps/nextcloud/.env < /federated/apps/nextcloud/data/usr/local/etc/php/conf.d/opcache-recommended.ini < /federated/apps/nextcloud/data/usr/local/etc/php/conf.d/docker-php-ext-apcu.ini < /federated/apps/nextcloud/data/configs.json < /federated/apps/nextcloud/data/config.sh < /dev/null" "60" # Move config.sh and sidemenu config, set config.sh executable run_command "mv /federated/apps/nextcloud/data/config.sh /federated/apps/nextcloud/data/configs.json /federated/apps/nextcloud/data/var/www/html/" run_command "docker exec nextcloud chown www-data:root /var/www/html/config.sh /var/www/html/configs.json" run_command "docker exec nextcloud chmod 755 /var/www/html/config.sh" # Run config.sh - Setup LDAP, configuration for nextcloud run_command "docker exec -u 33 nextcloud /var/www/html/config.sh" # Add admin user to group # Have to do it this many times so it will query LDAP and populate admin user first run_command "docker exec -u 33 nextcloud /var/www/html/occ ldap:search admin" run_command "docker exec -u 33 nextcloud /var/www/html/occ group:list" run_command "docker exec -u 33 nextcloud /var/www/html/occ group:adduser admin admin" run_command "docker exec -u 33 nextcloud /var/www/html/occ group:adduser admin admin" run_command "docker exec -u 33 nextcloud /var/www/html/occ group:list" # Setup admin email account # docker exec -u 33 nextcloud bash -c "/var/www/html/occ mail:account:create admin admin admin@$DOMAIN mail.$DOMAIN 993 ssl admin@$DOMAIN $ADMINPASS mail.$DOMAIN 465 ssl admin@$DOMAIN $ADMINPASS password" &> /dev/null || failts "ERROR - There was an error running occ mail:account:create" run_command "docker exec -u 33 nextcloud /var/www/html/occ mail:account:create admin admin admin@$DOMAIN mail.$DOMAIN 993 ssl admin@$DOMAIN $ADMINPASS mail.$DOMAIN 465 ssl admin@$DOMAIN $ADMINPASS password" # Add missing indexes and disable activity app run_command "docker exec -u 33 nextcloud /var/www/html/occ db:add-missing-indices" run_command "docker exec -u 33 nextcloud /var/www/html/occ app:disable activity" # Make sure pdns is ready before adding the records /federated/bin/fix pdnsmysql run_command "docker exec pdns pdnsutil add-record $DOMAIN nextcloud A 86400 $EXTERNALIP" # Remove configs run_command "rm /federated/apps/nextcloud/data/var/www/html/config.sh /federated/apps/nextcloud/data/var/www/html/configs.json" # Truncate nextcloud log file run_command "docker exec -u 33 nextcloud truncate /var/www/html/data/nextcloud.log --size 0" echo -ne "done.\n" } uninstall_nextcloud() { echo -ne "* Uninstalling nextcloud container.." # First stop the service cd /federated/apps/nextcloud && docker compose -f docker-compose.yml -p nextcloud down &> /dev/null # Delete database and user in postgresql docker exec postgresql psql -U postgres -c "DROP DATABASE nextcloud" &> /dev/null docker exec postgresql psql -U postgres -c "DROP USER nextcloud" &> /dev/null # Delete the app directory rm -rf /federated/apps/nextcloud # Delete the image docker image rm nextcloud:$IMAGE_VERSION &> /dev/null # Delete the DNS record docker exec pdns pdnsutil delete-rrset $DOMAIN nextcloud A # Uninstall the SSO configuration if it exists in authelia (authelia must exist too) if [[ $(grep "### Nextcloud" /federated/apps/authelia/data/config/idproviders.yml 2>/dev/null) ]]; then sed -i '/### Nextcloud/,/### /{/### PowerDNS/!{/### /!d}}' /federated/apps/authelia/data/config/idproviders.yml sed -i '/### Nextcloud/d' /federated/apps/authelia/data/config/idproviders.yml /federated/bin/stop authelia &> /dev/null /federated/bin/start authelia &> /dev/null fi echo -ne "done.\n" } configsso_nextcloud() { echo -ne "* Configuring nextcloud container with SSO.." [ ! -d "/federated/apps/authelia" ] && failcheck "Authelia is not installed. You need this first before continuing." [ ! -f "/federated/apps/authelia/data/config/idproviders.yml" ] && failcheck "Authelia idproviders.yml is missing." get_appvars [[ $(grep "### Nextcloud" /federated/apps/authelia/data/config/idproviders.yml 2>/dev/null) ]] && failcheck "Authelia already has a Nextcloud configuration." NEXTCLOUD_CLIENT_SECRET=$(create_password); NEXTCLOUD_CLIENT_SECRET_HASH=$(docker run --rm authelia/authelia:latest authelia crypto hash generate pbkdf2 --password $NEXTCLOUD_CLIENT_SECRET | awk '{ print $2 }') echo "$NEXTCLOUD_CLIENT_SECRET" > /federated/apps/nextcloud/.nextcloud.client.secret cat >> /federated/apps/authelia/data/config/idproviders.yml <