summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTilo Spannagel <development@tilosp.de>2017-04-24 20:58:41 +0200
committerGitHub <noreply@github.com>2017-04-24 20:58:41 +0200
commit71199bd69ad66f50f92c12ea72887eeeae5c6780 (patch)
treeb242dd0d396e6b083c44fd3f92f1b874c77b7e95
parent2bb94165af875755fa775a2ce08c2306f7ee6374 (diff)
parentd253cc11713122ca49e8bb1857ac9e6772440d20 (diff)
Merge pull request #65 from nextcloud/volume
Rework Updating
-rw-r--r--10.0/apache/Dockerfile16
-rw-r--r--10.0/apache/apps.config.php15
-rwxr-xr-x10.0/apache/docker-entrypoint.sh47
-rw-r--r--10.0/fpm/Dockerfile16
-rw-r--r--10.0/fpm/apps.config.php15
-rwxr-xr-x10.0/fpm/docker-entrypoint.sh47
-rw-r--r--11.0/apache/Dockerfile16
-rw-r--r--11.0/apache/apps.config.php15
-rwxr-xr-x11.0/apache/docker-entrypoint.sh47
-rw-r--r--11.0/fpm/Dockerfile16
-rw-r--r--11.0/fpm/apps.config.php15
-rwxr-xr-x11.0/fpm/docker-entrypoint.sh47
-rw-r--r--9.0/apache/Dockerfile20
-rw-r--r--9.0/apache/apps.config.php15
-rwxr-xr-x9.0/apache/docker-entrypoint.sh47
-rw-r--r--9.0/fpm/Dockerfile20
-rw-r--r--9.0/fpm/apps.config.php15
-rwxr-xr-x9.0/fpm/docker-entrypoint.sh47
-rw-r--r--Dockerfile-php7.template20
-rw-r--r--Dockerfile.template20
-rw-r--r--apps.config.php15
-rwxr-xr-xdocker-entrypoint.sh47
-rwxr-xr-xupdate.sh8
23 files changed, 557 insertions, 29 deletions
diff --git a/10.0/apache/Dockerfile b/10.0/apache/Dockerfile
index 3798deb2..570aef6c 100644
--- a/10.0/apache/Dockerfile
+++ b/10.0/apache/Dockerfile
@@ -1,6 +1,7 @@
FROM php:5.6-apache
RUN apt-get update && apt-get install -y \
+ rsync \
bzip2 \
libcurl4-openssl-dev \
libfreetype6-dev \
@@ -52,9 +53,22 @@ RUN curl -fsSL -o nextcloud.tar.bz2 \
&& gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2 \
&& rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc \
&& tar -xjf nextcloud.tar.bz2 -C /usr/src/ \
- && rm nextcloud.tar.bz2
+ && rm nextcloud.tar.bz2 \
+ && rm -rf /usr/src/nextcloud/updater \
+ # https://docs.nextcloud.com/server/11/admin_manual/installation/installation_wizard.html#setting-strong-directory-permissions
+ && mkdir -p /usr/src/nextcloud/data \
+ && mkdir -p /usr/src/nextcloud/custom_apps \
+ && find /usr/src/nextcloud/ -type f -print0 | xargs -0 chmod 0640 \
+ && find /usr/src/nextcloud/ -type d -print0 | xargs -0 chmod 0750 \
+ && chown -R root:www-data /usr/src/nextcloud/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/custom_apps/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/config/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/data/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/themes/ \
+ && chmod +x /usr/src/nextcloud/occ
COPY docker-entrypoint.sh /entrypoint.sh
+COPY apps.config.php /usr/src/nextcloud/config/apps.config.php
ENTRYPOINT ["/entrypoint.sh"]
CMD ["apache2-foreground"]
diff --git a/10.0/apache/apps.config.php b/10.0/apache/apps.config.php
new file mode 100644
index 00000000..a4bed833
--- /dev/null
+++ b/10.0/apache/apps.config.php
@@ -0,0 +1,15 @@
+<?php
+$CONFIG = array (
+ "apps_paths" => array (
+ 0 => array (
+ "path" => OC::$SERVERROOT."/apps",
+ "url" => "/apps",
+ "writable" => false,
+ ),
+ 1 => array (
+ "path" => OC::$SERVERROOT."/custom_apps",
+ "url" => "/custom_apps",
+ "writable" => true,
+ ),
+ ),
+);
diff --git a/10.0/apache/docker-entrypoint.sh b/10.0/apache/docker-entrypoint.sh
index 62d16254..b2bf65e7 100755
--- a/10.0/apache/docker-entrypoint.sh
+++ b/10.0/apache/docker-entrypoint.sh
@@ -1,9 +1,50 @@
#!/bin/bash
set -e
-if [ ! -e '/var/www/html/version.php' ]; then
- tar cf - --one-file-system -C /usr/src/nextcloud . | tar xf -
- chown -R www-data /var/www/html
+# version_greater A B returns whether A > B
+function version_greater() {
+ [[ "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1" ]];
+}
+
+installed_version="0.0.0~unknown"
+if [ -f /var/www/html/version.php ]; then
+ installed_version=$(php -r 'require "/var/www/html/version.php"; echo "$OC_VersionString";')
+fi
+image_version=$(php -r 'require "/usr/src/nextcloud/version.php"; echo "$OC_VersionString";')
+
+if version_greater "$installed_version" "$image_version"; then
+ echo "Can't start Nextcloud because the version of the data ($installed_version) is higher than the docker image version ($image_version) and downgrading is not supported. Are you sure you have pulled the newest image version?"
+ exit 1
+fi
+
+if version_greater "$image_version" "$installed_version"; then
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_before
+ fi
+
+ rsync -a --delete --exclude /config/ --exclude /data/ --exclude /custom_apps/ /usr/src/nextcloud/ /var/www/html/
+
+ if [ ! -d /var/www/html/config ]; then
+ cp -arT /usr/src/nextcloud/config /var/www/html/config
+ fi
+
+ if [ ! -d /var/www/html/data ]; then
+ cp -arT /usr/src/nextcloud/data /var/www/html/data
+ fi
+
+ if [ ! -d /var/www/html/custom_apps ]; then
+ cp -arT /usr/src/nextcloud/custom_apps /var/www/html/custom_apps
+ cp -a /usr/src/nextcloud/config/apps.config.php /var/www/html/config/apps.config.php
+ fi
+
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ upgrade --no-app-disable'
+
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_after
+ echo "The following apps have beed disabled:"
+ diff <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_before) <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_after) | grep '<' | cut -d- -f2 | cut -d: -f1
+ rm -f /tmp/list_before /tmp/list_after
+ fi
fi
exec "$@"
diff --git a/10.0/fpm/Dockerfile b/10.0/fpm/Dockerfile
index 5619a170..b60b57f2 100644
--- a/10.0/fpm/Dockerfile
+++ b/10.0/fpm/Dockerfile
@@ -1,6 +1,7 @@
FROM php:5.6-fpm
RUN apt-get update && apt-get install -y \
+ rsync \
bzip2 \
libcurl4-openssl-dev \
libfreetype6-dev \
@@ -50,9 +51,22 @@ RUN curl -fsSL -o nextcloud.tar.bz2 \
&& gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2 \
&& rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc \
&& tar -xjf nextcloud.tar.bz2 -C /usr/src/ \
- && rm nextcloud.tar.bz2
+ && rm nextcloud.tar.bz2 \
+ && rm -rf /usr/src/nextcloud/updater \
+ # https://docs.nextcloud.com/server/11/admin_manual/installation/installation_wizard.html#setting-strong-directory-permissions
+ && mkdir -p /usr/src/nextcloud/data \
+ && mkdir -p /usr/src/nextcloud/custom_apps \
+ && find /usr/src/nextcloud/ -type f -print0 | xargs -0 chmod 0640 \
+ && find /usr/src/nextcloud/ -type d -print0 | xargs -0 chmod 0750 \
+ && chown -R root:www-data /usr/src/nextcloud/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/custom_apps/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/config/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/data/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/themes/ \
+ && chmod +x /usr/src/nextcloud/occ
COPY docker-entrypoint.sh /entrypoint.sh
+COPY apps.config.php /usr/src/nextcloud/config/apps.config.php
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
diff --git a/10.0/fpm/apps.config.php b/10.0/fpm/apps.config.php
new file mode 100644
index 00000000..a4bed833
--- /dev/null
+++ b/10.0/fpm/apps.config.php
@@ -0,0 +1,15 @@
+<?php
+$CONFIG = array (
+ "apps_paths" => array (
+ 0 => array (
+ "path" => OC::$SERVERROOT."/apps",
+ "url" => "/apps",
+ "writable" => false,
+ ),
+ 1 => array (
+ "path" => OC::$SERVERROOT."/custom_apps",
+ "url" => "/custom_apps",
+ "writable" => true,
+ ),
+ ),
+);
diff --git a/10.0/fpm/docker-entrypoint.sh b/10.0/fpm/docker-entrypoint.sh
index 62d16254..b2bf65e7 100755
--- a/10.0/fpm/docker-entrypoint.sh
+++ b/10.0/fpm/docker-entrypoint.sh
@@ -1,9 +1,50 @@
#!/bin/bash
set -e
-if [ ! -e '/var/www/html/version.php' ]; then
- tar cf - --one-file-system -C /usr/src/nextcloud . | tar xf -
- chown -R www-data /var/www/html
+# version_greater A B returns whether A > B
+function version_greater() {
+ [[ "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1" ]];
+}
+
+installed_version="0.0.0~unknown"
+if [ -f /var/www/html/version.php ]; then
+ installed_version=$(php -r 'require "/var/www/html/version.php"; echo "$OC_VersionString";')
+fi
+image_version=$(php -r 'require "/usr/src/nextcloud/version.php"; echo "$OC_VersionString";')
+
+if version_greater "$installed_version" "$image_version"; then
+ echo "Can't start Nextcloud because the version of the data ($installed_version) is higher than the docker image version ($image_version) and downgrading is not supported. Are you sure you have pulled the newest image version?"
+ exit 1
+fi
+
+if version_greater "$image_version" "$installed_version"; then
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_before
+ fi
+
+ rsync -a --delete --exclude /config/ --exclude /data/ --exclude /custom_apps/ /usr/src/nextcloud/ /var/www/html/
+
+ if [ ! -d /var/www/html/config ]; then
+ cp -arT /usr/src/nextcloud/config /var/www/html/config
+ fi
+
+ if [ ! -d /var/www/html/data ]; then
+ cp -arT /usr/src/nextcloud/data /var/www/html/data
+ fi
+
+ if [ ! -d /var/www/html/custom_apps ]; then
+ cp -arT /usr/src/nextcloud/custom_apps /var/www/html/custom_apps
+ cp -a /usr/src/nextcloud/config/apps.config.php /var/www/html/config/apps.config.php
+ fi
+
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ upgrade --no-app-disable'
+
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_after
+ echo "The following apps have beed disabled:"
+ diff <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_before) <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_after) | grep '<' | cut -d- -f2 | cut -d: -f1
+ rm -f /tmp/list_before /tmp/list_after
+ fi
fi
exec "$@"
diff --git a/11.0/apache/Dockerfile b/11.0/apache/Dockerfile
index c0a522b7..3ba14c71 100644
--- a/11.0/apache/Dockerfile
+++ b/11.0/apache/Dockerfile
@@ -1,6 +1,7 @@
FROM php:7.1-apache
RUN apt-get update && apt-get install -y \
+ rsync \
bzip2 \
libcurl4-openssl-dev \
libfreetype6-dev \
@@ -52,9 +53,22 @@ RUN curl -fsSL -o nextcloud.tar.bz2 \
&& gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2 \
&& rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc \
&& tar -xjf nextcloud.tar.bz2 -C /usr/src/ \
- && rm nextcloud.tar.bz2
+ && rm nextcloud.tar.bz2 \
+ && rm -rf /usr/src/nextcloud/updater \
+ # https://docs.nextcloud.com/server/11/admin_manual/installation/installation_wizard.html#setting-strong-directory-permissions
+ && mkdir -p /usr/src/nextcloud/data \
+ && mkdir -p /usr/src/nextcloud/custom_apps \
+ && find /usr/src/nextcloud/ -type f -print0 | xargs -0 chmod 0640 \
+ && find /usr/src/nextcloud/ -type d -print0 | xargs -0 chmod 0750 \
+ && chown -R root:www-data /usr/src/nextcloud/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/custom_apps/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/config/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/data/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/themes/ \
+ && chmod +x /usr/src/nextcloud/occ
COPY docker-entrypoint.sh /entrypoint.sh
+COPY apps.config.php /usr/src/nextcloud/config/apps.config.php
ENTRYPOINT ["/entrypoint.sh"]
CMD ["apache2-foreground"]
diff --git a/11.0/apache/apps.config.php b/11.0/apache/apps.config.php
new file mode 100644
index 00000000..a4bed833
--- /dev/null
+++ b/11.0/apache/apps.config.php
@@ -0,0 +1,15 @@
+<?php
+$CONFIG = array (
+ "apps_paths" => array (
+ 0 => array (
+ "path" => OC::$SERVERROOT."/apps",
+ "url" => "/apps",
+ "writable" => false,
+ ),
+ 1 => array (
+ "path" => OC::$SERVERROOT."/custom_apps",
+ "url" => "/custom_apps",
+ "writable" => true,
+ ),
+ ),
+);
diff --git a/11.0/apache/docker-entrypoint.sh b/11.0/apache/docker-entrypoint.sh
index 62d16254..b2bf65e7 100755
--- a/11.0/apache/docker-entrypoint.sh
+++ b/11.0/apache/docker-entrypoint.sh
@@ -1,9 +1,50 @@
#!/bin/bash
set -e
-if [ ! -e '/var/www/html/version.php' ]; then
- tar cf - --one-file-system -C /usr/src/nextcloud . | tar xf -
- chown -R www-data /var/www/html
+# version_greater A B returns whether A > B
+function version_greater() {
+ [[ "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1" ]];
+}
+
+installed_version="0.0.0~unknown"
+if [ -f /var/www/html/version.php ]; then
+ installed_version=$(php -r 'require "/var/www/html/version.php"; echo "$OC_VersionString";')
+fi
+image_version=$(php -r 'require "/usr/src/nextcloud/version.php"; echo "$OC_VersionString";')
+
+if version_greater "$installed_version" "$image_version"; then
+ echo "Can't start Nextcloud because the version of the data ($installed_version) is higher than the docker image version ($image_version) and downgrading is not supported. Are you sure you have pulled the newest image version?"
+ exit 1
+fi
+
+if version_greater "$image_version" "$installed_version"; then
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_before
+ fi
+
+ rsync -a --delete --exclude /config/ --exclude /data/ --exclude /custom_apps/ /usr/src/nextcloud/ /var/www/html/
+
+ if [ ! -d /var/www/html/config ]; then
+ cp -arT /usr/src/nextcloud/config /var/www/html/config
+ fi
+
+ if [ ! -d /var/www/html/data ]; then
+ cp -arT /usr/src/nextcloud/data /var/www/html/data
+ fi
+
+ if [ ! -d /var/www/html/custom_apps ]; then
+ cp -arT /usr/src/nextcloud/custom_apps /var/www/html/custom_apps
+ cp -a /usr/src/nextcloud/config/apps.config.php /var/www/html/config/apps.config.php
+ fi
+
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ upgrade --no-app-disable'
+
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_after
+ echo "The following apps have beed disabled:"
+ diff <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_before) <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_after) | grep '<' | cut -d- -f2 | cut -d: -f1
+ rm -f /tmp/list_before /tmp/list_after
+ fi
fi
exec "$@"
diff --git a/11.0/fpm/Dockerfile b/11.0/fpm/Dockerfile
index fa31bfb1..0b86d169 100644
--- a/11.0/fpm/Dockerfile
+++ b/11.0/fpm/Dockerfile
@@ -1,6 +1,7 @@
FROM php:7.1-fpm
RUN apt-get update && apt-get install -y \
+ rsync \
bzip2 \
libcurl4-openssl-dev \
libfreetype6-dev \
@@ -50,9 +51,22 @@ RUN curl -fsSL -o nextcloud.tar.bz2 \
&& gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2 \
&& rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc \
&& tar -xjf nextcloud.tar.bz2 -C /usr/src/ \
- && rm nextcloud.tar.bz2
+ && rm nextcloud.tar.bz2 \
+ && rm -rf /usr/src/nextcloud/updater \
+ # https://docs.nextcloud.com/server/11/admin_manual/installation/installation_wizard.html#setting-strong-directory-permissions
+ && mkdir -p /usr/src/nextcloud/data \
+ && mkdir -p /usr/src/nextcloud/custom_apps \
+ && find /usr/src/nextcloud/ -type f -print0 | xargs -0 chmod 0640 \
+ && find /usr/src/nextcloud/ -type d -print0 | xargs -0 chmod 0750 \
+ && chown -R root:www-data /usr/src/nextcloud/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/custom_apps/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/config/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/data/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/themes/ \
+ && chmod +x /usr/src/nextcloud/occ
COPY docker-entrypoint.sh /entrypoint.sh
+COPY apps.config.php /usr/src/nextcloud/config/apps.config.php
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
diff --git a/11.0/fpm/apps.config.php b/11.0/fpm/apps.config.php
new file mode 100644
index 00000000..a4bed833
--- /dev/null
+++ b/11.0/fpm/apps.config.php
@@ -0,0 +1,15 @@
+<?php
+$CONFIG = array (
+ "apps_paths" => array (
+ 0 => array (
+ "path" => OC::$SERVERROOT."/apps",
+ "url" => "/apps",
+ "writable" => false,
+ ),
+ 1 => array (
+ "path" => OC::$SERVERROOT."/custom_apps",
+ "url" => "/custom_apps",
+ "writable" => true,
+ ),
+ ),
+);
diff --git a/11.0/fpm/docker-entrypoint.sh b/11.0/fpm/docker-entrypoint.sh
index 62d16254..b2bf65e7 100755
--- a/11.0/fpm/docker-entrypoint.sh
+++ b/11.0/fpm/docker-entrypoint.sh
@@ -1,9 +1,50 @@
#!/bin/bash
set -e
-if [ ! -e '/var/www/html/version.php' ]; then
- tar cf - --one-file-system -C /usr/src/nextcloud . | tar xf -
- chown -R www-data /var/www/html
+# version_greater A B returns whether A > B
+function version_greater() {
+ [[ "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1" ]];
+}
+
+installed_version="0.0.0~unknown"
+if [ -f /var/www/html/version.php ]; then
+ installed_version=$(php -r 'require "/var/www/html/version.php"; echo "$OC_VersionString";')
+fi
+image_version=$(php -r 'require "/usr/src/nextcloud/version.php"; echo "$OC_VersionString";')
+
+if version_greater "$installed_version" "$image_version"; then
+ echo "Can't start Nextcloud because the version of the data ($installed_version) is higher than the docker image version ($image_version) and downgrading is not supported. Are you sure you have pulled the newest image version?"
+ exit 1
+fi
+
+if version_greater "$image_version" "$installed_version"; then
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_before
+ fi
+
+ rsync -a --delete --exclude /config/ --exclude /data/ --exclude /custom_apps/ /usr/src/nextcloud/ /var/www/html/
+
+ if [ ! -d /var/www/html/config ]; then
+ cp -arT /usr/src/nextcloud/config /var/www/html/config
+ fi
+
+ if [ ! -d /var/www/html/data ]; then
+ cp -arT /usr/src/nextcloud/data /var/www/html/data
+ fi
+
+ if [ ! -d /var/www/html/custom_apps ]; then
+ cp -arT /usr/src/nextcloud/custom_apps /var/www/html/custom_apps
+ cp -a /usr/src/nextcloud/config/apps.config.php /var/www/html/config/apps.config.php
+ fi
+
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ upgrade --no-app-disable'
+
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_after
+ echo "The following apps have beed disabled:"
+ diff <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_before) <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_after) | grep '<' | cut -d- -f2 | cut -d: -f1
+ rm -f /tmp/list_before /tmp/list_after
+ fi
fi
exec "$@"
diff --git a/9.0/apache/Dockerfile b/9.0/apache/Dockerfile
index 56d46165..07ede264 100644
--- a/9.0/apache/Dockerfile
+++ b/9.0/apache/Dockerfile
@@ -1,6 +1,7 @@
FROM php:5.6-apache
RUN apt-get update && apt-get install -y \
+ rsync \
bzip2 \
libcurl4-openssl-dev \
libfreetype6-dev \
@@ -52,9 +53,26 @@ RUN curl -fsSL -o nextcloud.tar.bz2 \
&& gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2 \
&& rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc \
&& tar -xjf nextcloud.tar.bz2 -C /usr/src/ \
- && rm nextcloud.tar.bz2
+ && rm nextcloud.tar.bz2 \
+ && rm -rf /usr/src/nextcloud/updater \
+ # https://docs.nextcloud.com/server/11/admin_manual/installation/installation_wizard.html#setting-strong-directory-permissions
+ && mkdir -p /usr/src/nextcloud/data \
+ && mkdir -p /usr/src/nextcloud/custom_apps \
+ # only used in nextcloud 9 (assets)
+ && mkdir -p /usr/src/nextcloud/assets \
+ && find /usr/src/nextcloud/ -type f -print0 | xargs -0 chmod 0640 \
+ && find /usr/src/nextcloud/ -type d -print0 | xargs -0 chmod 0750 \
+ && chown -R root:www-data /usr/src/nextcloud/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/custom_apps/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/config/ \
+ # only used in nextcloud 9 (assets)
+ && chown -R www-data:www-data /usr/src/nextcloud/assets/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/data/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/themes/ \
+ && chmod +x /usr/src/nextcloud/occ
COPY docker-entrypoint.sh /entrypoint.sh
+COPY apps.config.php /usr/src/nextcloud/config/apps.config.php
ENTRYPOINT ["/entrypoint.sh"]
CMD ["apache2-foreground"]
diff --git a/9.0/apache/apps.config.php b/9.0/apache/apps.config.php
new file mode 100644
index 00000000..a4bed833
--- /dev/null
+++ b/9.0/apache/apps.config.php
@@ -0,0 +1,15 @@
+<?php
+$CONFIG = array (
+ "apps_paths" => array (
+ 0 => array (
+ "path" => OC::$SERVERROOT."/apps",
+ "url" => "/apps",
+ "writable" => false,
+ ),
+ 1 => array (
+ "path" => OC::$SERVERROOT."/custom_apps",
+ "url" => "/custom_apps",
+ "writable" => true,
+ ),
+ ),
+);
diff --git a/9.0/apache/docker-entrypoint.sh b/9.0/apache/docker-entrypoint.sh
index 62d16254..b2bf65e7 100755
--- a/9.0/apache/docker-entrypoint.sh
+++ b/9.0/apache/docker-entrypoint.sh
@@ -1,9 +1,50 @@
#!/bin/bash
set -e
-if [ ! -e '/var/www/html/version.php' ]; then
- tar cf - --one-file-system -C /usr/src/nextcloud . | tar xf -
- chown -R www-data /var/www/html
+# version_greater A B returns whether A > B
+function version_greater() {
+ [[ "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1" ]];
+}
+
+installed_version="0.0.0~unknown"
+if [ -f /var/www/html/version.php ]; then
+ installed_version=$(php -r 'require "/var/www/html/version.php"; echo "$OC_VersionString";')
+fi
+image_version=$(php -r 'require "/usr/src/nextcloud/version.php"; echo "$OC_VersionString";')
+
+if version_greater "$installed_version" "$image_version"; then
+ echo "Can't start Nextcloud because the version of the data ($installed_version) is higher than the docker image version ($image_version) and downgrading is not supported. Are you sure you have pulled the newest image version?"
+ exit 1
+fi
+
+if version_greater "$image_version" "$installed_version"; then
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_before
+ fi
+
+ rsync -a --delete --exclude /config/ --exclude /data/ --exclude /custom_apps/ /usr/src/nextcloud/ /var/www/html/
+
+ if [ ! -d /var/www/html/config ]; then
+ cp -arT /usr/src/nextcloud/config /var/www/html/config
+ fi
+
+ if [ ! -d /var/www/html/data ]; then
+ cp -arT /usr/src/nextcloud/data /var/www/html/data
+ fi
+
+ if [ ! -d /var/www/html/custom_apps ]; then
+ cp -arT /usr/src/nextcloud/custom_apps /var/www/html/custom_apps
+ cp -a /usr/src/nextcloud/config/apps.config.php /var/www/html/config/apps.config.php
+ fi
+
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ upgrade --no-app-disable'
+
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_after
+ echo "The following apps have beed disabled:"
+ diff <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_before) <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_after) | grep '<' | cut -d- -f2 | cut -d: -f1
+ rm -f /tmp/list_before /tmp/list_after
+ fi
fi
exec "$@"
diff --git a/9.0/fpm/Dockerfile b/9.0/fpm/Dockerfile
index 44027c57..fd82cb3a 100644
--- a/9.0/fpm/Dockerfile
+++ b/9.0/fpm/Dockerfile
@@ -1,6 +1,7 @@
FROM php:5.6-fpm
RUN apt-get update && apt-get install -y \
+ rsync \
bzip2 \
libcurl4-openssl-dev \
libfreetype6-dev \
@@ -50,9 +51,26 @@ RUN curl -fsSL -o nextcloud.tar.bz2 \
&& gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2 \
&& rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc \
&& tar -xjf nextcloud.tar.bz2 -C /usr/src/ \
- && rm nextcloud.tar.bz2
+ && rm nextcloud.tar.bz2 \
+ && rm -rf /usr/src/nextcloud/updater \
+ # https://docs.nextcloud.com/server/11/admin_manual/installation/installation_wizard.html#setting-strong-directory-permissions
+ && mkdir -p /usr/src/nextcloud/data \
+ && mkdir -p /usr/src/nextcloud/custom_apps \
+ # only used in nextcloud 9 (assets)
+ && mkdir -p /usr/src/nextcloud/assets \
+ && find /usr/src/nextcloud/ -type f -print0 | xargs -0 chmod 0640 \
+ && find /usr/src/nextcloud/ -type d -print0 | xargs -0 chmod 0750 \
+ && chown -R root:www-data /usr/src/nextcloud/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/custom_apps/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/config/ \
+ # only used in nextcloud 9 (assets)
+ && chown -R www-data:www-data /usr/src/nextcloud/assets/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/data/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/themes/ \
+ && chmod +x /usr/src/nextcloud/occ
COPY docker-entrypoint.sh /entrypoint.sh
+COPY apps.config.php /usr/src/nextcloud/config/apps.config.php
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
diff --git a/9.0/fpm/apps.config.php b/9.0/fpm/apps.config.php
new file mode 100644
index 00000000..a4bed833
--- /dev/null
+++ b/9.0/fpm/apps.config.php
@@ -0,0 +1,15 @@
+<?php
+$CONFIG = array (
+ "apps_paths" => array (
+ 0 => array (
+ "path" => OC::$SERVERROOT."/apps",
+ "url" => "/apps",
+ "writable" => false,
+ ),
+ 1 => array (
+ "path" => OC::$SERVERROOT."/custom_apps",
+ "url" => "/custom_apps",
+ "writable" => true,
+ ),
+ ),
+);
diff --git a/9.0/fpm/docker-entrypoint.sh b/9.0/fpm/docker-entrypoint.sh
index 62d16254..b2bf65e7 100755
--- a/9.0/fpm/docker-entrypoint.sh
+++ b/9.0/fpm/docker-entrypoint.sh
@@ -1,9 +1,50 @@
#!/bin/bash
set -e
-if [ ! -e '/var/www/html/version.php' ]; then
- tar cf - --one-file-system -C /usr/src/nextcloud . | tar xf -
- chown -R www-data /var/www/html
+# version_greater A B returns whether A > B
+function version_greater() {
+ [[ "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1" ]];
+}
+
+installed_version="0.0.0~unknown"
+if [ -f /var/www/html/version.php ]; then
+ installed_version=$(php -r 'require "/var/www/html/version.php"; echo "$OC_VersionString";')
+fi
+image_version=$(php -r 'require "/usr/src/nextcloud/version.php"; echo "$OC_VersionString";')
+
+if version_greater "$installed_version" "$image_version"; then
+ echo "Can't start Nextcloud because the version of the data ($installed_version) is higher than the docker image version ($image_version) and downgrading is not supported. Are you sure you have pulled the newest image version?"
+ exit 1
+fi
+
+if version_greater "$image_version" "$installed_version"; then
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_before
+ fi
+
+ rsync -a --delete --exclude /config/ --exclude /data/ --exclude /custom_apps/ /usr/src/nextcloud/ /var/www/html/
+
+ if [ ! -d /var/www/html/config ]; then
+ cp -arT /usr/src/nextcloud/config /var/www/html/config
+ fi
+
+ if [ ! -d /var/www/html/data ]; then
+ cp -arT /usr/src/nextcloud/data /var/www/html/data
+ fi
+
+ if [ ! -d /var/www/html/custom_apps ]; then
+ cp -arT /usr/src/nextcloud/custom_apps /var/www/html/custom_apps
+ cp -a /usr/src/nextcloud/config/apps.config.php /var/www/html/config/apps.config.php
+ fi
+
+ if [ "$installed_version" != "0.0.0~unknown" ]; then
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ upgrade --no-app-disable'
+
+ su - www-data -s /bin/bash -c 'php /var/www/html/occ app:list' > /tmp/list_after
+ echo "The following apps have beed disabled:"
+ diff <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_before) <(sed -n "/Enabled:/,/Disabled:/p" /tmp/list_after) | grep '<' | cut -d- -f2 | cut -d: -f1
+ rm -f /tmp/list_before /tmp/list_after
+ fi
fi
exec "$@"
diff --git a/Dockerfile-php7.template b/Dockerfile-php7.template
index 6dd989a5..345009d2 100644
--- a/Dockerfile-php7.template
+++ b/Dockerfile-php7.template
@@ -1,6 +1,7 @@
FROM php:7.1-%%VARIANT%%
RUN apt-get update && apt-get install -y \
+ rsync \
bzip2 \
libcurl4-openssl-dev \
libfreetype6-dev \
@@ -52,9 +53,26 @@ RUN curl -fsSL -o nextcloud.tar.bz2 \
&& gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2 \
&& rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc \
&& tar -xjf nextcloud.tar.bz2 -C /usr/src/ \
- && rm nextcloud.tar.bz2
+ && rm nextcloud.tar.bz2 \
+ && rm -rf /usr/src/nextcloud/updater \
+ # https://docs.nextcloud.com/server/11/admin_manual/installation/installation_wizard.html#setting-strong-directory-permissions
+ && mkdir -p /usr/src/nextcloud/data \
+ && mkdir -p /usr/src/nextcloud/custom_apps \
+ # only used in nextcloud 9 (assets)
+ && mkdir -p /usr/src/nextcloud/assets \
+ && find /usr/src/nextcloud/ -type f -print0 | xargs -0 chmod 0640 \
+ && find /usr/src/nextcloud/ -type d -print0 | xargs -0 chmod 0750 \
+ && chown -R root:www-data /usr/src/nextcloud/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/custom_apps/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/config/ \
+ # only used in nextcloud 9 (assets)
+ && chown -R www-data:www-data /usr/src/nextcloud/assets/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/data/ \
+ && chown -R www-data:www-data /usr/src/nextcloud/themes/ \
+ && chmod +x /usr/src/nextcloud/occ
COPY docker-entrypoint.sh /entrypoint.sh
+COPY apps.config.php /usr/src/nextcloud/config/apps.config.php
ENTRYPOINT ["/entrypoint.sh"]
CMD ["%%CMD%%"]
diff --git a/Dockerfile.template b/Dockerfile.template
index 3d713793..24ef5e9c 100644
--- a/Dockerfile.template
+++ b/Dockerfile.template
@@ -1,6 +1,7 @@
FROM php:5.6-%%VARIANT%%