mirror of
https://github.com/nextcloud/docker.git
synced 2025-03-15 19:05:09 +01:00
POC: Introduce Nextcloud based on Nginx web server.
This PR introduce POC of Nextcloud based on Nginx web server with php-fpm in separated container. Basic installation with SQLite and few operations in web gui were tested. Nginx dockerfile is generated from Dockerfile-nginx.template - FROM string has hardcoded variant - apache - There is no upstream PHP image with Nginx, due this generate-stackbrew-library is not able to identify parent correctly New files were introduced in image: - Dockerfile-nginx.template - nginx-foreground + simulates behavior of apache2-foreground cmd - 16.0/nginx/Dockerfile + generated from template Dockerfile-nginx.template - nextcloud.confx + Nginx vhost configuration - start_net.sh (temporary) + Helper script to create user-defined network for Docker + '--link' option for docker create is obsolete and we need communication between fpm and nginx container - start_container.sh (temporary) + Helper script to handle containers - Dockerfile + /Dockerfile for verification purposes Updated files: - set -x added to all shell scripts for easier troubleshooting (temporary) - update.sh + New variant introduced + Number of builded variant is limited for simplified CI. - .travis.yml (temporary) + Image push to registry for testing purposes - docker-entrypoint.sh + Recognizes new argument for entrypoint - nginx-foreground Be careful during review, github recognizes removed files for 15.0 release as renamed to 16.0/nginx variant Motivation/Usecase: - I have openvz based VPS where only old Docker 1.10 is supported. - Apache(in nextcloud container) in combination Nginx as a reverse proxy for multiple vhosts doesn't work correctly Image pull link: docker pull 1john2ci/nextcloud:apache-20190509 docker pull 1john2ci/nextcloud:fpm-20190509 Travis CI test: https://travis-ci.org/1john2/docker/builds/530329740 Deployment notes: - Clone source code - Create user-defined network for Docker - Start fpm container - Start nginx container
This commit is contained in:
parent
a2d0c57921
commit
b1cf796d55
79 changed files with 568 additions and 2082 deletions
30
.travis.yml
30
.travis.yml
|
@ -27,6 +27,20 @@ script:
|
||||||
after_script:
|
after_script:
|
||||||
- docker images
|
- docker images
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# For testing purposes only
|
||||||
|
# ##
|
||||||
|
- echo "1john2_password" | docker login -u "1john2ci" --password-stdin
|
||||||
|
|
||||||
|
- docker tag nextcloud:16.0-apache 1john2ci/nextcloud:apache-ncd-20190509
|
||||||
|
- docker push 1john2ci/nextcloud:apache-ncd-20190509
|
||||||
|
|
||||||
|
- docker tag nextcloud:16.0-nginx 1john2ci/nextcloud:nginx-ncd-20190509
|
||||||
|
- docker push 1john2ci/nextcloud:nginx-ncd-20190509
|
||||||
|
|
||||||
|
- docker tag nextcloud:16.0-fpm-full 1john2ci/nextcloud:fpm-ncd-20190509
|
||||||
|
- docker push 1john2ci/nextcloud:fpm-ncd-20190509
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
include:
|
include:
|
||||||
- &test-scripts
|
- &test-scripts
|
||||||
|
@ -50,20 +64,8 @@ jobs:
|
||||||
- ./generate-stackbrew-library.sh
|
- ./generate-stackbrew-library.sh
|
||||||
|
|
||||||
- stage: test images
|
- stage: test images
|
||||||
env: VERSION=14.0 VARIANT=fpm-alpine ARCH=amd64
|
env: VERSION=16.0 VARIANT=nginx ARCH=amd64
|
||||||
- env: VERSION=14.0 VARIANT=fpm-alpine ARCH=i386
|
- env: VERSION=16.0 VARIANT=nginx ARCH=i386
|
||||||
- env: VERSION=14.0 VARIANT=fpm ARCH=amd64
|
|
||||||
- env: VERSION=14.0 VARIANT=fpm ARCH=i386
|
|
||||||
- env: VERSION=14.0 VARIANT=apache ARCH=amd64
|
|
||||||
- env: VERSION=14.0 VARIANT=apache ARCH=i386
|
|
||||||
- env: VERSION=15.0 VARIANT=fpm-alpine ARCH=amd64
|
|
||||||
- env: VERSION=15.0 VARIANT=fpm-alpine ARCH=i386
|
|
||||||
- env: VERSION=15.0 VARIANT=fpm ARCH=amd64
|
|
||||||
- env: VERSION=15.0 VARIANT=fpm ARCH=i386
|
|
||||||
- env: VERSION=15.0 VARIANT=apache ARCH=amd64
|
|
||||||
- env: VERSION=15.0 VARIANT=apache ARCH=i386
|
|
||||||
- env: VERSION=16.0 VARIANT=fpm-alpine ARCH=amd64
|
|
||||||
- env: VERSION=16.0 VARIANT=fpm-alpine ARCH=i386
|
|
||||||
- env: VERSION=16.0 VARIANT=fpm ARCH=amd64
|
- env: VERSION=16.0 VARIANT=fpm ARCH=amd64
|
||||||
- env: VERSION=16.0 VARIANT=fpm ARCH=i386
|
- env: VERSION=16.0 VARIANT=fpm ARCH=i386
|
||||||
- env: VERSION=16.0 VARIANT=apache ARCH=amd64
|
- env: VERSION=16.0 VARIANT=apache ARCH=amd64
|
||||||
|
|
|
@ -1,146 +0,0 @@
|
||||||
# DO NOT EDIT: created by update.sh from Dockerfile-debian.template
|
|
||||||
FROM php:7.2-apache-stretch
|
|
||||||
|
|
||||||
# entrypoint.sh and cron.sh dependencies
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
apt-get update; \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
rsync \
|
|
||||||
bzip2 \
|
|
||||||
busybox-static \
|
|
||||||
; \
|
|
||||||
rm -rf /var/lib/apt/lists/*; \
|
|
||||||
\
|
|
||||||
mkdir -p /var/spool/cron/crontabs; \
|
|
||||||
echo '*/15 * * * * php -f /var/www/html/cron.php' > /var/spool/cron/crontabs/www-data
|
|
||||||
|
|
||||||
# install the PHP extensions we need
|
|
||||||
# see https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
savedAptMark="$(apt-mark showmanual)"; \
|
|
||||||
\
|
|
||||||
apt-get update; \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
libcurl4-openssl-dev \
|
|
||||||
libevent-dev \
|
|
||||||
libfreetype6-dev \
|
|
||||||
libicu-dev \
|
|
||||||
libjpeg-dev \
|
|
||||||
libldap2-dev \
|
|
||||||
libmcrypt-dev \
|
|
||||||
libmemcached-dev \
|
|
||||||
libpng-dev \
|
|
||||||
libpq-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libmagickwand-dev \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
|
|
||||||
docker-php-ext-configure gd --with-freetype-dir=/usr --with-png-dir=/usr --with-jpeg-dir=/usr; \
|
|
||||||
docker-php-ext-configure ldap --with-libdir="lib/$debMultiarch"; \
|
|
||||||
docker-php-ext-install \
|
|
||||||
exif \
|
|
||||||
gd \
|
|
||||||
intl \
|
|
||||||
ldap \
|
|
||||||
opcache \
|
|
||||||
pcntl \
|
|
||||||
pdo_mysql \
|
|
||||||
pdo_pgsql \
|
|
||||||
zip \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
# pecl will claim success even if one install fails, so we need to perform each install separately
|
|
||||||
pecl install APCu-5.1.17; \
|
|
||||||
pecl install memcached-3.1.3; \
|
|
||||||
pecl install redis-4.3.0; \
|
|
||||||
pecl install imagick-3.4.3; \
|
|
||||||
\
|
|
||||||
docker-php-ext-enable \
|
|
||||||
apcu \
|
|
||||||
memcached \
|
|
||||||
redis \
|
|
||||||
imagick \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
|
|
||||||
apt-mark auto '.*' > /dev/null; \
|
|
||||||
apt-mark manual $savedAptMark; \
|
|
||||||
ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \
|
|
||||||
| awk '/=>/ { print $3 }' \
|
|
||||||
| sort -u \
|
|
||||||
| xargs -r dpkg-query -S \
|
|
||||||
| cut -d: -f1 \
|
|
||||||
| sort -u \
|
|
||||||
| xargs -rt apt-mark manual; \
|
|
||||||
\
|
|
||||||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# set recommended PHP.ini settings
|
|
||||||
# see https://docs.nextcloud.com/server/12/admin_manual/configuration_server/server_tuning.html#enable-php-opcache
|
|
||||||
RUN { \
|
|
||||||
echo 'opcache.enable=1'; \
|
|
||||||
echo 'opcache.enable_cli=1'; \
|
|
||||||
echo 'opcache.interned_strings_buffer=8'; \
|
|
||||||
echo 'opcache.max_accelerated_files=10000'; \
|
|
||||||
echo 'opcache.memory_consumption=128'; \
|
|
||||||
echo 'opcache.save_comments=1'; \
|
|
||||||
echo 'opcache.revalidate_freq=1'; \
|
|
||||||
} > /usr/local/etc/php/conf.d/opcache-recommended.ini; \
|
|
||||||
\
|
|
||||||
echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \
|
|
||||||
\
|
|
||||||
echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \
|
|
||||||
\
|
|
||||||
mkdir /var/www/data; \
|
|
||||||
chown -R www-data:root /var/www; \
|
|
||||||
chmod -R g=u /var/www
|
|
||||||
|
|
||||||
VOLUME /var/www/html
|
|
||||||
|
|
||||||
RUN a2enmod rewrite remoteip ;\
|
|
||||||
{\
|
|
||||||
echo RemoteIPHeader X-Real-IP ;\
|
|
||||||
echo RemoteIPTrustedProxy 10.0.0.0/8 ;\
|
|
||||||
echo RemoteIPTrustedProxy 172.16.0.0/12 ;\
|
|
||||||
echo RemoteIPTrustedProxy 192.168.0.0/16 ;\
|
|
||||||
} > /etc/apache2/conf-available/remoteip.conf;\
|
|
||||||
a2enconf remoteip
|
|
||||||
|
|
||||||
ENV NEXTCLOUD_VERSION 14.0.10
|
|
||||||
|
|
||||||
RUN set -ex; \
|
|
||||||
fetchDeps=" \
|
|
||||||
gnupg \
|
|
||||||
dirmngr \
|
|
||||||
"; \
|
|
||||||
apt-get update; \
|
|
||||||
apt-get install -y --no-install-recommends $fetchDeps; \
|
|
||||||
\
|
|
||||||
curl -fsSL -o nextcloud.tar.bz2 \
|
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \
|
|
||||||
curl -fsSL -o nextcloud.tar.bz2.asc \
|
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \
|
|
||||||
export GNUPGHOME="$(mktemp -d)"; \
|
|
||||||
# gpg key from https://nextcloud.com/nextcloud.asc
|
|
||||||
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \
|
|
||||||
gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
|
|
||||||
tar -xjf nextcloud.tar.bz2 -C /usr/src/; \
|
|
||||||
gpgconf --kill all; \
|
|
||||||
rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
|
|
||||||
rm -rf /usr/src/nextcloud/updater; \
|
|
||||||
mkdir -p /usr/src/nextcloud/data; \
|
|
||||||
mkdir -p /usr/src/nextcloud/custom_apps; \
|
|
||||||
chmod +x /usr/src/nextcloud/occ; \
|
|
||||||
\
|
|
||||||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $fetchDeps; \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
COPY *.sh upgrade.exclude /
|
|
||||||
COPY config/* /usr/src/nextcloud/config/
|
|
||||||
|
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
|
||||||
CMD ["apache2-foreground"]
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
$CONFIG = array (
|
|
||||||
'htaccess.RewriteBase' => '/',
|
|
||||||
);
|
|
|
@ -1,142 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# version_greater A B returns whether A > B
|
|
||||||
version_greater() {
|
|
||||||
[ "$(printf '%s\n' "$@" | sort -t '.' -n -k1,1 -k2,2 -k3,3 -k4,4 | head -n 1)" != "$1" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
# return true if specified directory is empty
|
|
||||||
directory_empty() {
|
|
||||||
[ -z "$(ls -A "$1/")" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
run_as() {
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
su -p www-data -s /bin/sh -c "$1"
|
|
||||||
else
|
|
||||||
sh -c "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
|
||||||
if [ -n "${REDIS_HOST+x}" ]; then
|
|
||||||
|
|
||||||
echo "Configuring Redis as session handler"
|
|
||||||
{
|
|
||||||
echo 'session.save_handler = redis'
|
|
||||||
echo "session.save_path = \"tcp://${REDIS_HOST}:${REDIS_HOST_PORT:=6379}\""
|
|
||||||
} > /usr/local/etc/php/conf.d/redis-session.ini
|
|
||||||
fi
|
|
||||||
|
|
||||||
installed_version="0.0.0.0"
|
|
||||||
if [ -f /var/www/html/version.php ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
fi
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
image_version="$(php -r 'require "/usr/src/nextcloud/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
|
|
||||||
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
|
|
||||||
echo "Initializing nextcloud $image_version ..."
|
|
||||||
if [ "$installed_version" != "0.0.0.0" ]; then
|
|
||||||
echo "Upgrading nextcloud from $installed_version ..."
|
|
||||||
run_as 'php /var/www/html/occ app:list' | sed -n "/Enabled:/,/Disabled:/p" > /tmp/list_before
|
|
||||||
fi
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
rsync_options="-rlDog --chown www-data:root"
|
|
||||||
else
|
|
||||||
rsync_options="-rlD"
|
|
||||||
fi
|
|
||||||
rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/nextcloud/ /var/www/html/
|
|
||||||
|
|
||||||
for dir in config data custom_apps themes; do
|
|
||||||
if [ ! -d "/var/www/html/$dir" ] || directory_empty "/var/www/html/$dir"; then
|
|
||||||
rsync $rsync_options --include "/$dir/" --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
rsync $rsync_options --include '/version.php' --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
echo "Initializing finished"
|
|
||||||
|
|
||||||
#install
|
|
||||||
if [ "$installed_version" = "0.0.0.0" ]; then
|
|
||||||
echo "New nextcloud instance"
|
|
||||||
|
|
||||||
if [ -n "${NEXTCLOUD_ADMIN_USER+x}" ] && [ -n "${NEXTCLOUD_ADMIN_PASSWORD+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options='-n --admin-user "$NEXTCLOUD_ADMIN_USER" --admin-pass "$NEXTCLOUD_ADMIN_PASSWORD"'
|
|
||||||
if [ -n "${NEXTCLOUD_TABLE_PREFIX+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-table-prefix "$NEXTCLOUD_TABLE_PREFIX"'
|
|
||||||
else
|
|
||||||
install_options=$install_options' --database-table-prefix ""'
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_DATA_DIR+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --data-dir "$NEXTCLOUD_DATA_DIR"'
|
|
||||||
fi
|
|
||||||
|
|
||||||
install=false
|
|
||||||
if [ -n "${SQLITE_DATABASE+x}" ]; then
|
|
||||||
echo "Installing with SQLite database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-name "$SQLITE_DATABASE"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ]; then
|
|
||||||
echo "Installing with MySQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database mysql --database-name "$MYSQL_DATABASE" --database-user "$MYSQL_USER" --database-pass "$MYSQL_PASSWORD" --database-host "$MYSQL_HOST"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${POSTGRES_DB+x}" ] && [ -n "${POSTGRES_USER+x}" ] && [ -n "${POSTGRES_PASSWORD+x}" ] && [ -n "${POSTGRES_HOST+x}" ]; then
|
|
||||||
echo "Installing with PostgreSQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database pgsql --database-name "$POSTGRES_DB" --database-user "$POSTGRES_USER" --database-pass "$POSTGRES_PASSWORD" --database-host "$POSTGRES_HOST"'
|
|
||||||
install=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$install" = true ]; then
|
|
||||||
echo "starting nextcloud installation"
|
|
||||||
max_retries=10
|
|
||||||
try=0
|
|
||||||
until run_as "php /var/www/html/occ maintenance:install $install_options" || [ "$try" -gt "$max_retries" ]
|
|
||||||
do
|
|
||||||
echo "retrying install..."
|
|
||||||
try=$((try+1))
|
|
||||||
sleep 3s
|
|
||||||
done
|
|
||||||
if [ "$try" -gt "$max_retries" ]; then
|
|
||||||
echo "installing of nextcloud failed!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_TRUSTED_DOMAINS+x}" ]; then
|
|
||||||
echo "setting trusted domains…"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=1
|
|
||||||
for DOMAIN in $NEXTCLOUD_TRUSTED_DOMAINS ; do
|
|
||||||
DOMAIN=$(echo "$DOMAIN" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
|
||||||
run_as "php /var/www/html/occ config:system:set trusted_domains $NC_TRUSTED_DOMAIN_IDX --value=$DOMAIN"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=$(($NC_TRUSTED_DOMAIN_IDX+1))
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "running web-based installer on first connect!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#upgrade
|
|
||||||
else
|
|
||||||
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
|
|
||||||
echo "The following apps have been disabled:"
|
|
||||||
diff /tmp/list_before /tmp/list_after | grep '<' | cut -d- -f2 | cut -d: -f1
|
|
||||||
rm -f /tmp/list_before /tmp/list_after
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
|
@ -1,123 +0,0 @@
|
||||||
# DO NOT EDIT: created by update.sh from Dockerfile-alpine.template
|
|
||||||
FROM php:7.2-fpm-alpine3.9
|
|
||||||
|
|
||||||
# entrypoint.sh and cron.sh dependencies
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
apk add --no-cache \
|
|
||||||
rsync \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
rm /var/spool/cron/crontabs/root; \
|
|
||||||
echo '*/15 * * * * php -f /var/www/html/cron.php' > /var/spool/cron/crontabs/www-data
|
|
||||||
|
|
||||||
# install the PHP extensions we need
|
|
||||||
# see https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
apk add --no-cache --virtual .build-deps \
|
|
||||||
$PHPIZE_DEPS \
|
|
||||||
autoconf \
|
|
||||||
freetype-dev \
|
|
||||||
icu-dev \
|
|
||||||
libevent-dev \
|
|
||||||
libjpeg-turbo-dev \
|
|
||||||
libmcrypt-dev \
|
|
||||||
libpng-dev \
|
|
||||||
libmemcached-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
openldap-dev \
|
|
||||||
pcre-dev \
|
|
||||||
postgresql-dev \
|
|
||||||
imagemagick-dev \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
docker-php-ext-configure gd --with-freetype-dir=/usr --with-png-dir=/usr --with-jpeg-dir=/usr; \
|
|
||||||
docker-php-ext-configure ldap; \
|
|
||||||
docker-php-ext-install \
|
|
||||||
exif \
|
|
||||||
gd \
|
|
||||||
intl \
|
|
||||||
ldap \
|
|
||||||
opcache \
|
|
||||||
pcntl \
|
|
||||||
pdo_mysql \
|
|
||||||
pdo_pgsql \
|
|
||||||
zip \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
# pecl will claim success even if one install fails, so we need to perform each install separately
|
|
||||||
pecl install APCu-5.1.17; \
|
|
||||||
pecl install memcached-3.1.3; \
|
|
||||||
pecl install redis-4.3.0; \
|
|
||||||
pecl install imagick-3.4.3; \
|
|
||||||
\
|
|
||||||
docker-php-ext-enable \
|
|
||||||
apcu \
|
|
||||||
memcached \
|
|
||||||
redis \
|
|
||||||
imagick \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
runDeps="$( \
|
|
||||||
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
|
|
||||||
| tr ',' '\n' \
|
|
||||||
| sort -u \
|
|
||||||
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
|
|
||||||
)"; \
|
|
||||||
apk add --virtual .nextcloud-phpext-rundeps $runDeps; \
|
|
||||||
apk del .build-deps
|
|
||||||
|
|
||||||
# set recommended PHP.ini settings
|
|
||||||
# see https://docs.nextcloud.com/server/12/admin_manual/configuration_server/server_tuning.html#enable-php-opcache
|
|
||||||
RUN { \
|
|
||||||
echo 'opcache.enable=1'; \
|
|
||||||
echo 'opcache.enable_cli=1'; \
|
|
||||||
echo 'opcache.interned_strings_buffer=8'; \
|
|
||||||
echo 'opcache.max_accelerated_files=10000'; \
|
|
||||||
echo 'opcache.memory_consumption=128'; \
|
|
||||||
echo 'opcache.save_comments=1'; \
|
|
||||||
echo 'opcache.revalidate_freq=1'; \
|
|
||||||
} > /usr/local/etc/php/conf.d/opcache-recommended.ini; \
|
|
||||||
\
|
|
||||||
echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \
|
|
||||||
\
|
|
||||||
echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \
|
|
||||||
\
|
|
||||||
mkdir /var/www/data; \
|
|
||||||
chown -R www-data:root /var/www; \
|
|
||||||
chmod -R g=u /var/www
|
|
||||||
|
|
||||||
VOLUME /var/www/html
|
|
||||||
|
|
||||||
|
|
||||||
ENV NEXTCLOUD_VERSION 14.0.10
|
|
||||||
|
|
||||||
RUN set -ex; \
|
|
||||||
apk add --no-cache --virtual .fetch-deps \
|
|
||||||
bzip2 \
|
|
||||||
gnupg \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
curl -fsSL -o nextcloud.tar.bz2 \
|
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \
|
|
||||||
curl -fsSL -o nextcloud.tar.bz2.asc \
|
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \
|
|
||||||
export GNUPGHOME="$(mktemp -d)"; \
|
|
||||||
# gpg key from https://nextcloud.com/nextcloud.asc
|
|
||||||
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \
|
|
||||||
gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
|
|
||||||
tar -xjf nextcloud.tar.bz2 -C /usr/src/; \
|
|
||||||
gpgconf --kill all; \
|
|
||||||
rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
|
|
||||||
rm -rf /usr/src/nextcloud/updater; \
|
|
||||||
mkdir -p /usr/src/nextcloud/data; \
|
|
||||||
mkdir -p /usr/src/nextcloud/custom_apps; \
|
|
||||||
chmod +x /usr/src/nextcloud/occ; \
|
|
||||||
apk del .fetch-deps
|
|
||||||
|
|
||||||
COPY *.sh upgrade.exclude /
|
|
||||||
COPY config/* /usr/src/nextcloud/config/
|
|
||||||
|
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
|
||||||
CMD ["php-fpm"]
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.local' => '\OC\Memcache\APCu',
|
|
||||||
);
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?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,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
$autoconfig_enabled = false;
|
|
||||||
|
|
||||||
if (getenv('SQLITE_DATABASE')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "sqlite";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('SQLITE_DATABASE');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('MYSQL_DATABASE') && getenv('MYSQL_USER') && getenv('MYSQL_PASSWORD') && getenv('MYSQL_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "mysql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('MYSQL_DATABASE');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('MYSQL_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('MYSQL_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('MYSQL_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('POSTGRES_DB') && getenv('POSTGRES_USER') && getenv('POSTGRES_PASSWORD') && getenv('POSTGRES_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "pgsql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('POSTGRES_DB');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('POSTGRES_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('POSTGRES_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('POSTGRES_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($autoconfig_enabled) {
|
|
||||||
$AUTOCONFIG["dbtableprefix"] = getenv('NEXTCLOUD_TABLE_PREFIX') ?: "";
|
|
||||||
|
|
||||||
$AUTOCONFIG["directory"] = getenv('NEXTCLOUD_DATA_DIR') ?: "/var/www/html/data";
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('REDIS_HOST')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.distributed' => '\OC\Memcache\Redis',
|
|
||||||
'memcache.locking' => '\OC\Memcache\Redis',
|
|
||||||
'redis' => array(
|
|
||||||
'host' => getenv('REDIS_HOST'),
|
|
||||||
'port' => getenv('REDIS_HOST_PORT') ?: 6379,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('SMTP_HOST') && getenv('MAIL_FROM_ADDRESS') && getenv('MAIL_DOMAIN')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'mail_smtpmode' => 'smtp',
|
|
||||||
'mail_smtphost' => getenv('SMTP_HOST'),
|
|
||||||
'mail_smtpport' => getenv('SMTP_PORT') ?: (getenv('SMTP_SECURE') ? 465 : 25),
|
|
||||||
'mail_smtpsecure' => getenv('SMTP_SECURE') ?: '',
|
|
||||||
'mail_smtpauth' => getenv('SMTP_NAME') && getenv('SMTP_PASSWORD'),
|
|
||||||
'mail_smtpauthtype' => getenv('SMTP_AUTHTYPE') ?: 'LOGIN',
|
|
||||||
'mail_smtpname' => getenv('SMTP_NAME') ?: '',
|
|
||||||
'mail_smtppassword' => getenv('SMTP_PASSWORD') ?: '',
|
|
||||||
'mail_from_address' => getenv('MAIL_FROM_ADDRESS'),
|
|
||||||
'mail_domain' => getenv('MAIL_DOMAIN'),
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
exec busybox crond -f -l 0 -L /dev/stdout
|
|
|
@ -1,142 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# version_greater A B returns whether A > B
|
|
||||||
version_greater() {
|
|
||||||
[ "$(printf '%s\n' "$@" | sort -t '.' -n -k1,1 -k2,2 -k3,3 -k4,4 | head -n 1)" != "$1" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
# return true if specified directory is empty
|
|
||||||
directory_empty() {
|
|
||||||
[ -z "$(ls -A "$1/")" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
run_as() {
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
su -p www-data -s /bin/sh -c "$1"
|
|
||||||
else
|
|
||||||
sh -c "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
|
||||||
if [ -n "${REDIS_HOST+x}" ]; then
|
|
||||||
|
|
||||||
echo "Configuring Redis as session handler"
|
|
||||||
{
|
|
||||||
echo 'session.save_handler = redis'
|
|
||||||
echo "session.save_path = \"tcp://${REDIS_HOST}:${REDIS_HOST_PORT:=6379}\""
|
|
||||||
} > /usr/local/etc/php/conf.d/redis-session.ini
|
|
||||||
fi
|
|
||||||
|
|
||||||
installed_version="0.0.0.0"
|
|
||||||
if [ -f /var/www/html/version.php ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
fi
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
image_version="$(php -r 'require "/usr/src/nextcloud/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
|
|
||||||
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
|
|
||||||
echo "Initializing nextcloud $image_version ..."
|
|
||||||
if [ "$installed_version" != "0.0.0.0" ]; then
|
|
||||||
echo "Upgrading nextcloud from $installed_version ..."
|
|
||||||
run_as 'php /var/www/html/occ app:list' | sed -n "/Enabled:/,/Disabled:/p" > /tmp/list_before
|
|
||||||
fi
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
rsync_options="-rlDog --chown www-data:root"
|
|
||||||
else
|
|
||||||
rsync_options="-rlD"
|
|
||||||
fi
|
|
||||||
rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/nextcloud/ /var/www/html/
|
|
||||||
|
|
||||||
for dir in config data custom_apps themes; do
|
|
||||||
if [ ! -d "/var/www/html/$dir" ] || directory_empty "/var/www/html/$dir"; then
|
|
||||||
rsync $rsync_options --include "/$dir/" --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
rsync $rsync_options --include '/version.php' --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
echo "Initializing finished"
|
|
||||||
|
|
||||||
#install
|
|
||||||
if [ "$installed_version" = "0.0.0.0" ]; then
|
|
||||||
echo "New nextcloud instance"
|
|
||||||
|
|
||||||
if [ -n "${NEXTCLOUD_ADMIN_USER+x}" ] && [ -n "${NEXTCLOUD_ADMIN_PASSWORD+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options='-n --admin-user "$NEXTCLOUD_ADMIN_USER" --admin-pass "$NEXTCLOUD_ADMIN_PASSWORD"'
|
|
||||||
if [ -n "${NEXTCLOUD_TABLE_PREFIX+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-table-prefix "$NEXTCLOUD_TABLE_PREFIX"'
|
|
||||||
else
|
|
||||||
install_options=$install_options' --database-table-prefix ""'
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_DATA_DIR+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --data-dir "$NEXTCLOUD_DATA_DIR"'
|
|
||||||
fi
|
|
||||||
|
|
||||||
install=false
|
|
||||||
if [ -n "${SQLITE_DATABASE+x}" ]; then
|
|
||||||
echo "Installing with SQLite database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-name "$SQLITE_DATABASE"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ]; then
|
|
||||||
echo "Installing with MySQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database mysql --database-name "$MYSQL_DATABASE" --database-user "$MYSQL_USER" --database-pass "$MYSQL_PASSWORD" --database-host "$MYSQL_HOST"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${POSTGRES_DB+x}" ] && [ -n "${POSTGRES_USER+x}" ] && [ -n "${POSTGRES_PASSWORD+x}" ] && [ -n "${POSTGRES_HOST+x}" ]; then
|
|
||||||
echo "Installing with PostgreSQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database pgsql --database-name "$POSTGRES_DB" --database-user "$POSTGRES_USER" --database-pass "$POSTGRES_PASSWORD" --database-host "$POSTGRES_HOST"'
|
|
||||||
install=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$install" = true ]; then
|
|
||||||
echo "starting nextcloud installation"
|
|
||||||
max_retries=10
|
|
||||||
try=0
|
|
||||||
until run_as "php /var/www/html/occ maintenance:install $install_options" || [ "$try" -gt "$max_retries" ]
|
|
||||||
do
|
|
||||||
echo "retrying install..."
|
|
||||||
try=$((try+1))
|
|
||||||
sleep 3s
|
|
||||||
done
|
|
||||||
if [ "$try" -gt "$max_retries" ]; then
|
|
||||||
echo "installing of nextcloud failed!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_TRUSTED_DOMAINS+x}" ]; then
|
|
||||||
echo "setting trusted domains…"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=1
|
|
||||||
for DOMAIN in $NEXTCLOUD_TRUSTED_DOMAINS ; do
|
|
||||||
DOMAIN=$(echo "$DOMAIN" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
|
||||||
run_as "php /var/www/html/occ config:system:set trusted_domains $NC_TRUSTED_DOMAIN_IDX --value=$DOMAIN"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=$(($NC_TRUSTED_DOMAIN_IDX+1))
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "running web-based installer on first connect!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#upgrade
|
|
||||||
else
|
|
||||||
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
|
|
||||||
echo "The following apps have been disabled:"
|
|
||||||
diff /tmp/list_before /tmp/list_after | grep '<' | cut -d- -f2 | cut -d: -f1
|
|
||||||
rm -f /tmp/list_before /tmp/list_after
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
|
@ -1,5 +0,0 @@
|
||||||
/config/
|
|
||||||
/data/
|
|
||||||
/custom_apps/
|
|
||||||
/themes/
|
|
||||||
/version.php
|
|
|
@ -1,138 +0,0 @@
|
||||||
# DO NOT EDIT: created by update.sh from Dockerfile-debian.template
|
|
||||||
FROM php:7.2-fpm-stretch
|
|
||||||
|
|
||||||
# entrypoint.sh and cron.sh dependencies
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
apt-get update; \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
rsync \
|
|
||||||
bzip2 \
|
|
||||||
busybox-static \
|
|
||||||
; \
|
|
||||||
rm -rf /var/lib/apt/lists/*; \
|
|
||||||
\
|
|
||||||
mkdir -p /var/spool/cron/crontabs; \
|
|
||||||
echo '*/15 * * * * php -f /var/www/html/cron.php' > /var/spool/cron/crontabs/www-data
|
|
||||||
|
|
||||||
# install the PHP extensions we need
|
|
||||||
# see https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
savedAptMark="$(apt-mark showmanual)"; \
|
|
||||||
\
|
|
||||||
apt-get update; \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
libcurl4-openssl-dev \
|
|
||||||
libevent-dev \
|
|
||||||
libfreetype6-dev \
|
|
||||||
libicu-dev \
|
|
||||||
libjpeg-dev \
|
|
||||||
libldap2-dev \
|
|
||||||
libmcrypt-dev \
|
|
||||||
libmemcached-dev \
|
|
||||||
libpng-dev \
|
|
||||||
libpq-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libmagickwand-dev \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
|
|
||||||
docker-php-ext-configure gd --with-freetype-dir=/usr --with-png-dir=/usr --with-jpeg-dir=/usr; \
|
|
||||||
docker-php-ext-configure ldap --with-libdir="lib/$debMultiarch"; \
|
|
||||||
docker-php-ext-install \
|
|
||||||
exif \
|
|
||||||
gd \
|
|
||||||
intl \
|
|
||||||
ldap \
|
|
||||||
opcache \
|
|
||||||
pcntl \
|
|
||||||
pdo_mysql \
|
|
||||||
pdo_pgsql \
|
|
||||||
zip \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
# pecl will claim success even if one install fails, so we need to perform each install separately
|
|
||||||
pecl install APCu-5.1.17; \
|
|
||||||
pecl install memcached-3.1.3; \
|
|
||||||
pecl install redis-4.3.0; \
|
|
||||||
pecl install imagick-3.4.3; \
|
|
||||||
\
|
|
||||||
docker-php-ext-enable \
|
|
||||||
apcu \
|
|
||||||
memcached \
|
|
||||||
redis \
|
|
||||||
imagick \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
|
|
||||||
apt-mark auto '.*' > /dev/null; \
|
|
||||||
apt-mark manual $savedAptMark; \
|
|
||||||
ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \
|
|
||||||
| awk '/=>/ { print $3 }' \
|
|
||||||
| sort -u \
|
|
||||||
| xargs -r dpkg-query -S \
|
|
||||||
| cut -d: -f1 \
|
|
||||||
| sort -u \
|
|
||||||
| xargs -rt apt-mark manual; \
|
|
||||||
\
|
|
||||||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# set recommended PHP.ini settings
|
|
||||||
# see https://docs.nextcloud.com/server/12/admin_manual/configuration_server/server_tuning.html#enable-php-opcache
|
|
||||||
RUN { \
|
|
||||||
echo 'opcache.enable=1'; \
|
|
||||||
echo 'opcache.enable_cli=1'; \
|
|
||||||
echo 'opcache.interned_strings_buffer=8'; \
|
|
||||||
echo 'opcache.max_accelerated_files=10000'; \
|
|
||||||
echo 'opcache.memory_consumption=128'; \
|
|
||||||
echo 'opcache.save_comments=1'; \
|
|
||||||
echo 'opcache.revalidate_freq=1'; \
|
|
||||||
} > /usr/local/etc/php/conf.d/opcache-recommended.ini; \
|
|
||||||
\
|
|
||||||
echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \
|
|
||||||
\
|
|
||||||
echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \
|
|
||||||
\
|
|
||||||
mkdir /var/www/data; \
|
|
||||||
chown -R www-data:root /var/www; \
|
|
||||||
chmod -R g=u /var/www
|
|
||||||
|
|
||||||
VOLUME /var/www/html
|
|
||||||
|
|
||||||
|
|
||||||
ENV NEXTCLOUD_VERSION 14.0.10
|
|
||||||
|
|
||||||
RUN set -ex; \
|
|
||||||
fetchDeps=" \
|
|
||||||
gnupg \
|
|
||||||
dirmngr \
|
|
||||||
"; \
|
|
||||||
apt-get update; \
|
|
||||||
apt-get install -y --no-install-recommends $fetchDeps; \
|
|
||||||
\
|
|
||||||
curl -fsSL -o nextcloud.tar.bz2 \
|
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \
|
|
||||||
curl -fsSL -o nextcloud.tar.bz2.asc \
|
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \
|
|
||||||
export GNUPGHOME="$(mktemp -d)"; \
|
|
||||||
# gpg key from https://nextcloud.com/nextcloud.asc
|
|
||||||
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \
|
|
||||||
gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
|
|
||||||
tar -xjf nextcloud.tar.bz2 -C /usr/src/; \
|
|
||||||
gpgconf --kill all; \
|
|
||||||
rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
|
|
||||||
rm -rf /usr/src/nextcloud/updater; \
|
|
||||||
mkdir -p /usr/src/nextcloud/data; \
|
|
||||||
mkdir -p /usr/src/nextcloud/custom_apps; \
|
|
||||||
chmod +x /usr/src/nextcloud/occ; \
|
|
||||||
\
|
|
||||||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $fetchDeps; \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
COPY *.sh upgrade.exclude /
|
|
||||||
COPY config/* /usr/src/nextcloud/config/
|
|
||||||
|
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
|
||||||
CMD ["php-fpm"]
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.local' => '\OC\Memcache\APCu',
|
|
||||||
);
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?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,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
$autoconfig_enabled = false;
|
|
||||||
|
|
||||||
if (getenv('SQLITE_DATABASE')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "sqlite";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('SQLITE_DATABASE');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('MYSQL_DATABASE') && getenv('MYSQL_USER') && getenv('MYSQL_PASSWORD') && getenv('MYSQL_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "mysql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('MYSQL_DATABASE');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('MYSQL_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('MYSQL_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('MYSQL_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('POSTGRES_DB') && getenv('POSTGRES_USER') && getenv('POSTGRES_PASSWORD') && getenv('POSTGRES_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "pgsql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('POSTGRES_DB');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('POSTGRES_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('POSTGRES_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('POSTGRES_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($autoconfig_enabled) {
|
|
||||||
$AUTOCONFIG["dbtableprefix"] = getenv('NEXTCLOUD_TABLE_PREFIX') ?: "";
|
|
||||||
|
|
||||||
$AUTOCONFIG["directory"] = getenv('NEXTCLOUD_DATA_DIR') ?: "/var/www/html/data";
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('REDIS_HOST')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.distributed' => '\OC\Memcache\Redis',
|
|
||||||
'memcache.locking' => '\OC\Memcache\Redis',
|
|
||||||
'redis' => array(
|
|
||||||
'host' => getenv('REDIS_HOST'),
|
|
||||||
'port' => getenv('REDIS_HOST_PORT') ?: 6379,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('SMTP_HOST') && getenv('MAIL_FROM_ADDRESS') && getenv('MAIL_DOMAIN')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'mail_smtpmode' => 'smtp',
|
|
||||||
'mail_smtphost' => getenv('SMTP_HOST'),
|
|
||||||
'mail_smtpport' => getenv('SMTP_PORT') ?: (getenv('SMTP_SECURE') ? 465 : 25),
|
|
||||||
'mail_smtpsecure' => getenv('SMTP_SECURE') ?: '',
|
|
||||||
'mail_smtpauth' => getenv('SMTP_NAME') && getenv('SMTP_PASSWORD'),
|
|
||||||
'mail_smtpauthtype' => getenv('SMTP_AUTHTYPE') ?: 'LOGIN',
|
|
||||||
'mail_smtpname' => getenv('SMTP_NAME') ?: '',
|
|
||||||
'mail_smtppassword' => getenv('SMTP_PASSWORD') ?: '',
|
|
||||||
'mail_from_address' => getenv('MAIL_FROM_ADDRESS'),
|
|
||||||
'mail_domain' => getenv('MAIL_DOMAIN'),
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
exec busybox crond -f -l 0 -L /dev/stdout
|
|
|
@ -1,5 +0,0 @@
|
||||||
/config/
|
|
||||||
/data/
|
|
||||||
/custom_apps/
|
|
||||||
/themes/
|
|
||||||
/version.php
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
$CONFIG = array (
|
|
||||||
'htaccess.RewriteBase' => '/',
|
|
||||||
);
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.local' => '\OC\Memcache\APCu',
|
|
||||||
);
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?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,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
$autoconfig_enabled = false;
|
|
||||||
|
|
||||||
if (getenv('SQLITE_DATABASE')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "sqlite";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('SQLITE_DATABASE');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('MYSQL_DATABASE') && getenv('MYSQL_USER') && getenv('MYSQL_PASSWORD') && getenv('MYSQL_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "mysql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('MYSQL_DATABASE');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('MYSQL_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('MYSQL_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('MYSQL_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('POSTGRES_DB') && getenv('POSTGRES_USER') && getenv('POSTGRES_PASSWORD') && getenv('POSTGRES_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "pgsql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('POSTGRES_DB');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('POSTGRES_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('POSTGRES_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('POSTGRES_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($autoconfig_enabled) {
|
|
||||||
$AUTOCONFIG["dbtableprefix"] = getenv('NEXTCLOUD_TABLE_PREFIX') ?: "";
|
|
||||||
|
|
||||||
$AUTOCONFIG["directory"] = getenv('NEXTCLOUD_DATA_DIR') ?: "/var/www/html/data";
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('REDIS_HOST')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.distributed' => '\OC\Memcache\Redis',
|
|
||||||
'memcache.locking' => '\OC\Memcache\Redis',
|
|
||||||
'redis' => array(
|
|
||||||
'host' => getenv('REDIS_HOST'),
|
|
||||||
'port' => getenv('REDIS_HOST_PORT') ?: 6379,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('SMTP_HOST') && getenv('MAIL_FROM_ADDRESS') && getenv('MAIL_DOMAIN')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'mail_smtpmode' => 'smtp',
|
|
||||||
'mail_smtphost' => getenv('SMTP_HOST'),
|
|
||||||
'mail_smtpport' => getenv('SMTP_PORT') ?: (getenv('SMTP_SECURE') ? 465 : 25),
|
|
||||||
'mail_smtpsecure' => getenv('SMTP_SECURE') ?: '',
|
|
||||||
'mail_smtpauth' => getenv('SMTP_NAME') && getenv('SMTP_PASSWORD'),
|
|
||||||
'mail_smtpauthtype' => getenv('SMTP_AUTHTYPE') ?: 'LOGIN',
|
|
||||||
'mail_smtpname' => getenv('SMTP_NAME') ?: '',
|
|
||||||
'mail_smtppassword' => getenv('SMTP_PASSWORD') ?: '',
|
|
||||||
'mail_from_address' => getenv('MAIL_FROM_ADDRESS'),
|
|
||||||
'mail_domain' => getenv('MAIL_DOMAIN'),
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
exec busybox crond -f -l 0 -L /dev/stdout
|
|
|
@ -1,142 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# version_greater A B returns whether A > B
|
|
||||||
version_greater() {
|
|
||||||
[ "$(printf '%s\n' "$@" | sort -t '.' -n -k1,1 -k2,2 -k3,3 -k4,4 | head -n 1)" != "$1" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
# return true if specified directory is empty
|
|
||||||
directory_empty() {
|
|
||||||
[ -z "$(ls -A "$1/")" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
run_as() {
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
su -p www-data -s /bin/sh -c "$1"
|
|
||||||
else
|
|
||||||
sh -c "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
|
||||||
if [ -n "${REDIS_HOST+x}" ]; then
|
|
||||||
|
|
||||||
echo "Configuring Redis as session handler"
|
|
||||||
{
|
|
||||||
echo 'session.save_handler = redis'
|
|
||||||
echo "session.save_path = \"tcp://${REDIS_HOST}:${REDIS_HOST_PORT:=6379}\""
|
|
||||||
} > /usr/local/etc/php/conf.d/redis-session.ini
|
|
||||||
fi
|
|
||||||
|
|
||||||
installed_version="0.0.0.0"
|
|
||||||
if [ -f /var/www/html/version.php ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
fi
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
image_version="$(php -r 'require "/usr/src/nextcloud/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
|
|
||||||
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
|
|
||||||
echo "Initializing nextcloud $image_version ..."
|
|
||||||
if [ "$installed_version" != "0.0.0.0" ]; then
|
|
||||||
echo "Upgrading nextcloud from $installed_version ..."
|
|
||||||
run_as 'php /var/www/html/occ app:list' | sed -n "/Enabled:/,/Disabled:/p" > /tmp/list_before
|
|
||||||
fi
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
rsync_options="-rlDog --chown www-data:root"
|
|
||||||
else
|
|
||||||
rsync_options="-rlD"
|
|
||||||
fi
|
|
||||||
rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/nextcloud/ /var/www/html/
|
|
||||||
|
|
||||||
for dir in config data custom_apps themes; do
|
|
||||||
if [ ! -d "/var/www/html/$dir" ] || directory_empty "/var/www/html/$dir"; then
|
|
||||||
rsync $rsync_options --include "/$dir/" --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
rsync $rsync_options --include '/version.php' --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
echo "Initializing finished"
|
|
||||||
|
|
||||||
#install
|
|
||||||
if [ "$installed_version" = "0.0.0.0" ]; then
|
|
||||||
echo "New nextcloud instance"
|
|
||||||
|
|
||||||
if [ -n "${NEXTCLOUD_ADMIN_USER+x}" ] && [ -n "${NEXTCLOUD_ADMIN_PASSWORD+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options='-n --admin-user "$NEXTCLOUD_ADMIN_USER" --admin-pass "$NEXTCLOUD_ADMIN_PASSWORD"'
|
|
||||||
if [ -n "${NEXTCLOUD_TABLE_PREFIX+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-table-prefix "$NEXTCLOUD_TABLE_PREFIX"'
|
|
||||||
else
|
|
||||||
install_options=$install_options' --database-table-prefix ""'
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_DATA_DIR+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --data-dir "$NEXTCLOUD_DATA_DIR"'
|
|
||||||
fi
|
|
||||||
|
|
||||||
install=false
|
|
||||||
if [ -n "${SQLITE_DATABASE+x}" ]; then
|
|
||||||
echo "Installing with SQLite database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-name "$SQLITE_DATABASE"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ]; then
|
|
||||||
echo "Installing with MySQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database mysql --database-name "$MYSQL_DATABASE" --database-user "$MYSQL_USER" --database-pass "$MYSQL_PASSWORD" --database-host "$MYSQL_HOST"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${POSTGRES_DB+x}" ] && [ -n "${POSTGRES_USER+x}" ] && [ -n "${POSTGRES_PASSWORD+x}" ] && [ -n "${POSTGRES_HOST+x}" ]; then
|
|
||||||
echo "Installing with PostgreSQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database pgsql --database-name "$POSTGRES_DB" --database-user "$POSTGRES_USER" --database-pass "$POSTGRES_PASSWORD" --database-host "$POSTGRES_HOST"'
|
|
||||||
install=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$install" = true ]; then
|
|
||||||
echo "starting nextcloud installation"
|
|
||||||
max_retries=10
|
|
||||||
try=0
|
|
||||||
until run_as "php /var/www/html/occ maintenance:install $install_options" || [ "$try" -gt "$max_retries" ]
|
|
||||||
do
|
|
||||||
echo "retrying install..."
|
|
||||||
try=$((try+1))
|
|
||||||
sleep 3s
|
|
||||||
done
|
|
||||||
if [ "$try" -gt "$max_retries" ]; then
|
|
||||||
echo "installing of nextcloud failed!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_TRUSTED_DOMAINS+x}" ]; then
|
|
||||||
echo "setting trusted domains…"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=1
|
|
||||||
for DOMAIN in $NEXTCLOUD_TRUSTED_DOMAINS ; do
|
|
||||||
DOMAIN=$(echo "$DOMAIN" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
|
||||||
run_as "php /var/www/html/occ config:system:set trusted_domains $NC_TRUSTED_DOMAIN_IDX --value=$DOMAIN"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=$(($NC_TRUSTED_DOMAIN_IDX+1))
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "running web-based installer on first connect!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#upgrade
|
|
||||||
else
|
|
||||||
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
|
|
||||||
echo "The following apps have been disabled:"
|
|
||||||
diff /tmp/list_before /tmp/list_after | grep '<' | cut -d- -f2 | cut -d: -f1
|
|
||||||
rm -f /tmp/list_before /tmp/list_after
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
|
@ -1,5 +0,0 @@
|
||||||
/config/
|
|
||||||
/data/
|
|
||||||
/custom_apps/
|
|
||||||
/themes/
|
|
||||||
/version.php
|
|
|
@ -1,124 +0,0 @@
|
||||||
# DO NOT EDIT: created by update.sh from Dockerfile-alpine.template
|
|
||||||
FROM php:7.3-fpm-alpine3.9
|
|
||||||
|
|
||||||
# entrypoint.sh and cron.sh dependencies
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
apk add --no-cache \
|
|
||||||
rsync \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
rm /var/spool/cron/crontabs/root; \
|
|
||||||
echo '*/15 * * * * php -f /var/www/html/cron.php' > /var/spool/cron/crontabs/www-data
|
|
||||||
|
|
||||||
# install the PHP extensions we need
|
|
||||||
# see https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
apk add --no-cache --virtual .build-deps \
|
|
||||||
$PHPIZE_DEPS \
|
|
||||||
autoconf \
|
|
||||||
freetype-dev \
|
|
||||||
icu-dev \
|
|
||||||
libevent-dev \
|
|
||||||
libjpeg-turbo-dev \
|
|
||||||
libmcrypt-dev \
|
|
||||||
libpng-dev \
|
|
||||||
libmemcached-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libzip-dev \
|
|
||||||
openldap-dev \
|
|
||||||
pcre-dev \
|
|
||||||
postgresql-dev \
|
|
||||||
imagemagick-dev \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
docker-php-ext-configure gd --with-freetype-dir=/usr --with-png-dir=/usr --with-jpeg-dir=/usr; \
|
|
||||||
docker-php-ext-configure ldap; \
|
|
||||||
docker-php-ext-install \
|
|
||||||
exif \
|
|
||||||
gd \
|
|
||||||
intl \
|
|
||||||
ldap \
|
|
||||||
opcache \
|
|
||||||
pcntl \
|
|
||||||
pdo_mysql \
|
|
||||||
pdo_pgsql \
|
|
||||||
zip \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
# pecl will claim success even if one install fails, so we need to perform each install separately
|
|
||||||
pecl install APCu-5.1.17; \
|
|
||||||
pecl install memcached-3.1.3; \
|
|
||||||
pecl install redis-4.3.0; \
|
|
||||||
pecl install imagick-3.4.3; \
|
|
||||||
\
|
|
||||||
docker-php-ext-enable \
|
|
||||||
apcu \
|
|
||||||
memcached \
|
|
||||||
redis \
|
|
||||||
imagick \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
runDeps="$( \
|
|
||||||
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
|
|
||||||
| tr ',' '\n' \
|
|
||||||
| sort -u \
|
|
||||||
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
|
|
||||||
)"; \
|
|
||||||
apk add --virtual .nextcloud-phpext-rundeps $runDeps; \
|
|
||||||
apk del .build-deps
|
|
||||||
|
|
||||||
# set recommended PHP.ini settings
|
|
||||||
# see https://docs.nextcloud.com/server/12/admin_manual/configuration_server/server_tuning.html#enable-php-opcache
|
|
||||||
RUN { \
|
|
||||||
echo 'opcache.enable=1'; \
|
|
||||||
echo 'opcache.enable_cli=1'; \
|
|
||||||
echo 'opcache.interned_strings_buffer=8'; \
|
|
||||||
echo 'opcache.max_accelerated_files=10000'; \
|
|
||||||
echo 'opcache.memory_consumption=128'; \
|
|
||||||
echo 'opcache.save_comments=1'; \
|
|
||||||
echo 'opcache.revalidate_freq=1'; \
|
|
||||||
} > /usr/local/etc/php/conf.d/opcache-recommended.ini; \
|
|
||||||
\
|
|
||||||
echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \
|
|
||||||
\
|
|
||||||
echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \
|
|
||||||
\
|
|
||||||
mkdir /var/www/data; \
|
|
||||||
chown -R www-data:root /var/www; \
|
|
||||||
chmod -R g=u /var/www
|
|
||||||
|
|
||||||
VOLUME /var/www/html
|
|
||||||
|
|
||||||
|
|
||||||
ENV NEXTCLOUD_VERSION 15.0.7
|
|
||||||
|
|
||||||
RUN set -ex; \
|
|
||||||
apk add --no-cache --virtual .fetch-deps \
|
|
||||||
bzip2 \
|
|
||||||
gnupg \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
curl -fsSL -o nextcloud.tar.bz2 \
|
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \
|
|
||||||
curl -fsSL -o nextcloud.tar.bz2.asc \
|
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \
|
|
||||||
export GNUPGHOME="$(mktemp -d)"; \
|
|
||||||
# gpg key from https://nextcloud.com/nextcloud.asc
|
|
||||||
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \
|
|
||||||
gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
|
|
||||||
tar -xjf nextcloud.tar.bz2 -C /usr/src/; \
|
|
||||||
gpgconf --kill all; \
|
|
||||||
rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
|
|
||||||
rm -rf /usr/src/nextcloud/updater; \
|
|
||||||
mkdir -p /usr/src/nextcloud/data; \
|
|
||||||
mkdir -p /usr/src/nextcloud/custom_apps; \
|
|
||||||
chmod +x /usr/src/nextcloud/occ; \
|
|
||||||
apk del .fetch-deps
|
|
||||||
|
|
||||||
COPY *.sh upgrade.exclude /
|
|
||||||
COPY config/* /usr/src/nextcloud/config/
|
|
||||||
|
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
|
||||||
CMD ["php-fpm"]
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.local' => '\OC\Memcache\APCu',
|
|
||||||
);
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?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,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
$autoconfig_enabled = false;
|
|
||||||
|
|
||||||
if (getenv('SQLITE_DATABASE')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "sqlite";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('SQLITE_DATABASE');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('MYSQL_DATABASE') && getenv('MYSQL_USER') && getenv('MYSQL_PASSWORD') && getenv('MYSQL_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "mysql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('MYSQL_DATABASE');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('MYSQL_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('MYSQL_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('MYSQL_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('POSTGRES_DB') && getenv('POSTGRES_USER') && getenv('POSTGRES_PASSWORD') && getenv('POSTGRES_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "pgsql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('POSTGRES_DB');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('POSTGRES_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('POSTGRES_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('POSTGRES_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($autoconfig_enabled) {
|
|
||||||
$AUTOCONFIG["dbtableprefix"] = getenv('NEXTCLOUD_TABLE_PREFIX') ?: "";
|
|
||||||
|
|
||||||
$AUTOCONFIG["directory"] = getenv('NEXTCLOUD_DATA_DIR') ?: "/var/www/html/data";
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('REDIS_HOST')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.distributed' => '\OC\Memcache\Redis',
|
|
||||||
'memcache.locking' => '\OC\Memcache\Redis',
|
|
||||||
'redis' => array(
|
|
||||||
'host' => getenv('REDIS_HOST'),
|
|
||||||
'port' => getenv('REDIS_HOST_PORT') ?: 6379,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('SMTP_HOST') && getenv('MAIL_FROM_ADDRESS') && getenv('MAIL_DOMAIN')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'mail_smtpmode' => 'smtp',
|
|
||||||
'mail_smtphost' => getenv('SMTP_HOST'),
|
|
||||||
'mail_smtpport' => getenv('SMTP_PORT') ?: (getenv('SMTP_SECURE') ? 465 : 25),
|
|
||||||
'mail_smtpsecure' => getenv('SMTP_SECURE') ?: '',
|
|
||||||
'mail_smtpauth' => getenv('SMTP_NAME') && getenv('SMTP_PASSWORD'),
|
|
||||||
'mail_smtpauthtype' => getenv('SMTP_AUTHTYPE') ?: 'LOGIN',
|
|
||||||
'mail_smtpname' => getenv('SMTP_NAME') ?: '',
|
|
||||||
'mail_smtppassword' => getenv('SMTP_PASSWORD') ?: '',
|
|
||||||
'mail_from_address' => getenv('MAIL_FROM_ADDRESS'),
|
|
||||||
'mail_domain' => getenv('MAIL_DOMAIN'),
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
exec busybox crond -f -l 0 -L /dev/stdout
|
|
|
@ -1,142 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# version_greater A B returns whether A > B
|
|
||||||
version_greater() {
|
|
||||||
[ "$(printf '%s\n' "$@" | sort -t '.' -n -k1,1 -k2,2 -k3,3 -k4,4 | head -n 1)" != "$1" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
# return true if specified directory is empty
|
|
||||||
directory_empty() {
|
|
||||||
[ -z "$(ls -A "$1/")" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
run_as() {
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
su -p www-data -s /bin/sh -c "$1"
|
|
||||||
else
|
|
||||||
sh -c "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
|
||||||
if [ -n "${REDIS_HOST+x}" ]; then
|
|
||||||
|
|
||||||
echo "Configuring Redis as session handler"
|
|
||||||
{
|
|
||||||
echo 'session.save_handler = redis'
|
|
||||||
echo "session.save_path = \"tcp://${REDIS_HOST}:${REDIS_HOST_PORT:=6379}\""
|
|
||||||
} > /usr/local/etc/php/conf.d/redis-session.ini
|
|
||||||
fi
|
|
||||||
|
|
||||||
installed_version="0.0.0.0"
|
|
||||||
if [ -f /var/www/html/version.php ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
fi
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
image_version="$(php -r 'require "/usr/src/nextcloud/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
|
|
||||||
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
|
|
||||||
echo "Initializing nextcloud $image_version ..."
|
|
||||||
if [ "$installed_version" != "0.0.0.0" ]; then
|
|
||||||
echo "Upgrading nextcloud from $installed_version ..."
|
|
||||||
run_as 'php /var/www/html/occ app:list' | sed -n "/Enabled:/,/Disabled:/p" > /tmp/list_before
|
|
||||||
fi
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
rsync_options="-rlDog --chown www-data:root"
|
|
||||||
else
|
|
||||||
rsync_options="-rlD"
|
|
||||||
fi
|
|
||||||
rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/nextcloud/ /var/www/html/
|
|
||||||
|
|
||||||
for dir in config data custom_apps themes; do
|
|
||||||
if [ ! -d "/var/www/html/$dir" ] || directory_empty "/var/www/html/$dir"; then
|
|
||||||
rsync $rsync_options --include "/$dir/" --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
rsync $rsync_options --include '/version.php' --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
echo "Initializing finished"
|
|
||||||
|
|
||||||
#install
|
|
||||||
if [ "$installed_version" = "0.0.0.0" ]; then
|
|
||||||
echo "New nextcloud instance"
|
|
||||||
|
|
||||||
if [ -n "${NEXTCLOUD_ADMIN_USER+x}" ] && [ -n "${NEXTCLOUD_ADMIN_PASSWORD+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options='-n --admin-user "$NEXTCLOUD_ADMIN_USER" --admin-pass "$NEXTCLOUD_ADMIN_PASSWORD"'
|
|
||||||
if [ -n "${NEXTCLOUD_TABLE_PREFIX+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-table-prefix "$NEXTCLOUD_TABLE_PREFIX"'
|
|
||||||
else
|
|
||||||
install_options=$install_options' --database-table-prefix ""'
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_DATA_DIR+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --data-dir "$NEXTCLOUD_DATA_DIR"'
|
|
||||||
fi
|
|
||||||
|
|
||||||
install=false
|
|
||||||
if [ -n "${SQLITE_DATABASE+x}" ]; then
|
|
||||||
echo "Installing with SQLite database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-name "$SQLITE_DATABASE"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ]; then
|
|
||||||
echo "Installing with MySQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database mysql --database-name "$MYSQL_DATABASE" --database-user "$MYSQL_USER" --database-pass "$MYSQL_PASSWORD" --database-host "$MYSQL_HOST"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${POSTGRES_DB+x}" ] && [ -n "${POSTGRES_USER+x}" ] && [ -n "${POSTGRES_PASSWORD+x}" ] && [ -n "${POSTGRES_HOST+x}" ]; then
|
|
||||||
echo "Installing with PostgreSQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database pgsql --database-name "$POSTGRES_DB" --database-user "$POSTGRES_USER" --database-pass "$POSTGRES_PASSWORD" --database-host "$POSTGRES_HOST"'
|
|
||||||
install=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$install" = true ]; then
|
|
||||||
echo "starting nextcloud installation"
|
|
||||||
max_retries=10
|
|
||||||
try=0
|
|
||||||
until run_as "php /var/www/html/occ maintenance:install $install_options" || [ "$try" -gt "$max_retries" ]
|
|
||||||
do
|
|
||||||
echo "retrying install..."
|
|
||||||
try=$((try+1))
|
|
||||||
sleep 3s
|
|
||||||
done
|
|
||||||
if [ "$try" -gt "$max_retries" ]; then
|
|
||||||
echo "installing of nextcloud failed!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_TRUSTED_DOMAINS+x}" ]; then
|
|
||||||
echo "setting trusted domains…"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=1
|
|
||||||
for DOMAIN in $NEXTCLOUD_TRUSTED_DOMAINS ; do
|
|
||||||
DOMAIN=$(echo "$DOMAIN" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
|
||||||
run_as "php /var/www/html/occ config:system:set trusted_domains $NC_TRUSTED_DOMAIN_IDX --value=$DOMAIN"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=$(($NC_TRUSTED_DOMAIN_IDX+1))
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "running web-based installer on first connect!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#upgrade
|
|
||||||
else
|
|
||||||
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
|
|
||||||
echo "The following apps have been disabled:"
|
|
||||||
diff /tmp/list_before /tmp/list_after | grep '<' | cut -d- -f2 | cut -d: -f1
|
|
||||||
rm -f /tmp/list_before /tmp/list_after
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
|
@ -1,5 +0,0 @@
|
||||||
/config/
|
|
||||||
/data/
|
|
||||||
/custom_apps/
|
|
||||||
/themes/
|
|
||||||
/version.php
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.local' => '\OC\Memcache\APCu',
|
|
||||||
);
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?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,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
$autoconfig_enabled = false;
|
|
||||||
|
|
||||||
if (getenv('SQLITE_DATABASE')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "sqlite";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('SQLITE_DATABASE');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('MYSQL_DATABASE') && getenv('MYSQL_USER') && getenv('MYSQL_PASSWORD') && getenv('MYSQL_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "mysql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('MYSQL_DATABASE');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('MYSQL_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('MYSQL_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('MYSQL_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('POSTGRES_DB') && getenv('POSTGRES_USER') && getenv('POSTGRES_PASSWORD') && getenv('POSTGRES_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "pgsql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('POSTGRES_DB');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('POSTGRES_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('POSTGRES_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('POSTGRES_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($autoconfig_enabled) {
|
|
||||||
$AUTOCONFIG["dbtableprefix"] = getenv('NEXTCLOUD_TABLE_PREFIX') ?: "";
|
|
||||||
|
|
||||||
$AUTOCONFIG["directory"] = getenv('NEXTCLOUD_DATA_DIR') ?: "/var/www/html/data";
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('REDIS_HOST')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.distributed' => '\OC\Memcache\Redis',
|
|
||||||
'memcache.locking' => '\OC\Memcache\Redis',
|
|
||||||
'redis' => array(
|
|
||||||
'host' => getenv('REDIS_HOST'),
|
|
||||||
'port' => getenv('REDIS_HOST_PORT') ?: 6379,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('SMTP_HOST') && getenv('MAIL_FROM_ADDRESS') && getenv('MAIL_DOMAIN')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'mail_smtpmode' => 'smtp',
|
|
||||||
'mail_smtphost' => getenv('SMTP_HOST'),
|
|
||||||
'mail_smtpport' => getenv('SMTP_PORT') ?: (getenv('SMTP_SECURE') ? 465 : 25),
|
|
||||||
'mail_smtpsecure' => getenv('SMTP_SECURE') ?: '',
|
|
||||||
'mail_smtpauth' => getenv('SMTP_NAME') && getenv('SMTP_PASSWORD'),
|
|
||||||
'mail_smtpauthtype' => getenv('SMTP_AUTHTYPE') ?: 'LOGIN',
|
|
||||||
'mail_smtpname' => getenv('SMTP_NAME') ?: '',
|
|
||||||
'mail_smtppassword' => getenv('SMTP_PASSWORD') ?: '',
|
|
||||||
'mail_from_address' => getenv('MAIL_FROM_ADDRESS'),
|
|
||||||
'mail_domain' => getenv('MAIL_DOMAIN'),
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
exec busybox crond -f -l 0 -L /dev/stdout
|
|
|
@ -1,142 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# version_greater A B returns whether A > B
|
|
||||||
version_greater() {
|
|
||||||
[ "$(printf '%s\n' "$@" | sort -t '.' -n -k1,1 -k2,2 -k3,3 -k4,4 | head -n 1)" != "$1" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
# return true if specified directory is empty
|
|
||||||
directory_empty() {
|
|
||||||
[ -z "$(ls -A "$1/")" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
run_as() {
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
su -p www-data -s /bin/sh -c "$1"
|
|
||||||
else
|
|
||||||
sh -c "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
|
||||||
if [ -n "${REDIS_HOST+x}" ]; then
|
|
||||||
|
|
||||||
echo "Configuring Redis as session handler"
|
|
||||||
{
|
|
||||||
echo 'session.save_handler = redis'
|
|
||||||
echo "session.save_path = \"tcp://${REDIS_HOST}:${REDIS_HOST_PORT:=6379}\""
|
|
||||||
} > /usr/local/etc/php/conf.d/redis-session.ini
|
|
||||||
fi
|
|
||||||
|
|
||||||
installed_version="0.0.0.0"
|
|
||||||
if [ -f /var/www/html/version.php ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
fi
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
image_version="$(php -r 'require "/usr/src/nextcloud/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
|
|
||||||
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
|
|
||||||
echo "Initializing nextcloud $image_version ..."
|
|
||||||
if [ "$installed_version" != "0.0.0.0" ]; then
|
|
||||||
echo "Upgrading nextcloud from $installed_version ..."
|
|
||||||
run_as 'php /var/www/html/occ app:list' | sed -n "/Enabled:/,/Disabled:/p" > /tmp/list_before
|
|
||||||
fi
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
rsync_options="-rlDog --chown www-data:root"
|
|
||||||
else
|
|
||||||
rsync_options="-rlD"
|
|
||||||
fi
|
|
||||||
rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/nextcloud/ /var/www/html/
|
|
||||||
|
|
||||||
for dir in config data custom_apps themes; do
|
|
||||||
if [ ! -d "/var/www/html/$dir" ] || directory_empty "/var/www/html/$dir"; then
|
|
||||||
rsync $rsync_options --include "/$dir/" --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
rsync $rsync_options --include '/version.php' --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
echo "Initializing finished"
|
|
||||||
|
|
||||||
#install
|
|
||||||
if [ "$installed_version" = "0.0.0.0" ]; then
|
|
||||||
echo "New nextcloud instance"
|
|
||||||
|
|
||||||
if [ -n "${NEXTCLOUD_ADMIN_USER+x}" ] && [ -n "${NEXTCLOUD_ADMIN_PASSWORD+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options='-n --admin-user "$NEXTCLOUD_ADMIN_USER" --admin-pass "$NEXTCLOUD_ADMIN_PASSWORD"'
|
|
||||||
if [ -n "${NEXTCLOUD_TABLE_PREFIX+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-table-prefix "$NEXTCLOUD_TABLE_PREFIX"'
|
|
||||||
else
|
|
||||||
install_options=$install_options' --database-table-prefix ""'
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_DATA_DIR+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --data-dir "$NEXTCLOUD_DATA_DIR"'
|
|
||||||
fi
|
|
||||||
|
|
||||||
install=false
|
|
||||||
if [ -n "${SQLITE_DATABASE+x}" ]; then
|
|
||||||
echo "Installing with SQLite database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-name "$SQLITE_DATABASE"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ]; then
|
|
||||||
echo "Installing with MySQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database mysql --database-name "$MYSQL_DATABASE" --database-user "$MYSQL_USER" --database-pass "$MYSQL_PASSWORD" --database-host "$MYSQL_HOST"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${POSTGRES_DB+x}" ] && [ -n "${POSTGRES_USER+x}" ] && [ -n "${POSTGRES_PASSWORD+x}" ] && [ -n "${POSTGRES_HOST+x}" ]; then
|
|
||||||
echo "Installing with PostgreSQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database pgsql --database-name "$POSTGRES_DB" --database-user "$POSTGRES_USER" --database-pass "$POSTGRES_PASSWORD" --database-host "$POSTGRES_HOST"'
|
|
||||||
install=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$install" = true ]; then
|
|
||||||
echo "starting nextcloud installation"
|
|
||||||
max_retries=10
|
|
||||||
try=0
|
|
||||||
until run_as "php /var/www/html/occ maintenance:install $install_options" || [ "$try" -gt "$max_retries" ]
|
|
||||||
do
|
|
||||||
echo "retrying install..."
|
|
||||||
try=$((try+1))
|
|
||||||
sleep 3s
|
|
||||||
done
|
|
||||||
if [ "$try" -gt "$max_retries" ]; then
|
|
||||||
echo "installing of nextcloud failed!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_TRUSTED_DOMAINS+x}" ]; then
|
|
||||||
echo "setting trusted domains…"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=1
|
|
||||||
for DOMAIN in $NEXTCLOUD_TRUSTED_DOMAINS ; do
|
|
||||||
DOMAIN=$(echo "$DOMAIN" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
|
||||||
run_as "php /var/www/html/occ config:system:set trusted_domains $NC_TRUSTED_DOMAIN_IDX --value=$DOMAIN"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=$(($NC_TRUSTED_DOMAIN_IDX+1))
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "running web-based installer on first connect!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#upgrade
|
|
||||||
else
|
|
||||||
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
|
|
||||||
echo "The following apps have been disabled:"
|
|
||||||
diff /tmp/list_before /tmp/list_after | grep '<' | cut -d- -f2 | cut -d: -f1
|
|
||||||
rm -f /tmp/list_before /tmp/list_after
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
|
@ -1,5 +0,0 @@
|
||||||
/config/
|
|
||||||
/data/
|
|
||||||
/custom_apps/
|
|
||||||
/themes/
|
|
||||||
/version.php
|
|
|
@ -57,7 +57,7 @@ RUN set -ex; \
|
||||||
pecl install APCu-5.1.17; \
|
pecl install APCu-5.1.17; \
|
||||||
pecl install memcached-3.1.3; \
|
pecl install memcached-3.1.3; \
|
||||||
pecl install redis-4.3.0; \
|
pecl install redis-4.3.0; \
|
||||||
pecl install imagick-3.4.3; \
|
pecl install imagick-3.4.4; \
|
||||||
\
|
\
|
||||||
docker-php-ext-enable \
|
docker-php-ext-enable \
|
||||||
apcu \
|
apcu \
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -eu
|
set -xeu
|
||||||
|
|
||||||
# version_greater A B returns whether A > B
|
# version_greater A B returns whether A > B
|
||||||
version_greater() {
|
version_greater() {
|
||||||
|
@ -19,7 +19,10 @@ run_as() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
# ##
|
||||||
|
# Add new recognized entrycmd
|
||||||
|
# ##
|
||||||
|
if expr "$1" : "nginx" 1>/dev/null || expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
||||||
if [ -n "${REDIS_HOST+x}" ]; then
|
if [ -n "${REDIS_HOST+x}" ]; then
|
||||||
|
|
||||||
echo "Configuring Redis as session handler"
|
echo "Configuring Redis as session handler"
|
||||||
|
|
|
@ -1,124 +0,0 @@
|
||||||
# DO NOT EDIT: created by update.sh from Dockerfile-alpine.template
|
|
||||||
FROM php:7.3-fpm-alpine3.9
|
|
||||||
|
|
||||||
# entrypoint.sh and cron.sh dependencies
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
apk add --no-cache \
|
|
||||||
rsync \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
rm /var/spool/cron/crontabs/root; \
|
|
||||||
echo '*/15 * * * * php -f /var/www/html/cron.php' > /var/spool/cron/crontabs/www-data
|
|
||||||
|
|
||||||
# install the PHP extensions we need
|
|
||||||
# see https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
apk add --no-cache --virtual .build-deps \
|
|
||||||
$PHPIZE_DEPS \
|
|
||||||
autoconf \
|
|
||||||
freetype-dev \
|
|
||||||
icu-dev \
|
|
||||||
libevent-dev \
|
|
||||||
libjpeg-turbo-dev \
|
|
||||||
libmcrypt-dev \
|
|
||||||
libpng-dev \
|
|
||||||
libmemcached-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libzip-dev \
|
|
||||||
openldap-dev \
|
|
||||||
pcre-dev \
|
|
||||||
postgresql-dev \
|
|
||||||
imagemagick-dev \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
docker-php-ext-configure gd --with-freetype-dir=/usr --with-png-dir=/usr --with-jpeg-dir=/usr; \
|
|
||||||
docker-php-ext-configure ldap; \
|
|
||||||
docker-php-ext-install \
|
|
||||||
exif \
|
|
||||||
gd \
|
|
||||||
intl \
|
|
||||||
ldap \
|
|
||||||
opcache \
|
|
||||||
pcntl \
|
|
||||||
pdo_mysql \
|
|
||||||
pdo_pgsql \
|
|
||||||
zip \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
# pecl will claim success even if one install fails, so we need to perform each install separately
|
|
||||||
pecl install APCu-5.1.17; \
|
|
||||||
pecl install memcached-3.1.3; \
|
|
||||||
pecl install redis-4.3.0; \
|
|
||||||
pecl install imagick-3.4.3; \
|
|
||||||
\
|
|
||||||
docker-php-ext-enable \
|
|
||||||
apcu \
|
|
||||||
memcached \
|
|
||||||
redis \
|
|
||||||
imagick \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
runDeps="$( \
|
|
||||||
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
|
|
||||||
| tr ',' '\n' \
|
|
||||||
| sort -u \
|
|
||||||
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
|
|
||||||
)"; \
|
|
||||||
apk add --virtual .nextcloud-phpext-rundeps $runDeps; \
|
|
||||||
apk del .build-deps
|
|
||||||
|
|
||||||
# set recommended PHP.ini settings
|
|
||||||
# see https://docs.nextcloud.com/server/12/admin_manual/configuration_server/server_tuning.html#enable-php-opcache
|
|
||||||
RUN { \
|
|
||||||
echo 'opcache.enable=1'; \
|
|
||||||
echo 'opcache.enable_cli=1'; \
|
|
||||||
echo 'opcache.interned_strings_buffer=8'; \
|
|
||||||
echo 'opcache.max_accelerated_files=10000'; \
|
|
||||||
echo 'opcache.memory_consumption=128'; \
|
|
||||||
echo 'opcache.save_comments=1'; \
|
|
||||||
echo 'opcache.revalidate_freq=1'; \
|
|
||||||
} > /usr/local/etc/php/conf.d/opcache-recommended.ini; \
|
|
||||||
\
|
|
||||||
echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \
|
|
||||||
\
|
|
||||||
echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \
|
|
||||||
\
|
|
||||||
mkdir /var/www/data; \
|
|
||||||
chown -R www-data:root /var/www; \
|
|
||||||
chmod -R g=u /var/www
|
|
||||||
|
|
||||||
VOLUME /var/www/html
|
|
||||||
|
|
||||||
|
|
||||||
ENV NEXTCLOUD_VERSION 16.0.0
|
|
||||||
|
|
||||||
RUN set -ex; \
|
|
||||||
apk add --no-cache --virtual .fetch-deps \
|
|
||||||
bzip2 \
|
|
||||||
gnupg \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
curl -fsSL -o nextcloud.tar.bz2 \
|
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \
|
|
||||||
curl -fsSL -o nextcloud.tar.bz2.asc \
|
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \
|
|
||||||
export GNUPGHOME="$(mktemp -d)"; \
|
|
||||||
# gpg key from https://nextcloud.com/nextcloud.asc
|
|
||||||
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \
|
|
||||||
gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
|
|
||||||
tar -xjf nextcloud.tar.bz2 -C /usr/src/; \
|
|
||||||
gpgconf --kill all; \
|
|
||||||
rm -r "$GNUPGHOME" nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
|
|
||||||
rm -rf /usr/src/nextcloud/updater; \
|
|
||||||
mkdir -p /usr/src/nextcloud/data; \
|
|
||||||
mkdir -p /usr/src/nextcloud/custom_apps; \
|
|
||||||
chmod +x /usr/src/nextcloud/occ; \
|
|
||||||
apk del .fetch-deps
|
|
||||||
|
|
||||||
COPY *.sh upgrade.exclude /
|
|
||||||
COPY config/* /usr/src/nextcloud/config/
|
|
||||||
|
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
|
||||||
CMD ["php-fpm"]
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.local' => '\OC\Memcache\APCu',
|
|
||||||
);
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?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,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
$autoconfig_enabled = false;
|
|
||||||
|
|
||||||
if (getenv('SQLITE_DATABASE')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "sqlite";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('SQLITE_DATABASE');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('MYSQL_DATABASE') && getenv('MYSQL_USER') && getenv('MYSQL_PASSWORD') && getenv('MYSQL_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "mysql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('MYSQL_DATABASE');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('MYSQL_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('MYSQL_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('MYSQL_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
} elseif (getenv('POSTGRES_DB') && getenv('POSTGRES_USER') && getenv('POSTGRES_PASSWORD') && getenv('POSTGRES_HOST')) {
|
|
||||||
$AUTOCONFIG["dbtype"] = "pgsql";
|
|
||||||
$AUTOCONFIG["dbname"] = getenv('POSTGRES_DB');
|
|
||||||
$AUTOCONFIG["dbuser"] = getenv('POSTGRES_USER');
|
|
||||||
$AUTOCONFIG["dbpass"] = getenv('POSTGRES_PASSWORD');
|
|
||||||
$AUTOCONFIG["dbhost"] = getenv('POSTGRES_HOST');
|
|
||||||
$autoconfig_enabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($autoconfig_enabled) {
|
|
||||||
$AUTOCONFIG["dbtableprefix"] = getenv('NEXTCLOUD_TABLE_PREFIX') ?: "";
|
|
||||||
|
|
||||||
$AUTOCONFIG["directory"] = getenv('NEXTCLOUD_DATA_DIR') ?: "/var/www/html/data";
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('REDIS_HOST')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'memcache.distributed' => '\OC\Memcache\Redis',
|
|
||||||
'memcache.locking' => '\OC\Memcache\Redis',
|
|
||||||
'redis' => array(
|
|
||||||
'host' => getenv('REDIS_HOST'),
|
|
||||||
'port' => getenv('REDIS_HOST_PORT') ?: 6379,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?php
|
|
||||||
if (getenv('SMTP_HOST') && getenv('MAIL_FROM_ADDRESS') && getenv('MAIL_DOMAIN')) {
|
|
||||||
$CONFIG = array (
|
|
||||||
'mail_smtpmode' => 'smtp',
|
|
||||||
'mail_smtphost' => getenv('SMTP_HOST'),
|
|
||||||
'mail_smtpport' => getenv('SMTP_PORT') ?: (getenv('SMTP_SECURE') ? 465 : 25),
|
|
||||||
'mail_smtpsecure' => getenv('SMTP_SECURE') ?: '',
|
|
||||||
'mail_smtpauth' => getenv('SMTP_NAME') && getenv('SMTP_PASSWORD'),
|
|
||||||
'mail_smtpauthtype' => getenv('SMTP_AUTHTYPE') ?: 'LOGIN',
|
|
||||||
'mail_smtpname' => getenv('SMTP_NAME') ?: '',
|
|
||||||
'mail_smtppassword' => getenv('SMTP_PASSWORD') ?: '',
|
|
||||||
'mail_from_address' => getenv('MAIL_FROM_ADDRESS'),
|
|
||||||
'mail_domain' => getenv('MAIL_DOMAIN'),
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
exec busybox crond -f -l 0 -L /dev/stdout
|
|
|
@ -1,142 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# version_greater A B returns whether A > B
|
|
||||||
version_greater() {
|
|
||||||
[ "$(printf '%s\n' "$@" | sort -t '.' -n -k1,1 -k2,2 -k3,3 -k4,4 | head -n 1)" != "$1" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
# return true if specified directory is empty
|
|
||||||
directory_empty() {
|
|
||||||
[ -z "$(ls -A "$1/")" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
run_as() {
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
su -p www-data -s /bin/sh -c "$1"
|
|
||||||
else
|
|
||||||
sh -c "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
|
||||||
if [ -n "${REDIS_HOST+x}" ]; then
|
|
||||||
|
|
||||||
echo "Configuring Redis as session handler"
|
|
||||||
{
|
|
||||||
echo 'session.save_handler = redis'
|
|
||||||
echo "session.save_path = \"tcp://${REDIS_HOST}:${REDIS_HOST_PORT:=6379}\""
|
|
||||||
} > /usr/local/etc/php/conf.d/redis-session.ini
|
|
||||||
fi
|
|
||||||
|
|
||||||
installed_version="0.0.0.0"
|
|
||||||
if [ -f /var/www/html/version.php ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
fi
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
image_version="$(php -r 'require "/usr/src/nextcloud/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
|
|
||||||
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
|
|
||||||
echo "Initializing nextcloud $image_version ..."
|
|
||||||
if [ "$installed_version" != "0.0.0.0" ]; then
|
|
||||||
echo "Upgrading nextcloud from $installed_version ..."
|
|
||||||
run_as 'php /var/www/html/occ app:list' | sed -n "/Enabled:/,/Disabled:/p" > /tmp/list_before
|
|
||||||
fi
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
rsync_options="-rlDog --chown www-data:root"
|
|
||||||
else
|
|
||||||
rsync_options="-rlD"
|
|
||||||
fi
|
|
||||||
rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/nextcloud/ /var/www/html/
|
|
||||||
|
|
||||||
for dir in config data custom_apps themes; do
|
|
||||||
if [ ! -d "/var/www/html/$dir" ] || directory_empty "/var/www/html/$dir"; then
|
|
||||||
rsync $rsync_options --include "/$dir/" --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
rsync $rsync_options --include '/version.php' --exclude '/*' /usr/src/nextcloud/ /var/www/html/
|
|
||||||
echo "Initializing finished"
|
|
||||||
|
|
||||||
#install
|
|
||||||
if [ "$installed_version" = "0.0.0.0" ]; then
|
|
||||||
echo "New nextcloud instance"
|
|
||||||
|
|
||||||
if [ -n "${NEXTCLOUD_ADMIN_USER+x}" ] && [ -n "${NEXTCLOUD_ADMIN_PASSWORD+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options='-n --admin-user "$NEXTCLOUD_ADMIN_USER" --admin-pass "$NEXTCLOUD_ADMIN_PASSWORD"'
|
|
||||||
if [ -n "${NEXTCLOUD_TABLE_PREFIX+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-table-prefix "$NEXTCLOUD_TABLE_PREFIX"'
|
|
||||||
else
|
|
||||||
install_options=$install_options' --database-table-prefix ""'
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_DATA_DIR+x}" ]; then
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --data-dir "$NEXTCLOUD_DATA_DIR"'
|
|
||||||
fi
|
|
||||||
|
|
||||||
install=false
|
|
||||||
if [ -n "${SQLITE_DATABASE+x}" ]; then
|
|
||||||
echo "Installing with SQLite database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database-name "$SQLITE_DATABASE"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${MYSQL_DATABASE+x}" ] && [ -n "${MYSQL_USER+x}" ] && [ -n "${MYSQL_PASSWORD+x}" ] && [ -n "${MYSQL_HOST+x}" ]; then
|
|
||||||
echo "Installing with MySQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database mysql --database-name "$MYSQL_DATABASE" --database-user "$MYSQL_USER" --database-pass "$MYSQL_PASSWORD" --database-host "$MYSQL_HOST"'
|
|
||||||
install=true
|
|
||||||
elif [ -n "${POSTGRES_DB+x}" ] && [ -n "${POSTGRES_USER+x}" ] && [ -n "${POSTGRES_PASSWORD+x}" ] && [ -n "${POSTGRES_HOST+x}" ]; then
|
|
||||||
echo "Installing with PostgreSQL database"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
install_options=$install_options' --database pgsql --database-name "$POSTGRES_DB" --database-user "$POSTGRES_USER" --database-pass "$POSTGRES_PASSWORD" --database-host "$POSTGRES_HOST"'
|
|
||||||
install=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$install" = true ]; then
|
|
||||||
echo "starting nextcloud installation"
|
|
||||||
max_retries=10
|
|
||||||
try=0
|
|
||||||
until run_as "php /var/www/html/occ maintenance:install $install_options" || [ "$try" -gt "$max_retries" ]
|
|
||||||
do
|
|
||||||
echo "retrying install..."
|
|
||||||
try=$((try+1))
|
|
||||||
sleep 3s
|
|
||||||
done
|
|
||||||
if [ "$try" -gt "$max_retries" ]; then
|
|
||||||
echo "installing of nextcloud failed!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ -n "${NEXTCLOUD_TRUSTED_DOMAINS+x}" ]; then
|
|
||||||
echo "setting trusted domains…"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=1
|
|
||||||
for DOMAIN in $NEXTCLOUD_TRUSTED_DOMAINS ; do
|
|
||||||
DOMAIN=$(echo "$DOMAIN" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
|
||||||
run_as "php /var/www/html/occ config:system:set trusted_domains $NC_TRUSTED_DOMAIN_IDX --value=$DOMAIN"
|
|
||||||
NC_TRUSTED_DOMAIN_IDX=$(($NC_TRUSTED_DOMAIN_IDX+1))
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "running web-based installer on first connect!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#upgrade
|
|
||||||
else
|
|
||||||
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
|
|
||||||
echo "The following apps have been disabled:"
|
|
||||||
diff /tmp/list_before /tmp/list_after | grep '<' | cut -d- -f2 | cut -d: -f1
|
|
||||||
rm -f /tmp/list_before /tmp/list_after
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
|
@ -1,5 +0,0 @@
|
||||||
/config/
|
|
||||||
/data/
|
|
||||||
/custom_apps/
|
|
||||||
/themes/
|
|
||||||
/version.php
|
|
|
@ -57,7 +57,7 @@ RUN set -ex; \
|
||||||
pecl install APCu-5.1.17; \
|
pecl install APCu-5.1.17; \
|
||||||
pecl install memcached-3.1.3; \
|
pecl install memcached-3.1.3; \
|
||||||
pecl install redis-4.3.0; \
|
pecl install redis-4.3.0; \
|
||||||
pecl install imagick-3.4.3; \
|
pecl install imagick-3.4.4; \
|
||||||
\
|
\
|
||||||
docker-php-ext-enable \
|
docker-php-ext-enable \
|
||||||
apcu \
|
apcu \
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -eu
|
set -xeu
|
||||||
|
|
||||||
# version_greater A B returns whether A > B
|
# version_greater A B returns whether A > B
|
||||||
version_greater() {
|
version_greater() {
|
||||||
|
@ -19,7 +19,10 @@ run_as() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
# ##
|
||||||
|
# Add new recognized entrycmd
|
||||||
|
# ##
|
||||||
|
if expr "$1" : "nginx" 1>/dev/null || expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
||||||
if [ -n "${REDIS_HOST+x}" ]; then
|
if [ -n "${REDIS_HOST+x}" ]; then
|
||||||
|
|
||||||
echo "Configuring Redis as session handler"
|
echo "Configuring Redis as session handler"
|
||||||
|
|
|
@ -1,6 +1,33 @@
|
||||||
# DO NOT EDIT: created by update.sh from Dockerfile-debian.template
|
# DO NOT EDIT: created by update.sh from Dockerfile-nginx.template
|
||||||
FROM php:7.3-apache-stretch
|
FROM php:7.3-apache-stretch
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# It's bad idea to use FROM nginx:latest, we will not be aligned
|
||||||
|
# We can't use 7.3-nginx-stretch - it's not valid PHP upstream image
|
||||||
|
# Tricky part....
|
||||||
|
# I have to figure out howto handle it
|
||||||
|
# Error message from generate-stackbrew-library: tag not found in manifest for "php": "7.3-nginx-stretch"
|
||||||
|
# Potential solution: Custom tag in dockerfile template replaced with Nginx stuff
|
||||||
|
# ##
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# Install Nginx & standard troubleshooting utils
|
||||||
|
# We can't remove apache2 - it brokes build for fpm/apache containers
|
||||||
|
# ##
|
||||||
|
RUN set -ex; \
|
||||||
|
\
|
||||||
|
apt-get update; \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
nginx \
|
||||||
|
vim \
|
||||||
|
net-tools \
|
||||||
|
iproute2 \
|
||||||
|
iputils-ping \
|
||||||
|
wget \
|
||||||
|
psmisc \
|
||||||
|
procps \
|
||||||
|
; \
|
||||||
|
rm -rf /var/lib/apt/lists/*;
|
||||||
# entrypoint.sh and cron.sh dependencies
|
# entrypoint.sh and cron.sh dependencies
|
||||||
RUN set -ex; \
|
RUN set -ex; \
|
||||||
\
|
\
|
||||||
|
@ -57,7 +84,7 @@ RUN set -ex; \
|
||||||
pecl install APCu-5.1.17; \
|
pecl install APCu-5.1.17; \
|
||||||
pecl install memcached-3.1.3; \
|
pecl install memcached-3.1.3; \
|
||||||
pecl install redis-4.3.0; \
|
pecl install redis-4.3.0; \
|
||||||
pecl install imagick-3.4.3; \
|
pecl install imagick-3.4.4; \
|
||||||
\
|
\
|
||||||
docker-php-ext-enable \
|
docker-php-ext-enable \
|
||||||
apcu \
|
apcu \
|
||||||
|
@ -102,16 +129,8 @@ RUN { \
|
||||||
|
|
||||||
VOLUME /var/www/html
|
VOLUME /var/www/html
|
||||||
|
|
||||||
RUN a2enmod rewrite remoteip ;\
|
|
||||||
{\
|
|
||||||
echo RemoteIPHeader X-Real-IP ;\
|
|
||||||
echo RemoteIPTrustedProxy 10.0.0.0/8 ;\
|
|
||||||
echo RemoteIPTrustedProxy 172.16.0.0/12 ;\
|
|
||||||
echo RemoteIPTrustedProxy 192.168.0.0/16 ;\
|
|
||||||
} > /etc/apache2/conf-available/remoteip.conf;\
|
|
||||||
a2enconf remoteip
|
|
||||||
|
|
||||||
ENV NEXTCLOUD_VERSION 15.0.7
|
ENV NEXTCLOUD_VERSION 16.0.0
|
||||||
|
|
||||||
RUN set -ex; \
|
RUN set -ex; \
|
||||||
fetchDeps=" \
|
fetchDeps=" \
|
||||||
|
@ -143,5 +162,26 @@ RUN set -ex; \
|
||||||
COPY *.sh upgrade.exclude /
|
COPY *.sh upgrade.exclude /
|
||||||
COPY config/* /usr/src/nextcloud/config/
|
COPY config/* /usr/src/nextcloud/config/
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# Remove Nginx default website and add support for php
|
||||||
|
# ##
|
||||||
|
RUN set -ex; \
|
||||||
|
\
|
||||||
|
rm /etc/nginx/sites-enabled/default; \
|
||||||
|
sed -i '/types {/a\ \ \ \ application\/x-httpd-php\t\tphp;' '/etc/nginx/mime.types';
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# COPY Nextcloud vhost cfg for Nginx
|
||||||
|
# ##
|
||||||
|
COPY nextcloud.conf /etc/nginx/conf.d/
|
||||||
|
# ##
|
||||||
|
# COPY new entrypoint for nginx
|
||||||
|
# ##
|
||||||
|
COPY nginx-foreground /usr/local/bin/
|
||||||
|
# ##
|
||||||
|
# COPY Dockerfile for verification purposes
|
||||||
|
# ##
|
||||||
|
COPY Dockerfile /
|
||||||
|
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
CMD ["apache2-foreground"]
|
CMD ["nginx-foreground"]
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -eu
|
set -xeu
|
||||||
|
|
||||||
# version_greater A B returns whether A > B
|
# version_greater A B returns whether A > B
|
||||||
version_greater() {
|
version_greater() {
|
||||||
|
@ -19,7 +19,10 @@ run_as() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
# ##
|
||||||
|
# Add new recognized entrycmd
|
||||||
|
# ##
|
||||||
|
if expr "$1" : "nginx" 1>/dev/null || expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
||||||
if [ -n "${REDIS_HOST+x}" ]; then
|
if [ -n "${REDIS_HOST+x}" ]; then
|
||||||
|
|
||||||
echo "Configuring Redis as session handler"
|
echo "Configuring Redis as session handler"
|
142
16.0/nginx/nextcloud.conf
Normal file
142
16.0/nginx/nextcloud.conf
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
# ##
|
||||||
|
# file name: /etc/nginx/sites-enabled/nextcloud.conf
|
||||||
|
# Author: Malanik Jan
|
||||||
|
# Email: malanik (_dot_) jan (_at_) gmail (_dot_) com
|
||||||
|
# Description:
|
||||||
|
# - Configure Nextcloud vhost for Nginx
|
||||||
|
# - Based on https://docs.nextcloud.com/server/15/admin_manual/installation/nginx.html
|
||||||
|
# ##
|
||||||
|
|
||||||
|
upstream php-handler {
|
||||||
|
server fpm-ncd:9000;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
server_name _;
|
||||||
|
# Add headers to serve security related headers
|
||||||
|
# Before enabling Strict-Transport-Security headers please read into this
|
||||||
|
# topic first.
|
||||||
|
# add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
|
||||||
|
#
|
||||||
|
# WARNING: Only add the preload option once you read about
|
||||||
|
# the consequences in https://hstspreload.org/. This option
|
||||||
|
# will add the domain to a hardcoded list that is shipped
|
||||||
|
# in all major browsers and getting removed from this list
|
||||||
|
# could take several months.
|
||||||
|
add_header X-Content-Type-Options nosniff;
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
add_header X-Robots-Tag none;
|
||||||
|
add_header X-Download-Options noopen;
|
||||||
|
add_header X-Permitted-Cross-Domain-Policies none;
|
||||||
|
add_header Referrer-Policy no-referrer;
|
||||||
|
|
||||||
|
# Remove X-Powered-By, which is an information leak
|
||||||
|
fastcgi_hide_header X-Powered-By;
|
||||||
|
|
||||||
|
# Path to the root of your installation
|
||||||
|
root /var/www/html/;
|
||||||
|
|
||||||
|
location = /robots.txt {
|
||||||
|
allow all;
|
||||||
|
log_not_found off;
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
|
||||||
|
# The following 2 rules are only needed for the user_webfinger app.
|
||||||
|
# Uncomment it if you're planning to use this app.
|
||||||
|
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
|
||||||
|
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
|
||||||
|
|
||||||
|
# The following rule is only needed for the Social app.
|
||||||
|
# Uncomment it if you're planning to use this app.
|
||||||
|
# rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
|
||||||
|
|
||||||
|
location = /.well-known/carddav {
|
||||||
|
return 301 $scheme://$host/remote.php/dav;
|
||||||
|
}
|
||||||
|
location = /.well-known/caldav {
|
||||||
|
return 301 $scheme://$host/remote.php/dav;
|
||||||
|
}
|
||||||
|
|
||||||
|
# set max upload size
|
||||||
|
client_max_body_size 512M;
|
||||||
|
fastcgi_buffers 64 4K;
|
||||||
|
|
||||||
|
# Enable gzip but do not remove ETag headers
|
||||||
|
gzip on;
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_comp_level 4;
|
||||||
|
gzip_min_length 256;
|
||||||
|
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
|
||||||
|
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
|
||||||
|
|
||||||
|
# Uncomment if your server is build with the ngx_pagespeed module
|
||||||
|
# This module is currently not supported.
|
||||||
|
#pagespeed off;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
rewrite ^ /index.php$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
|
||||||
|
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||||
|
#https disabled for testing
|
||||||
|
#fastcgi_param HTTPS on;
|
||||||
|
#Avoid sending the security headers twice
|
||||||
|
fastcgi_param modHeadersAvailable true;
|
||||||
|
fastcgi_param front_controller_active true;
|
||||||
|
fastcgi_pass php-handler;
|
||||||
|
fastcgi_intercept_errors on;
|
||||||
|
fastcgi_request_buffering off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
|
||||||
|
try_files $uri/ =404;
|
||||||
|
index index.php;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Adding the cache control header for js and css files
|
||||||
|
# Make sure it is BELOW the PHP block
|
||||||
|
location ~ \.(?:css|js|woff2?|svg|gif)$ {
|
||||||
|
try_files $uri /index.php$request_uri;
|
||||||
|
add_header Cache-Control "public, max-age=15778463";
|
||||||
|
# Add headers to serve security related headers (It is intended to
|
||||||
|
# have those duplicated to the ones above)
|
||||||
|
# Before enabling Strict-Transport-Security headers please read into
|
||||||
|
# this topic first.
|
||||||
|
# add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
|
||||||
|
#
|
||||||
|
# WARNING: Only add the preload option once you read about
|
||||||
|
# the consequences in https://hstspreload.org/. This option
|
||||||
|
# will add the domain to a hardcoded list that is shipped
|
||||||
|
# in all major browsers and getting removed from this list
|
||||||
|
# could take several months.
|
||||||
|
add_header X-Content-Type-Options nosniff;
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
add_header X-Robots-Tag none;
|
||||||
|
add_header X-Download-Options noopen;
|
||||||
|
add_header X-Permitted-Cross-Domain-Policies none;
|
||||||
|
add_header Referrer-Policy no-referrer;
|
||||||
|
|
||||||
|
# Optional: Don't log access to assets
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
|
||||||
|
try_files $uri /index.php$request_uri;
|
||||||
|
# Optional: Don't log access to other assets
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
}
|
9
16.0/nginx/nginx-foreground
Executable file
9
16.0/nginx/nginx-foreground
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# ##
|
||||||
|
# file name: /usr/local/bin/nginx-foreground
|
||||||
|
# Author: Malanik Jan
|
||||||
|
# Email: malanik (_dot_) jan (_at_) gmail (_dot_) com
|
||||||
|
# Description: start Nginx in foreground
|
||||||
|
# ##
|
||||||
|
set -xe
|
||||||
|
exec nginx -g 'daemon off;'
|
|
@ -1,6 +1,32 @@
|
||||||
# DO NOT EDIT: created by update.sh from Dockerfile-debian.template
|
FROM php:%%PHP_VERSION%%-apache-stretch
|
||||||
FROM php:7.3-fpm-stretch
|
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# It's bad idea to use FROM nginx:latest, we will not be aligned
|
||||||
|
# We can't use 7.3-nginx-stretch - it's not valid PHP upstream image
|
||||||
|
# Tricky part....
|
||||||
|
# I have to figure out howto handle it
|
||||||
|
# Error message from generate-stackbrew-library: tag not found in manifest for "php": "7.3-nginx-stretch"
|
||||||
|
# Potential solution: Custom tag in dockerfile template replaced with Nginx stuff
|
||||||
|
# ##
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# Install Nginx & standard troubleshooting utils
|
||||||
|
# We can't remove apache2 - it brokes build for fpm/apache containers
|
||||||
|
# ##
|
||||||
|
RUN set -ex; \
|
||||||
|
\
|
||||||
|
apt-get update; \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
nginx \
|
||||||
|
vim \
|
||||||
|
net-tools \
|
||||||
|
iproute2 \
|
||||||
|
iputils-ping \
|
||||||
|
wget \
|
||||||
|
psmisc \
|
||||||
|
procps \
|
||||||
|
; \
|
||||||
|
rm -rf /var/lib/apt/lists/*;
|
||||||
# entrypoint.sh and cron.sh dependencies
|
# entrypoint.sh and cron.sh dependencies
|
||||||
RUN set -ex; \
|
RUN set -ex; \
|
||||||
\
|
\
|
||||||
|
@ -54,10 +80,10 @@ RUN set -ex; \
|
||||||
; \
|
; \
|
||||||
\
|
\
|
||||||
# pecl will claim success even if one install fails, so we need to perform each install separately
|
# pecl will claim success even if one install fails, so we need to perform each install separately
|
||||||
pecl install APCu-5.1.17; \
|
pecl install APCu-%%APCU_VERSION%%; \
|
||||||
pecl install memcached-3.1.3; \
|
pecl install memcached-%%MEMCACHED_VERSION%%; \
|
||||||
pecl install redis-4.3.0; \
|
pecl install redis-%%REDIS_VERSION%%; \
|
||||||
pecl install imagick-3.4.3; \
|
pecl install imagick-%%IMAGICK_VERSION%%; \
|
||||||
\
|
\
|
||||||
docker-php-ext-enable \
|
docker-php-ext-enable \
|
||||||
apcu \
|
apcu \
|
||||||
|
@ -101,9 +127,9 @@ RUN { \
|
||||||
chmod -R g=u /var/www
|
chmod -R g=u /var/www
|
||||||
|
|
||||||
VOLUME /var/www/html
|
VOLUME /var/www/html
|
||||||
|
%%VARIANT_EXTRAS%%
|
||||||
|
|
||||||
|
ENV NEXTCLOUD_VERSION %%VERSION%%
|
||||||
ENV NEXTCLOUD_VERSION 15.0.7
|
|
||||||
|
|
||||||
RUN set -ex; \
|
RUN set -ex; \
|
||||||
fetchDeps=" \
|
fetchDeps=" \
|
||||||
|
@ -114,9 +140,9 @@ RUN set -ex; \
|
||||||
apt-get install -y --no-install-recommends $fetchDeps; \
|
apt-get install -y --no-install-recommends $fetchDeps; \
|
||||||
\
|
\
|
||||||
curl -fsSL -o nextcloud.tar.bz2 \
|
curl -fsSL -o nextcloud.tar.bz2 \
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \
|
"%%BASE_DOWNLOAD_URL%%/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \
|
||||||
curl -fsSL -o nextcloud.tar.bz2.asc \
|
curl -fsSL -o nextcloud.tar.bz2.asc \
|
||||||
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \
|
"%%BASE_DOWNLOAD_URL%%/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \
|
||||||
export GNUPGHOME="$(mktemp -d)"; \
|
export GNUPGHOME="$(mktemp -d)"; \
|
||||||
# gpg key from https://nextcloud.com/nextcloud.asc
|
# gpg key from https://nextcloud.com/nextcloud.asc
|
||||||
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \
|
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \
|
||||||
|
@ -135,5 +161,26 @@ RUN set -ex; \
|
||||||
COPY *.sh upgrade.exclude /
|
COPY *.sh upgrade.exclude /
|
||||||
COPY config/* /usr/src/nextcloud/config/
|
COPY config/* /usr/src/nextcloud/config/
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# Remove Nginx default website and add support for php
|
||||||
|
# ##
|
||||||
|
RUN set -ex; \
|
||||||
|
\
|
||||||
|
rm /etc/nginx/sites-enabled/default; \
|
||||||
|
sed -i '/types {/a\ \ \ \ application\/x-httpd-php\t\tphp;' '/etc/nginx/mime.types';
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# COPY Nextcloud vhost cfg for Nginx
|
||||||
|
# ##
|
||||||
|
COPY nextcloud.conf /etc/nginx/conf.d/
|
||||||
|
# ##
|
||||||
|
# COPY new entrypoint for nginx
|
||||||
|
# ##
|
||||||
|
COPY nginx-foreground /usr/local/bin/
|
||||||
|
# ##
|
||||||
|
# COPY Dockerfile for verification purposes
|
||||||
|
# ##
|
||||||
|
COPY Dockerfile /
|
||||||
|
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
CMD ["php-fpm"]
|
CMD ["%%CMD%%"]
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -eu
|
set -xeu
|
||||||
|
|
||||||
# version_greater A B returns whether A > B
|
# version_greater A B returns whether A > B
|
||||||
version_greater() {
|
version_greater() {
|
||||||
|
@ -19,7 +19,10 @@ run_as() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
# ##
|
||||||
|
# Add new recognized entrycmd
|
||||||
|
# ##
|
||||||
|
if expr "$1" : "nginx" 1>/dev/null || expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UPDATE:-0}" -eq 1 ]; then
|
||||||
if [ -n "${REDIS_HOST+x}" ]; then
|
if [ -n "${REDIS_HOST+x}" ]; then
|
||||||
|
|
||||||
echo "Configuring Redis as session handler"
|
echo "Configuring Redis as session handler"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -Eeuo pipefail
|
set -xEeuo pipefail
|
||||||
|
|
||||||
declare -A release_channel=(
|
declare -A release_channel=(
|
||||||
[stable]='15.0.7'
|
[stable]='15.0.7'
|
||||||
|
@ -110,7 +110,6 @@ for version in "${versions[@]}"; do
|
||||||
if [ "$variant" = "apache" ]; then
|
if [ "$variant" = "apache" ]; then
|
||||||
variantAliases+=( "${versionAliases[@]}" )
|
variantAliases+=( "${versionAliases[@]}" )
|
||||||
fi
|
fi
|
||||||
|
|
||||||
variantParent="$(awk 'toupper($1) == "FROM" { print $2 }' "$version/$variant/Dockerfile")"
|
variantParent="$(awk 'toupper($1) == "FROM" { print $2 }' "$version/$variant/Dockerfile")"
|
||||||
variantArches="${parentRepoToArches[$variantParent]}"
|
variantArches="${parentRepoToArches[$variantParent]}"
|
||||||
|
|
||||||
|
|
142
nextcloud.conf
Normal file
142
nextcloud.conf
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
# ##
|
||||||
|
# file name: /etc/nginx/sites-enabled/nextcloud.conf
|
||||||
|
# Author: Malanik Jan
|
||||||
|
# Email: malanik (_dot_) jan (_at_) gmail (_dot_) com
|
||||||
|
# Description:
|
||||||
|
# - Configure Nextcloud vhost for Nginx
|
||||||
|
# - Based on https://docs.nextcloud.com/server/15/admin_manual/installation/nginx.html
|
||||||
|
# ##
|
||||||
|
|
||||||
|
upstream php-handler {
|
||||||
|
server fpm-ncd:9000;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
server_name _;
|
||||||
|
# Add headers to serve security related headers
|
||||||
|
# Before enabling Strict-Transport-Security headers please read into this
|
||||||
|
# topic first.
|
||||||
|
# add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
|
||||||
|
#
|
||||||
|
# WARNING: Only add the preload option once you read about
|
||||||
|
# the consequences in https://hstspreload.org/. This option
|
||||||
|
# will add the domain to a hardcoded list that is shipped
|
||||||
|
# in all major browsers and getting removed from this list
|
||||||
|
# could take several months.
|
||||||
|
add_header X-Content-Type-Options nosniff;
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
add_header X-Robots-Tag none;
|
||||||
|
add_header X-Download-Options noopen;
|
||||||
|
add_header X-Permitted-Cross-Domain-Policies none;
|
||||||
|
add_header Referrer-Policy no-referrer;
|
||||||
|
|
||||||
|
# Remove X-Powered-By, which is an information leak
|
||||||
|
fastcgi_hide_header X-Powered-By;
|
||||||
|
|
||||||
|
# Path to the root of your installation
|
||||||
|
root /var/www/html/;
|
||||||
|
|
||||||
|
location = /robots.txt {
|
||||||
|
allow all;
|
||||||
|
log_not_found off;
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
|
||||||
|
# The following 2 rules are only needed for the user_webfinger app.
|
||||||
|
# Uncomment it if you're planning to use this app.
|
||||||
|
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
|
||||||
|
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
|
||||||
|
|
||||||
|
# The following rule is only needed for the Social app.
|
||||||
|
# Uncomment it if you're planning to use this app.
|
||||||
|
# rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
|
||||||
|
|
||||||
|
location = /.well-known/carddav {
|
||||||
|
return 301 $scheme://$host/remote.php/dav;
|
||||||
|
}
|
||||||
|
location = /.well-known/caldav {
|
||||||
|
return 301 $scheme://$host/remote.php/dav;
|
||||||
|
}
|
||||||
|
|
||||||
|
# set max upload size
|
||||||
|
client_max_body_size 512M;
|
||||||
|
fastcgi_buffers 64 4K;
|
||||||
|
|
||||||
|
# Enable gzip but do not remove ETag headers
|
||||||
|
gzip on;
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_comp_level 4;
|
||||||
|
gzip_min_length 256;
|
||||||
|
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
|
||||||
|
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
|
||||||
|
|
||||||
|
# Uncomment if your server is build with the ngx_pagespeed module
|
||||||
|
# This module is currently not supported.
|
||||||
|
#pagespeed off;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
rewrite ^ /index.php$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
|
||||||
|
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||||
|
#https disabled for testing
|
||||||
|
#fastcgi_param HTTPS on;
|
||||||
|
#Avoid sending the security headers twice
|
||||||
|
fastcgi_param modHeadersAvailable true;
|
||||||
|
fastcgi_param front_controller_active true;
|
||||||
|
fastcgi_pass php-handler;
|
||||||
|
fastcgi_intercept_errors on;
|
||||||
|
fastcgi_request_buffering off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
|
||||||
|
try_files $uri/ =404;
|
||||||
|
index index.php;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Adding the cache control header for js and css files
|
||||||
|
# Make sure it is BELOW the PHP block
|
||||||
|
location ~ \.(?:css|js|woff2?|svg|gif)$ {
|
||||||
|
try_files $uri /index.php$request_uri;
|
||||||
|
add_header Cache-Control "public, max-age=15778463";
|
||||||
|
# Add headers to serve security related headers (It is intended to
|
||||||
|
# have those duplicated to the ones above)
|
||||||
|
# Before enabling Strict-Transport-Security headers please read into
|
||||||
|
# this topic first.
|
||||||
|
# add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
|
||||||
|
#
|
||||||
|
# WARNING: Only add the preload option once you read about
|
||||||
|
# the consequences in https://hstspreload.org/. This option
|
||||||
|
# will add the domain to a hardcoded list that is shipped
|
||||||
|
# in all major browsers and getting removed from this list
|
||||||
|
# could take several months.
|
||||||
|
add_header X-Content-Type-Options nosniff;
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
add_header X-Robots-Tag none;
|
||||||
|
add_header X-Download-Options noopen;
|
||||||
|
add_header X-Permitted-Cross-Domain-Policies none;
|
||||||
|
add_header Referrer-Policy no-referrer;
|
||||||
|
|
||||||
|
# Optional: Don't log access to assets
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
|
||||||
|
try_files $uri /index.php$request_uri;
|
||||||
|
# Optional: Don't log access to other assets
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
}
|
9
nginx-foreground
Executable file
9
nginx-foreground
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# ##
|
||||||
|
# file name: /usr/local/bin/nginx-foreground
|
||||||
|
# Author: Malanik Jan
|
||||||
|
# Email: malanik (_dot_) jan (_at_) gmail (_dot_) com
|
||||||
|
# Description: start Nginx in foreground
|
||||||
|
# ##
|
||||||
|
set -xe
|
||||||
|
exec nginx -g 'daemon off;'
|
61
start_container.sh
Executable file
61
start_container.sh
Executable file
|
@ -0,0 +1,61 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# ##
|
||||||
|
# file name: start_ncd.sh
|
||||||
|
# Author: Malanik Jan
|
||||||
|
# Email: malanik (_dot_) jan (_at_) gmail (_dot_) com
|
||||||
|
# Description:
|
||||||
|
# - Helper script to start Nextcloud container
|
||||||
|
# ##
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
NAME=''
|
||||||
|
NCD_VOL='/srv/nextcloud:/var/www/html:rprivate'
|
||||||
|
TAG='20190509'
|
||||||
|
|
||||||
|
read -p "Would you like to handle apache/nginx/fpm? [nginx/apache/fpm]" NAME
|
||||||
|
read -p "Remove image? [y/n]" REMOVEIMAGE
|
||||||
|
read -p "Start container? [y/n]" STARTCONTAINER
|
||||||
|
if [ "${STARTCONTAINER}" == 'y' ]; then
|
||||||
|
read -p "Do you want to start with /bin/sleep infinity? [y/n]" STARTSLEEP
|
||||||
|
fi
|
||||||
|
|
||||||
|
IMAGE="1john2ci/nextcloud:${NAME}-ncd-${TAG}"
|
||||||
|
NAME="${NAME}-ncd"
|
||||||
|
|
||||||
|
declare -A PUBLISH=(
|
||||||
|
[nginx-ncd]=' -p 80:80 '
|
||||||
|
[fpm-ncd]=''
|
||||||
|
)
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# Cleanup
|
||||||
|
# ##
|
||||||
|
docker stop "${NAME}"
|
||||||
|
docker rm "${NAME}"
|
||||||
|
if [ "${REMOVEIMAGE}" == 'y' ]; then
|
||||||
|
docker rmi "${IMAGE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${STARTCONTAINER}" != 'y' ] ; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
# ##
|
||||||
|
# Start Container
|
||||||
|
# ##
|
||||||
|
if [ "${STARTSLEEP}" == 'y' ]; then
|
||||||
|
EXECCMD='/bin/sleep infinity'
|
||||||
|
else
|
||||||
|
EXECCMD=''
|
||||||
|
fi
|
||||||
|
eval "CMD='docker run -dit \
|
||||||
|
--hostname "${NAME}" \
|
||||||
|
--name "${NAME}" \
|
||||||
|
--net 'nextcloud' \
|
||||||
|
--volume ${NCD_VOL} \
|
||||||
|
"${PUBLISH[$NAME]}" \
|
||||||
|
"${IMAGE}" \
|
||||||
|
"${EXECCMD}" \
|
||||||
|
'"
|
||||||
|
|
||||||
|
${CMD}
|
12
start_net.sh
Executable file
12
start_net.sh
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# ##
|
||||||
|
# file name: start_net.sh
|
||||||
|
# Author: Malanik Jan
|
||||||
|
# Email: malanik (_dot_) jan (_at_) gmail (_dot_) com
|
||||||
|
# Description:
|
||||||
|
# - Helper script to create user-defined bridge in Docker
|
||||||
|
# - Documentation: https://docs.docker.com/network/bridge/##differences-between-user-defined-bridges-and-the-default-bridge
|
||||||
|
# ##
|
||||||
|
|
||||||
|
|
||||||
|
docker network create nextcloud
|
58
update.sh
58
update.sh
|
@ -1,27 +1,39 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -eo pipefail
|
set -xeo pipefail
|
||||||
|
|
||||||
declare -A php_version=(
|
declare -A php_version=(
|
||||||
[default]='7.3'
|
[default]='7.3'
|
||||||
[14.0]='7.2'
|
[14.0]='7.2'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# Introduce nginx entrycmd
|
||||||
|
# ##
|
||||||
declare -A cmd=(
|
declare -A cmd=(
|
||||||
[apache]='apache2-foreground'
|
[apache]='apache2-foreground'
|
||||||
[fpm]='php-fpm'
|
[fpm]='php-fpm'
|
||||||
[fpm-alpine]='php-fpm'
|
[fpm-alpine]='php-fpm'
|
||||||
|
[nginx]='nginx-foreground'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# Set Nginx base image(not updated in Dockerfile)
|
||||||
|
# ##
|
||||||
declare -A base=(
|
declare -A base=(
|
||||||
[apache]='debian'
|
[apache]='debian'
|
||||||
[fpm]='debian'
|
[fpm]='debian'
|
||||||
[fpm-alpine]='alpine'
|
[fpm-alpine]='alpine'
|
||||||
|
[nginx]='nginx'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# ##
|
||||||
|
# Configure extras for nginx
|
||||||
|
# ##
|
||||||
declare -A extras=(
|
declare -A extras=(
|
||||||
[apache]='\nRUN a2enmod rewrite remoteip ;\\\n {\\\n echo RemoteIPHeader X-Real-IP ;\\\n echo RemoteIPTrustedProxy 10.0.0.0/8 ;\\\n echo RemoteIPTrustedProxy 172.16.0.0/12 ;\\\n echo RemoteIPTrustedProxy 192.168.0.0/16 ;\\\n } > /etc/apache2/conf-available/remoteip.conf;\\\n a2enconf remoteip'
|
[apache]='\nRUN a2enmod rewrite remoteip ;\\\n {\\\n echo RemoteIPHeader X-Real-IP ;\\\n echo RemoteIPTrustedProxy 10.0.0.0/8 ;\\\n echo RemoteIPTrustedProxy 172.16.0.0/12 ;\\\n echo RemoteIPTrustedProxy 192.168.0.0/16 ;\\\n } > /etc/apache2/conf-available/remoteip.conf;\\\n a2enconf remoteip'
|
||||||
[fpm]=''
|
[fpm]=''
|
||||||
[fpm-alpine]=''
|
[fpm-alpine]=''
|
||||||
|
[nginx]=''
|
||||||
)
|
)
|
||||||
|
|
||||||
apcu_version="$(
|
apcu_version="$(
|
||||||
|
@ -66,11 +78,13 @@ declare -A pecl_versions=(
|
||||||
[redis]="$redis_version"
|
[redis]="$redis_version"
|
||||||
[imagick]="$imagick_version"
|
[imagick]="$imagick_version"
|
||||||
)
|
)
|
||||||
|
# ##
|
||||||
|
# Introduce new variant - Nginx
|
||||||
|
# ##
|
||||||
variants=(
|
variants=(
|
||||||
apache
|
apache
|
||||||
fpm
|
fpm
|
||||||
fpm-alpine
|
nginx
|
||||||
)
|
)
|
||||||
|
|
||||||
min_version='14.0'
|
min_version='14.0'
|
||||||
|
@ -103,14 +117,23 @@ function create_variant() {
|
||||||
|
|
||||||
# Create the version+variant directory with a Dockerfile.
|
# Create the version+variant directory with a Dockerfile.
|
||||||
mkdir -p "$dir"
|
mkdir -p "$dir"
|
||||||
|
echo "updating $fullversion [$1] $variant"
|
||||||
|
# ##
|
||||||
|
# Create new Dockerfile
|
||||||
|
# ##
|
||||||
template="Dockerfile-${base[$variant]}.template"
|
template="Dockerfile-${base[$variant]}.template"
|
||||||
echo "# DO NOT EDIT: created by update.sh from $template" > "$dir/Dockerfile"
|
echo "# DO NOT EDIT: created by update.sh from $template" > "$dir/Dockerfile"
|
||||||
cat "$template" >> "$dir/Dockerfile"
|
cat "$template" >> "$dir/Dockerfile"
|
||||||
|
|
||||||
echo "updating $fullversion [$1] $variant"
|
if [ "${variant}" == 'nginx' ]; then
|
||||||
|
# ##
|
||||||
# Replace the variables.
|
# Upload Nginx config files & scripts
|
||||||
|
# ##
|
||||||
|
for name in nextcloud.conf nginx-foreground; do
|
||||||
|
cp "${name}" "${dir}/${name}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
# Replace the variables.
|
||||||
sed -ri -e '
|
sed -ri -e '
|
||||||
s/%%PHP_VERSION%%/'"$phpVersion"'/g;
|
s/%%PHP_VERSION%%/'"$phpVersion"'/g;
|
||||||
s/%%VARIANT%%/'"$variant"'/g;
|
s/%%VARIANT%%/'"$variant"'/g;
|
||||||
|
@ -145,7 +168,9 @@ function create_variant() {
|
||||||
if [ "$variant" != "apache" ]; then
|
if [ "$variant" != "apache" ]; then
|
||||||
rm "$dir/config/apache-pretty-urls.config.php"
|
rm "$dir/config/apache-pretty-urls.config.php"
|
||||||
fi
|
fi
|
||||||
|
# ##
|
||||||
|
# Limit archs of builded images for easier CI
|
||||||
|
# ##
|
||||||
for arch in i386 amd64; do
|
for arch in i386 amd64; do
|
||||||
travisEnv=' - env: VERSION='"$1"' VARIANT='"$variant"' ARCH='"$arch"'\n'"$travisEnv"
|
travisEnv=' - env: VERSION='"$1"' VARIANT='"$variant"' ARCH='"$arch"'\n'"$travisEnv"
|
||||||
done
|
done
|
||||||
|
@ -158,6 +183,11 @@ fullversions=( $( curl -fsSL 'https://download.nextcloud.com/server/releases/' |
|
||||||
grep -oE '[[:digit:]]+(\.[[:digit:]]+){2}' | \
|
grep -oE '[[:digit:]]+(\.[[:digit:]]+){2}' | \
|
||||||
sort -urV ) )
|
sort -urV ) )
|
||||||
versions=( $( printf '%s\n' "${fullversions[@]}" | cut -d. -f1-2 | sort -urV ) )
|
versions=( $( printf '%s\n' "${fullversions[@]}" | cut -d. -f1-2 | sort -urV ) )
|
||||||
|
# ##
|
||||||
|
# Limit version of builded images to current for easier CI
|
||||||
|
# TODO: introduce Nginx minimal version, put code "for version in versions" in function, handle params
|
||||||
|
# ##
|
||||||
|
versions=('16.0')
|
||||||
for version in "${versions[@]}"; do
|
for version in "${versions[@]}"; do
|
||||||
fullversion="$( printf '%s\n' "${fullversions[@]}" | grep -E "^$version" | head -1 )"
|
fullversion="$( printf '%s\n' "${fullversions[@]}" | grep -E "^$version" | head -1 )"
|
||||||
|
|
||||||
|
@ -183,8 +213,8 @@ for version in "${versions_rc[@]}"; do
|
||||||
if ! check_released "$fullversion"; then
|
if ! check_released "$fullversion"; then
|
||||||
|
|
||||||
for variant in "${variants[@]}"; do
|
for variant in "${variants[@]}"; do
|
||||||
|
echo "skipping ${version}"
|
||||||
create_variant "$version-rc" "https:\/\/download.nextcloud.com\/server\/prereleases"
|
#create_variant "$version-rc" "https:\/\/download.nextcloud.com\/server\/prereleases"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -203,8 +233,8 @@ for version in "${versions_beta[@]}"; do
|
||||||
if ! check_rc_released "$fullversion"; then
|
if ! check_rc_released "$fullversion"; then
|
||||||
|
|
||||||
for variant in "${variants[@]}"; do
|
for variant in "${variants[@]}"; do
|
||||||
|
echo "skipping ${version}"
|
||||||
create_variant "$version-beta" "https:\/\/download.nextcloud.com\/server\/prereleases"
|
#create_variant "$version-beta" "https:\/\/download.nextcloud.com\/server\/prereleases"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -223,8 +253,8 @@ for version in "${versions_alpha[@]}"; do
|
||||||
if ! check_beta_released "$fullversion"; then
|
if ! check_beta_released "$fullversion"; then
|
||||||
|
|
||||||
for variant in "${variants[@]}"; do
|
for variant in "${variants[@]}"; do
|
||||||
|
echo "skipping ${version}"
|
||||||
create_variant "$version-alpha" "https:\/\/download.nextcloud.com\/server\/prereleases"
|
#create_variant "$version-alpha" "https:\/\/download.nextcloud.com\/server\/prereleases"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Add table
Reference in a new issue