summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Dockerfile-alpine.template5
-rw-r--r--Dockerfile-debian.template5
-rw-r--r--README.md32
-rwxr-xr-xdocker-entrypoint.sh42
4 files changed, 84 insertions, 0 deletions
diff --git a/Dockerfile-alpine.template b/Dockerfile-alpine.template
index 3d69ca5d..905077bc 100644
--- a/Dockerfile-alpine.template
+++ b/Dockerfile-alpine.template
@@ -99,6 +99,11 @@ RUN { \
} > "${PHP_INI_DIR}/conf.d/nextcloud.ini"; \
\
mkdir /var/www/data; \
+ mkdir -p /docker-entrypoint-hooks.d/pre-installation \
+ /docker-entrypoint-hooks.d/post-installation \
+ /docker-entrypoint-hooks.d/pre-upgrade \
+ /docker-entrypoint-hooks.d/post-upgrade \
+ /docker-entrypoint-hooks.d/before-starting; \
chown -R www-data:root /var/www; \
chmod -R g=u /var/www
diff --git a/Dockerfile-debian.template b/Dockerfile-debian.template
index 4a9d975f..f3df0472 100644
--- a/Dockerfile-debian.template
+++ b/Dockerfile-debian.template
@@ -111,6 +111,11 @@ RUN { \
} > "${PHP_INI_DIR}/conf.d/nextcloud.ini"; \
\
mkdir /var/www/data; \
+ mkdir -p /docker-entrypoint-hooks.d/pre-installation \
+ /docker-entrypoint-hooks.d/post-installation \
+ /docker-entrypoint-hooks.d/pre-upgrade \
+ /docker-entrypoint-hooks.d/post-upgrade \
+ /docker-entrypoint-hooks.d/before-starting; \
chown -R www-data:root /var/www; \
chmod -R g=u /var/www
diff --git a/README.md b/README.md
index 4128efc1..31531767 100644
--- a/README.md
+++ b/README.md
@@ -202,6 +202,38 @@ To customize other PHP limits you can simply change the following variables:
- `PHP_UPLOAD_LIMIT` (default `512M`) This sets the upload limit (`post_max_size` and `upload_max_filesize`) for big files. Note that you may have to change other limits depending on your client, webserver or operating system. Check the [Nextcloud documentation](https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/big_file_upload_configuration.html) for more information.
+## Auto configuration via hook folders
+
+There are 5 hooks
+
+- `pre-installation` Executed before the Nextcloud is installed/initiated
+- `post-installation` Executed after the Nextcloud is installed/initiated
+- `pre-upgrade` Executed before the Nextcloud is upgraded
+- `post-upgrade` Executed after the Nextcloud is upgraded
+- `before-starting` Executed before the Nextcloud starts
+
+To use the hooks triggered by the `entrypoint` script, either
+- Added your script(s) to the individual of the hook folder(s), which are located at the path `/docker-entrypoint-hooks.d` in the container
+- Use volume(s) if you want to use script from the host system inside the container, see example.
+
+**Note:** Only the script(s) located in a hook folder (not sub-folders), ending with `.sh` and marked as executable, will be executed.
+
+**Example:** Mount using volumes
+```yaml
+...
+ app:
+ image: nextcloud:stable
+
+ volumes:
+ - ./app-hooks/pre-installation:/docker-entrypoint-hooks.d/pre-installation
+ - ./app-hooks/post-installation:/docker-entrypoint-hooks.d/post-installation
+ - ./app-hooks/pre-upgrade:/docker-entrypoint-hooks.d/pre-upgrade
+ - ./app-hooks/post-upgrade:/docker-entrypoint-hooks.d/post-upgrade
+ - ./app-hooks/before-starting:/docker-entrypoint-hooks.d/before-starting
+...
+```
+
+
## Using the apache image behind a reverse proxy and auto configure server host and protocol
The apache image will replace the remote addr (IP address visible to Nextcloud) with the IP address from `X-Real-IP` if the request is coming from a proxy in `10.0.0.0/8`, `172.16.0.0/12` or `192.168.0.0/16` by default. If you want Nextcloud to pick up the server host (`HTTP_X_FORWARDED_HOST`), protocol (`HTTP_X_FORWARDED_PROTO`) and client IP (`HTTP_X_FORWARDED_FOR`) from a trusted proxy, then disable rewrite IP and add the reverse proxy's IP address to `TRUSTED_PROXIES`.
diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh
index 37441fd8..941dc3ee 100755
--- a/docker-entrypoint.sh
+++ b/docker-entrypoint.sh
@@ -19,6 +19,39 @@ run_as() {
fi
}
+# Execute all executable files in a given directory in alphanumeric order
+run_path() {
+ local hook_folder_path="/docker-entrypoint-hooks.d/$1"
+ local return_code=0
+
+ echo "=> Searching for scripts (*.sh) to run, located in the folder: ${hook_folder_path}"
+
+ if [ -z "$(ls -A "${hook_folder_path}")" ]; then
+ echo "==> but the hook folder \"$(basename "${hook_folder_path}")\" is empty, so nothing to do"
+ return 0
+ fi
+
+ (
+ for script_file_path in "${hook_folder_path}/"*.sh; do
+ if ! [ -x "${script_file_path}" ] && [ -f "${script_file_path}" ]; then
+ echo "==> The script \"${script_file_path}\" in the folder \"${hook_folder_path}\" was skipping, because it didn't have the executable flag"
+ continue
+ fi
+
+ echo "==> Running the script (cwd: $(pwd)): \"${script_file_path}\""
+
+ run_as "${script_file_path}" || return_code="$?"
+
+ if [ "${return_code}" -ne "0" ]; then
+ echo "==> Failed at executing \"${script_file_path}\". Exit code: ${return_code}"
+ exit 1
+ fi
+
+ echo "==> Finished the script: \"${script_file_path}\""
+ done
+ )
+}
+
# usage: file_env VAR [DEFAULT]
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
@@ -182,6 +215,8 @@ if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UP
fi
if [ "$install" = true ]; then
+ run_path pre-installation
+
echo "Starting nextcloud installation"
max_retries=10
try=0
@@ -204,12 +239,16 @@ if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UP
NC_TRUSTED_DOMAIN_IDX=$((NC_TRUSTED_DOMAIN_IDX+1))
done
fi
+
+ run_path post-installation
else
echo "Please run the web-based installer on first connect!"
fi
fi
# Upgrade
else
+ run_path pre-upgrade
+
run_as 'php /var/www/html/occ upgrade'
run_as 'php /var/www/html/occ app:list' | sed -n "/Enabled:/,/Disabled:/p" > /tmp/list_after
@@ -217,6 +256,7 @@ if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UP
diff /tmp/list_before /tmp/list_after | grep '<' | cut -d- -f2 | cut -d: -f1
rm -f /tmp/list_before /tmp/list_after
+ run_path post-upgrade
fi
echo "Initializing finished"
@@ -227,6 +267,8 @@ if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UP
run_as 'php /var/www/html/occ maintenance:update:htaccess'
fi
) 9> /var/www/html/nextcloud-init-sync.lock
+
+ run_path before-starting
fi
exec "$@"