nextcloud: fix, php 7.1, remove redis

This commit is contained in:
Wonderfall 2017-02-15 17:36:36 +01:00
parent e3c4fa505b
commit c482784782
45 changed files with 128 additions and 1074 deletions

View File

@ -1,122 +0,0 @@
FROM orax/alpine-armhf:edge
MAINTAINER Wonderfall <wonderfall@schrodinger.io>
ARG NEXTCLOUD_VERSION=11.0.1
ARG GNU_LIBICONV_VERSION=1.14
ARG GPG_nextcloud="2880 6A87 8AE4 23A2 8372 792E D758 99B9 A724 937A"
ENV UID=991 GID=991 \
UPLOAD_MAX_SIZE=10G \
APC_SHM_SIZE=64M \
OPCACHE_MEM_SIZE=64 \
REDIS_MAX_MEMORY=32mb \
CRON_PERIOD=15m \
TZ=Etc/UTC \
DB_TYPE=sqlite3 \
ADMIN_USER=admin \
ADMIN_PASSWORD=admin
RUN echo "@commuedge https://nl.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
&& echo "@testing https://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
&& BUILD_DEPS=" \
gnupg \
tar \
build-base \
autoconf \
automake \
libtool \
samba-dev" \
&& apk -U add \
${BUILD_DEPS} \
nginx \
s6 \
libressl \
ca-certificates \
libsmbclient \
samba-client \
su-exec \
tzdata \
redis \
php7@commuedge \
php7-fpm@commuedge \
php7-intl@commuedge \
php7-mbstring@commuedge \
php7-curl@commuedge \
php7-gd@commuedge \
php7-mcrypt@commuedge \
php7-opcache@commuedge \
php7-json@commuedge \
php7-session@commuedge \
php7-pdo@commuedge \
php7-dom@commuedge \
php7-ctype@commuedge \
php7-pdo_mysql@commuedge \
php7-pdo_pgsql@commuedge \
php7-pgsql@commuedge \
php7-pdo_sqlite@commuedge \
php7-sqlite3@commuedge \
php7-zlib@commuedge \
php7-zip@commuedge \
php7-xmlreader@commuedge \
php7-posix@commuedge \
php7-openssl@commuedge \
php7-ldap@commuedge \
php7-ftp@commuedge \
php7-pcntl@commuedge \
php7-exif@commuedge \
php7-apcu@testing \
php7-redis@testing \
php7-pear@commuedge \
php7-dev@commuedge \
&& sed -i "$ s|\-n||g" /usr/bin/pecl && pecl install smbclient \
&& cd /tmp && wget -q http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${GNU_LIBICONV_VERSION}.tar.gz \
&& tar xzf libiconv-${GNU_LIBICONV_VERSION}.tar.gz && cd libiconv-${GNU_LIBICONV_VERSION} \
&& ./configure --prefix=/usr/local \
&& wget -q https://raw.githubusercontent.com/mxe/mxe/7e231efd245996b886b501dad780761205ecf376/src/libiconv-1-fixes.patch \
&& patch -p1 -u < libiconv-1-fixes.patch \
&& make && make install && libtool --finish /usr/local/lib && cd /tmp \
&& wget -q http://is1.php.net/get/php-7.0.13.tar.gz/from/this/mirror -O php7.tar.gz \
&& tar xzf php7.tar.gz && cd /tmp/php-7.0.13/ext/iconv && phpize7 \
&& ./configure --with-iconv=/usr/local --with-php-config=/usr/bin/php-config7 \
&& make && cp modules/iconv.so /usr/lib/php7/modules && cd /tmp \
&& echo "extension=iconv.so" > /etc/php7/conf.d/00_iconv.ini \
&& echo "extension=smbclient.so" > /etc/php7/conf.d/00_smbclient.ini \
&& mkdir /nextcloud \
&& NEXTCLOUD_TARBALL="nextcloud-${NEXTCLOUD_VERSION}.tar.bz2" \
&& wget -q https://download.nextcloud.com/server/releases/${NEXTCLOUD_TARBALL} \
&& wget -q https://download.nextcloud.com/server/releases/${NEXTCLOUD_TARBALL}.sha256 \
&& wget -q https://download.nextcloud.com/server/releases/${NEXTCLOUD_TARBALL}.asc \
&& wget -q https://nextcloud.com/nextcloud.asc \
&& echo "Verifying both integrity and authenticity of ${NEXTCLOUD_TARBALL}..." \
&& CHECKSUM_STATE=$(echo -n $(sha256sum -c ${NEXTCLOUD_TARBALL}.sha256) | tail -c 2) \
&& if [ "${CHECKSUM_STATE}" != "OK" ]; then echo "Warning! Checksum does not match!" && exit 1; fi \
&& gpg --import nextcloud.asc \
&& FINGERPRINT="$(LANG=C gpg --verify ${NEXTCLOUD_TARBALL}.asc ${NEXTCLOUD_TARBALL} 2>&1 \
| sed -n "s#Primary key fingerprint: \(.*\)#\1#p")" \
&& if [ -z "${FINGERPRINT}" ]; then echo "Warning! Invalid GPG signature!" && exit 1; fi \
&& if [ "${FINGERPRINT}" != "${GPG_nextcloud}" ]; then echo "Warning! Wrong GPG fingerprint!" && exit 1; fi \
&& echo "All seems good, now unpacking ${NEXTCLOUD_TARBALL}..." \
&& tar xjf ${NEXTCLOUD_TARBALL} --strip 1 -C /nextcloud \
&& apk del ${BUILD_DEPS} php7-pear php7-dev \
&& rm -rf /var/cache/apk/* /tmp/* /root/.gnupg
COPY nginx.conf /etc/nginx/nginx.conf
COPY php-fpm.conf /etc/php7/php-fpm.conf
COPY opcache.ini /etc/php7/conf.d/00_opcache.ini
COPY apcu.ini /etc/php7/conf.d/apcu.ini
COPY redis.conf /etc/redis.conf
COPY run.sh /usr/local/bin/run.sh
COPY setup.sh /usr/local/bin/setup.sh
COPY occ /usr/local/bin/occ
COPY s6.d /etc/s6.d
RUN chmod +x /usr/local/bin/* /etc/s6.d/*/* /etc/s6.d/.s6-svscan/*
VOLUME /data /config /apps2 /var/lib/redis
EXPOSE 8888
LABEL description="A server software for creating file hosting services" \
nextcloud="Nextcloud v${NEXTCLOUD_VERSION}"
CMD ["run.sh"]

View File

@ -1,4 +0,0 @@
extension=apcu.so
apc.enabled=1
apc.shm_size=<APC_SHM_SIZE>
apc.ttl=7200

View File

@ -1,113 +0,0 @@
worker_processes auto;
pid /tmp/nginx.pid;
daemon off;
events {
worker_connections 1024;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log off;
error_log /tmp/ngx_error.log error;
sendfile on;
keepalive_timeout 15;
keepalive_disable msie6;
keepalive_requests 100;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
fastcgi_temp_path /tmp/fastcgi 1 2;
client_body_temp_path /tmp/client_body 1 2;
proxy_temp_path /tmp/proxy 1 2;
uwsgi_temp_path /tmp/uwsgi 1 2;
scgi_temp_path /tmp/scgi 1 2;
gzip off;
server {
listen 8888;
root /nextcloud;
client_max_body_size <UPLOAD_MAX_SIZE>;
fastcgi_buffers 64 4K;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload";
add_header X-Frame-Options "SAMEORIGIN";
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;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location / {
rewrite ^ /index.php$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/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass unix:/tmp/php-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_read_timeout 1200;
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}
location ~* \.(?:css|js)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Frame-Options "SAMEORIGIN";
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;
access_log off;
}
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
access_log off;
}
}
}

View File

@ -1,2 +0,0 @@
#!/bin/sh
su-exec $UID:$GID php7 /nextcloud/occ $@

View File

@ -1,8 +0,0 @@
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.fast_shutdown=1
opcache.memory_consumption=<OPCACHE_MEM_SIZE>
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=5413
opcache.revalidate_freq=60

View File

@ -1,18 +0,0 @@
[global]
daemonize = no
[www]
listen = /tmp/php-fpm.sock
pm = dynamic
pm.max_children = 15
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
chdir = /
request_terminate_timeout = 0
env[PATH] = /usr/local/bin:/usr/bin:/bin
php_admin_value[post_max_size] = <UPLOAD_MAX_SIZE>
php_admin_value[upload_max_filesize] = <UPLOAD_MAX_SIZE>
php_admin_value[max_execution_time] = 10800
php_admin_value[max_input_time] = 3600
php_admin_value[expose_php] = Off

View File

@ -1,14 +0,0 @@
bind 127.0.0.1
protected-mode yes
port 0
unixsocket /tmp/redis.sock
unixsocketperm 700
daemonize no
pidfile /tmp/redis.pid
logfile /tmp/redis.log
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis/
maxmemory <REDIS_MAX_MEMORY>

View File

@ -1,40 +0,0 @@
#!/bin/sh
sed -i -e "s/<UPLOAD_MAX_SIZE>/$UPLOAD_MAX_SIZE/g" /etc/nginx/nginx.conf /etc/php7/php-fpm.conf \
-e "s/<APC_SHM_SIZE>/$APC_SHM_SIZE/g" /etc/php7/conf.d/apcu.ini \
-e "s/<OPCACHE_MEM_SIZE>/$OPCACHE_MEM_SIZE/g" /etc/php7/conf.d/00_opcache.ini \
-e "s/<REDIS_MAX_MEMORY>/$REDIS_MAX_MEMORY/g" /etc/redis.conf \
-e "s/<CRON_PERIOD>/$CRON_PERIOD/g" /etc/s6.d/cron/run
# Put the configuration and apps into volumes
ln -sf /config/config.php /nextcloud/config/config.php &>/dev/null
ln -sf /apps2 /nextcloud &>/dev/null
mv nextcloud fix && mv fix nextcloud # fix strange bug
echo "Updating permissions..."
for dir in /nextcloud /data /config /apps2 /etc/nginx /etc/php7 /var/log /var/lib/nginx /var/lib/redis /tmp /etc/s6.d; do
if $(find $dir ! -user $UID -o ! -group $GID|egrep '.' -q); then
echo "Updating permissions in $dir..."
chown -R $UID:$GID $dir
else
echo "Permissions in $dir are correct."
fi
done
echo "Done updating permissions."
if [ ! -f /config/config.php ]; then
# New installation, run the setup
/usr/local/bin/setup.sh
else
occ upgrade
if [ \( $? -ne 0 \) -a \( $? -ne 3 \) ]; then
echo "Trying ownCloud upgrade again to work around ownCloud upgrade bug..."
occ upgrade
if [ \( $? -ne 0 \) -a \( $? -ne 3 \) ]; then exit 1; fi
occ maintenance:mode --off
echo "...which seemed to work."
fi
fi
exec su-exec $UID:$GID /bin/s6-svscan /etc/s6.d

View File

@ -1,3 +0,0 @@
#!/bin/sh
exit 0

View File

@ -1,6 +0,0 @@
#!/bin/sh
while true; do
php7 -f /nextcloud/cron.php
sleep <CRON_PERIOD>
done

View File

@ -1,2 +0,0 @@
#!/bin/sh
exec nginx

View File

@ -1,2 +0,0 @@
#!/bin/sh
exec php-fpm7

View File

@ -1,2 +0,0 @@
#!/bin/sh
exec redis-server /etc/redis.conf

View File

@ -1,112 +0,0 @@
#!/bin/sh
# Nextcloud
##########################
#source setup/functions.sh # load our functions
#source /etc/mailinabox.conf # load global vars
CONFIGFILE=/config/config.php
# Create an initial configuration file.
instanceid=oc$(echo $PRIMARY_HOSTNAME | sha1sum | fold -w 10 | head -n 1)
cat > $CONFIGFILE <<EOF;
<?php
\$CONFIG = array (
'datadirectory' => '/data',
"apps_paths" => array (
0 => array (
"path" => "/nextcloud/apps",
"url" => "/apps",
"writable" => false,
),
1 => array (
"path" => "/apps2",
"url" => "/apps2",
"writable" => true,
),
),
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '/tmp/redis.sock',
'port' => 0,
'timeout' => 0.0,
),
'instanceid' => '$instanceid',
);
?>
EOF
# Create an auto-configuration file to fill in database settings
# when the install script is run. Make an administrator account
# here or else the install can't finish.
adminpassword=$(dd if=/dev/urandom bs=1 count=40 2>/dev/null | sha1sum | fold -w 30 | head -n 1)
cat > /nextcloud/config/autoconfig.php <<EOF;
<?php
\$AUTOCONFIG = array (
# storage/database
'directory' => '/data',
'dbtype' => '${DB_TYPE:-sqlite3}',
'dbname' => '${DB_NAME:-nextcloud}',
'dbuser' => '${DB_USER:-nextcloud}',
'dbpass' => '${DB_PASSWORD:-password}',
'dbhost' => '${DB_HOST:-nextcloud-db}',
'dbtableprefix' => 'oc_',
EOF
if [[ ! -z "$ADMIN_USER" ]]; then
cat >> /nextcloud/config/autoconfig.php <<EOF;
# create an administrator account with a random password so that
# the user does not have to enter anything on first load of ownCloud
'adminlogin' => '${ADMIN_USER}',
'adminpass' => '${ADMIN_PASSWORD}',
EOF
fi
cat >> /nextcloud/config/autoconfig.php <<EOF;
);
?>
EOF
echo "Starting automatic configuration..."
# Execute ownCloud's setup step, which creates the ownCloud database.
# It also wipes it if it exists. And it updates config.php with database
# settings and deletes the autoconfig.php file.
(cd /nextcloud; php7 index.php)
echo "Automatic configuration finished."
# Update config.php.
# * trusted_domains is reset to localhost by autoconfig starting with ownCloud 8.1.1,
# so set it here. It also can change if the box's PRIMARY_HOSTNAME changes, so
# this will make sure it has the right value.
# * Some settings weren't included in previous versions of Mail-in-a-Box.
# * We need to set the timezone to the system timezone to allow fail2ban to ban
# users within the proper timeframe
# * We need to set the logdateformat to something that will work correctly with fail2ban
# Use PHP to read the settings file, modify it, and write out the new settings array.
CONFIG_TEMP=$(/bin/mktemp)
php7 <<EOF > $CONFIG_TEMP && mv $CONFIG_TEMP $CONFIGFILE
<?php
include("/config/config.php");
//\$CONFIG['memcache.local'] = '\\OC\\Memcache\\Memcached';
\$CONFIG['mail_from_address'] = 'administrator'; # just the local part, matches our master administrator address
\$CONFIG['logtimezone'] = '$TZ';
\$CONFIG['logdateformat'] = 'Y-m-d H:i:s';
echo "<?php\n\\\$CONFIG = ";
var_export(\$CONFIG);
echo ";";
?>
EOF
chown -R $UID:$GID /config /data
# Enable/disable apps. Note that this must be done after the ownCloud setup.
# The firstrunwizard gave Josh all sorts of problems, so disabling that.
# user_external is what allows ownCloud to use IMAP for login. The contacts
# and calendar apps are the extensions we really care about here.
occ app:disable firstrunwizard

View File

@ -8,7 +8,6 @@ ENV UID=991 GID=991 \
UPLOAD_MAX_SIZE=10G \
APC_SHM_SIZE=128M \
OPCACHE_MEM_SIZE=128 \
REDIS_MAX_MEMORY=64mb \
CRON_PERIOD=15m \
CRON_MEMORY_LIMIT=1g \
TZ=Etc/UTC \
@ -16,7 +15,7 @@ ENV UID=991 GID=991 \
ADMIN_USER=admin \
ADMIN_PASSWORD=admin
RUN echo "@commuedge https://nl.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
RUN echo "@testing https://nl.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
&& echo "@testing https://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
&& BUILD_DEPS=" \
gnupg \
@ -26,7 +25,7 @@ RUN echo "@commuedge https://nl.alpinelinux.org/alpine/edge/community" >> /etc/a
automake \
libtool \
samba-dev" \
&& apk -U add \
&& apk -U upgrade && apk add \
${BUILD_DEPS} \
nginx \
s6 \
@ -36,51 +35,50 @@ RUN echo "@commuedge https://nl.alpinelinux.org/alpine/edge/community" >> /etc/a
samba-client \
su-exec \
tzdata \
redis \
php7@commuedge \
php7-fpm@commuedge \
php7-intl@commuedge \
php7-mbstring@commuedge \
php7-curl@commuedge \
php7-gd@commuedge \
php7-mcrypt@commuedge \
php7-opcache@commuedge \
php7-json@commuedge \
php7-session@commuedge \
php7-pdo@commuedge \
php7-dom@commuedge \
php7-ctype@commuedge \
php7-pdo_mysql@commuedge \
php7-pdo_pgsql@commuedge \
php7-pgsql@commuedge \
php7-pdo_sqlite@commuedge \
php7-sqlite3@commuedge \
php7-zlib@commuedge \
php7-zip@commuedge \
php7-xmlreader@commuedge \
php7-posix@commuedge \
php7-openssl@commuedge \
php7-ldap@commuedge \
php7-ftp@commuedge \
php7-pcntl@commuedge \
php7-exif@commuedge \
php7-apcu@testing \
php7-redis@testing \
php7-pear@commuedge \
php7-dev@commuedge \
&& sed -i "$ s|\-n||g" /usr/bin/pecl && pecl install smbclient \
php7.1@testing \
php7.1-fpm@testing \
php7.1-intl@testing \
php7.1-mbstring@testing \
php7.1-curl@testing \
php7.1-gd@testing \
php7.1-mcrypt@testing \
php7.1-opcache@testing \
php7.1-json@testing \
php7.1-session@testing \
php7.1-pdo@testing \
php7.1-dom@testing \
php7.1-ctype@testing \
php7.1-pdo_mysql@testing \
php7.1-pdo_pgsql@testing \
php7.1-pgsql@testing \
php7.1-pdo_sqlite@testing \
php7.1-sqlite3@testing \
php7.1-zlib@testing \
php7.1-zip@testing \
php7.1-xmlreader@testing \
php7.1-xml@testing \
php7.1-xmlwriter@testing \
php7.1-posix@testing \
php7.1-openssl@testing \
php7.1-ldap@testing \
php7.1-ftp@testing \
php7.1-pcntl@testing \
php7.1-exif@testing \
php7.1-pear@testing \
php7.1-dev@testing \
&& sed -i "$ s|\-n||g" /usr/bin/pecl && pecl install smbclient apcu \
&& cd /tmp && wget -q http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${GNU_LIBICONV_VERSION}.tar.gz \
&& tar xzf libiconv-${GNU_LIBICONV_VERSION}.tar.gz && cd libiconv-${GNU_LIBICONV_VERSION} \
&& ./configure --prefix=/usr/local \
&& wget -q https://raw.githubusercontent.com/mxe/mxe/7e231efd245996b886b501dad780761205ecf376/src/libiconv-1-fixes.patch \
&& patch -p1 -u < libiconv-1-fixes.patch \
&& make && make install && libtool --finish /usr/local/lib && cd /tmp \
&& wget -q http://is1.php.net/get/php-7.0.13.tar.gz/from/this/mirror -O php7.tar.gz \
&& tar xzf php7.tar.gz && cd /tmp/php-7.0.13/ext/iconv && phpize7 \
&& ./configure --with-iconv=/usr/local --with-php-config=/usr/bin/php-config7 \
&& make && cp modules/iconv.so /usr/lib/php7/modules && cd /tmp \
&& echo "extension=iconv.so" > /etc/php7/conf.d/00_iconv.ini \
&& echo "extension=smbclient.so" > /etc/php7/conf.d/00_smbclient.ini \
&& wget -q http://is1.php.net/get/php-7.1.1.tar.gz/from/this/mirror -O php7.1.tar.gz \
&& tar xzf php7.1.tar.gz && cd /tmp/php-7.1.1/ext/iconv && phpize7.1 \
&& ./configure --with-iconv=/usr/local --with-php-config=/usr/bin/php-config7.1 \
&& make && cp modules/iconv.so /usr/lib/php7.1/modules && cd /tmp \
&& echo "extension=iconv.so" > /etc/php7.1/conf.d/00_iconv.ini \
&& echo "extension=smbclient.so" > /etc/php7.1/conf.d/00_smbclient.ini \
&& mkdir /nextcloud \
&& NEXTCLOUD_TARBALL="nextcloud-${NEXTCLOUD_VERSION}.tar.bz2" \
&& wget -q https://download.nextcloud.com/server/releases/${NEXTCLOUD_TARBALL} \
@ -97,14 +95,13 @@ RUN echo "@commuedge https://nl.alpinelinux.org/alpine/edge/community" >> /etc/a
&& if [ "${FINGERPRINT}" != "${GPG_nextcloud}" ]; then echo "Warning! Wrong GPG fingerprint!" && exit 1; fi \
&& echo "All seems good, now unpacking ${NEXTCLOUD_TARBALL}..." \
&& tar xjf ${NEXTCLOUD_TARBALL} --strip 1 -C /nextcloud \
&& apk del ${BUILD_DEPS} php7-pear php7-dev \
&& apk del ${BUILD_DEPS} php7.1-pear php7.1-dev \
&& rm -rf /var/cache/apk/* /tmp/* /root/.gnupg
COPY nginx.conf /etc/nginx/nginx.conf
COPY php-fpm.conf /etc/php7/php-fpm.conf
COPY opcache.ini /etc/php7/conf.d/00_opcache.ini
COPY apcu.ini /etc/php7/conf.d/apcu.ini
COPY redis.conf /etc/redis.conf
COPY php-fpm.conf /etc/php7.1/php-fpm.conf
COPY opcache.ini /etc/php7.1/conf.d/00_opcache.ini
COPY apcu.ini /etc/php7.1/conf.d/apcu.ini
COPY run.sh /usr/local/bin/run.sh
COPY setup.sh /usr/local/bin/setup.sh
COPY occ /usr/local/bin/occ
@ -112,7 +109,7 @@ COPY s6.d /etc/s6.d
RUN chmod +x /usr/local/bin/* /etc/s6.d/*/* /etc/s6.d/.s6-svscan/*
VOLUME /data /config /apps2 /var/lib/redis
VOLUME /data /config /apps2
EXPOSE 8888

View File

@ -1,2 +1,2 @@
#!/bin/sh
su-exec $UID:$GID php7 /nextcloud/occ $@
su-exec $UID:$GID php7.1 /nextcloud/occ $@

View File

@ -1,14 +0,0 @@
bind 127.0.0.1
protected-mode yes
port 0
unixsocket /tmp/redis.sock
unixsocketperm 700
daemonize no
pidfile /tmp/redis.pid
logfile /tmp/redis.log
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis/
maxmemory <REDIS_MAX_MEMORY>

View File

@ -1,9 +1,8 @@
#!/bin/sh
sed -i -e "s/<UPLOAD_MAX_SIZE>/$UPLOAD_MAX_SIZE/g" /etc/nginx/nginx.conf /etc/php7/php-fpm.conf \
-e "s/<APC_SHM_SIZE>/$APC_SHM_SIZE/g" /etc/php7/conf.d/apcu.ini \
-e "s/<OPCACHE_MEM_SIZE>/$OPCACHE_MEM_SIZE/g" /etc/php7/conf.d/00_opcache.ini \
-e "s/<REDIS_MAX_MEMORY>/$REDIS_MAX_MEMORY/g" /etc/redis.conf \
sed -i -e "s/<UPLOAD_MAX_SIZE>/$UPLOAD_MAX_SIZE/g" /etc/nginx/nginx.conf /etc/php7.1/php-fpm.conf \
-e "s/<APC_SHM_SIZE>/$APC_SHM_SIZE/g" /etc/php7.1/conf.d/apcu.ini \
-e "s/<OPCACHE_MEM_SIZE>/$OPCACHE_MEM_SIZE/g" /etc/php7.1/conf.d/00_opcache.ini \
-e "s/<CRON_MEMORY_LIMIT>/$CRON_MEMORY_LIMIT/g" /etc/s6.d/cron/run \
-e "s/<CRON_PERIOD>/$CRON_PERIOD/g" /etc/s6.d/cron/run
@ -14,7 +13,7 @@ ln -sf /apps2 /nextcloud &>/dev/null
mv nextcloud fix && mv fix nextcloud # fix strange bug
echo "Updating permissions..."
for dir in /nextcloud /data /config /apps2 /etc/nginx /etc/php7 /var/log /var/lib/nginx /var/lib/redis /tmp /etc/s6.d; do
for dir in /nextcloud /data /config /apps2 /etc/nginx /etc/php7.1 /var/log /var/lib/nginx /tmp /etc/s6.d; do
if $(find $dir ! -user $UID -o ! -group $GID|egrep '.' -q); then
echo "Updating permissions in $dir..."
chown -R $UID:$GID $dir

View File

@ -1,6 +1,6 @@
#!/bin/sh
while true; do
php7 -d memory_limit=<CRON_MEMORY_LIMIT> -f /nextcloud/cron.php
php7.1 -d memory_limit=<CRON_MEMORY_LIMIT> -f /nextcloud/cron.php
sleep <CRON_PERIOD>
done

View File

@ -1,2 +1,2 @@
#!/bin/sh
exec php-fpm7
exec php-fpm7.1

View File

@ -1,2 +0,0 @@
#!/bin/sh
exec redis-server /etc/redis.conf

View File

@ -29,13 +29,6 @@ cat > $CONFIGFILE <<EOF;
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '/tmp/redis.sock',
'port' => 0,
'timeout' => 0.0,
),
'instanceid' => '$instanceid',
);
?>
@ -74,7 +67,7 @@ echo "Starting automatic configuration..."
# Execute ownCloud's setup step, which creates the ownCloud database.
# It also wipes it if it exists. And it updates config.php with database
# settings and deletes the autoconfig.php file.
(cd /nextcloud; php7 index.php)
(cd /nextcloud; php7.1 index.php)
echo "Automatic configuration finished."
# Update config.php.
@ -88,7 +81,7 @@ echo "Automatic configuration finished."
# Use PHP to read the settings file, modify it, and write out the new settings array.
CONFIG_TEMP=$(/bin/mktemp)
php7 <<EOF > $CONFIG_TEMP && mv $CONFIG_TEMP $CONFIGFILE
php7.1 <<EOF > $CONFIG_TEMP && mv $CONFIG_TEMP $CONFIGFILE
<?php
include("/config/config.php");

View File

@ -4,39 +4,22 @@
![](https://s32.postimg.org/69nev7aol/Nextcloud_logo.png)
**This image was made for my own use and I have no intention to make this official. Support won't be regular so if there's an update, or a fix, you can open a pull request. Any contribution is welcome, but please be aware I'm very busy currently. Before opening an issue, please check if there's already one related. Also please use Github instead of Docker Hub, otherwise I won't see your comments. Thanks."
### Features
- Based on Alpine Linux Edge.
- Bundled with nginx and PHP 7.
- Bundled with nginx and PHP 7.1.
- Automatic installation using environment variables.
- Package integrity and authenticity checked during building process.
- Data and apps persistence.
- OPCache (opcocde), APCu (local), Redis (file locking) installed and configured.
- OPCache (opcocde), APCu (local) installed and configured.
- system cron task running.
- MySQL, PostgreSQL (server not built-in) and sqlite3 support.
- Redis, FTP, SMB, LDAP support.
- FTP, SMB, LDAP support.
- GNU Libiconv for php iconv extension (avoiding errors with some apps).
- No root processes. Never.
- Environment variables provided (see below).
### Notes
- [It has been reported](https://github.com/Wonderfall/dockerfiles/issues/37) that this image might not work well with old versions of aufs. Please update aufs to 4.x or later, or use overlay/btrfs as a replacement.
- HTTP port has recently changed, it's now **8888**. You will have to modify your reverse proxy settings.
- A Redis sever is now running, so you may want to configure it for file locking cache if your config.php was not generated recently. [For best performance it is recommended by Nextcloud documentation](https://docs.nextcloud.com/server/10/admin_manual/configuration_server/caching_configuration.html#additional-notes-for-redis-vs-apcu-on-memory-caching). Add the following lines to your `config.php` :
```
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '/tmp/redis.sock',
'port' => 0,
'timeout' => 0.0,
),
```
### Why choose this image over the official?
I wanted to make this official, and I was granted an access to the repository. But many people were opposed since my image doesn't respect Docker philosophy "one process per container". Honestly I don't give a shit, but I let them do their thing. Be aware I'm not a developper or anything else related, I maintain this image because I need it. Contributions are welcome!
Why this over the official? I've already answered : this is an all-in-one container, so you can avoid complexity. Only the database is not included since the choice should be yours. Environment variables can be provided for a fast & simple setup. I also care about security : NO root processes (golden rule of my images), and the use of PGP verification whenever it's possible. So which one is better? Of course it's up to you, perhaps you'll prefer the official for its modularity, perhaps you'll prefer mine for its simplicity.
### Tags
- **latest** : latest stable version. (11.0)
- **11.0** : latest 11.0.x version (stable)
@ -57,7 +40,6 @@ Other tags than `daily` are built weekly. For security reasons, you should occas
- **UPLOAD_MAX_SIZE** : maximum upload size *(default : 10G)*
- **APC_SHM_SIZE** : apc memory size *(default : 128M)*
- **OPCACHE_MEM_SIZE** : opcache memory size in megabytes *(default : 128)*
- **REDIS_MAX_MEMORY** : memory limit for Redis *(default : 64mb)*
- **CRON_PERIOD** : time interval between two cron tasks *(default : 15m)*
- **CRON_MEMORY_LIMIT** : memory limit for PHP when executing cronjobs *(default : 1024m)*
- **TZ** : the system/log timezone *(default : Etc/UTC)*
@ -78,7 +60,6 @@ Don't forget to use a **strong password** for the admin account!
- **/data** : Nextcloud data.
- **/config** : config.php location.
- **/apps2** : Nextcloud downloaded apps.
- **/var/lib/redis** : Redis dumpfile location.
### Database
Basically, you can use a database instance running on the host or any other machine. An easier solution is to use an external database container. I suggest you to use MariaDB, which is a reliable database server. You can use the official `mariadb` image available on Docker Hub to create a database container, which must be linked to the Nextcloud container. PostgreSQL can also be used as well.
@ -105,7 +86,6 @@ docker run -d --name nextcloud \
-e UPLOAD_MAX_SIZE=10G \
-e APC_SHM_SIZE=128M \
-e OPCACHE_MEM_SIZE=128 \
-e REDIS_MAX_MEMORY=64mb \
-e CRON_PERIOD=15m \
-e TZ=Etc/UTC \
-e ADMIN_USER=mrrobot \
@ -123,15 +103,7 @@ docker run -d --name nextcloud \
Now you have to use a **reverse proxy** in order to access to your container through Internet, steps and details are available at the end of the README.md. And that's it! Since you already configured Nextcloud through setting environment variables, there's no setup page.
### ARM-based devices
This image is available for `armhf` (Raspberry Pi 1 & 2, Scaleway C1, ...). Although Docker does support ARM-based devices, Docker Hub only builds for x86_64. That's why you will have to build this image yourself! Don't panic, this is easy.
```
git clone https://github.com/Wonderfall/dockerfiles.git
cd dockerfiles/nextcloud/10.0-armhf
docker build -t wonderfall/nextcloud .
```
The building process can take some time.
You will have to build yourself using an Alpine-ARM image, like `orax/alpine-armhf:edge`.
### Configure
In the admin panel, you should switch from `AJAX cron` to `cron` (system cron).
@ -171,7 +143,6 @@ services:
- UPLOAD_MAX_SIZE=10G
- APC_SHM_SIZE=128M
- OPCACHE_MEM_SIZE=128
- REDIS_MAX_MEMORY=64mb
- CRON_PERIOD=15m
- TZ=Europe/Berlin
- ADMIN_USER=admin
@ -203,7 +174,6 @@ nextcloud:
- UPLOAD_MAX_SIZE=10G
- APC_SHM_SIZE=128M
- OPCACHE_MEM_SIZE=128
- REDIS_MAX_MEMORY=64mb
- CRON_PERIOD=15m
- TZ=Europe/Berlin
- ADMIN_USER=admin

View File

@ -1,106 +0,0 @@
FROM orax/alpine-armhf:edge
MAINTAINER Wonderfall <wonderfall@schrodinger.io>
ARG GNU_LIBICONV_VERSION=1.14
ENV UID=991 GID=991 \
UPLOAD_MAX_SIZE=10G \
APC_SHM_SIZE=128M \
OPCACHE_MEM_SIZE=128 \
REDIS_MAX_MEMORY=64mb \
CRON_PERIOD=15m \
TZ=Etc/UTC \
DB_TYPE=sqlite3 \
ADMIN_USER=admin \
ADMIN_PASSWORD=admin
RUN echo "@commuedge https://nl.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
&& echo "@testing https://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
&& BUILD_DEPS=" \
tar \
build-base \
autoconf \
automake \
libtool \
samba-dev" \
&& apk -U add \
${BUILD_DEPS} \
nginx \
s6 \
libressl \
ca-certificates \
libsmbclient \
samba-client \
su-exec \
tzdata \
redis \
php7@commuedge \
php7-fpm@commuedge \
php7-intl@commuedge \
php7-mbstring@commuedge \
php7-curl@commuedge \
php7-gd@commuedge \
php7-mcrypt@commuedge \
php7-opcache@commuedge \
php7-json@commuedge \
php7-session@commuedge \
php7-pdo@commuedge \
php7-dom@commuedge \
php7-ctype@commuedge \
php7-pdo_mysql@commuedge \
php7-pdo_pgsql@commuedge \
php7-pgsql@commuedge \
php7-pdo_sqlite@commuedge \
php7-sqlite3@commuedge \
php7-zlib@commuedge \
php7-zip@commuedge \
php7-xmlreader@commuedge \
php7-posix@commuedge \
php7-openssl@commuedge \
php7-ldap@commuedge \
php7-ftp@commuedge \
php7-pcntl@commuedge \
php7-exif@commuedge \
php7-apcu@testing \
php7-redis@testing \
php7-pear@commuedge \
php7-dev@commuedge \
&& sed -i "$ s|\-n||g" /usr/bin/pecl && pecl install smbclient \
&& cd /tmp && wget -q http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${GNU_LIBICONV_VERSION}.tar.gz \
&& tar xzf libiconv-${GNU_LIBICONV_VERSION}.tar.gz && cd libiconv-${GNU_LIBICONV_VERSION} \
&& ./configure --prefix=/usr/local \
&& wget -q https://raw.githubusercontent.com/mxe/mxe/7e231efd245996b886b501dad780761205ecf376/src/libiconv-1-fixes.patch \
&& patch -p1 -u < libiconv-1-fixes.patch \
&& make && make install && libtool --finish /usr/local/lib && cd /tmp \
&& wget -q http://is1.php.net/get/php-7.0.13.tar.gz/from/this/mirror -O php7.tar.gz \
&& tar xzf php7.tar.gz && cd /tmp/php-7.0.13/ext/iconv && phpize7 \
&& ./configure --with-iconv=/usr/local --with-php-config=/usr/bin/php-config7 \
&& make && cp modules/iconv.so /usr/lib/php7/modules && cd /tmp \
&& echo "extension=iconv.so" > /etc/php7/conf.d/00_iconv.ini \
&& echo "extension=smbclient.so" > /etc/php7/conf.d/00_smbclient.ini \
&& mkdir /nextcloud \
&& wget -q https://download.nextcloud.com/server/daily/latest.tar.bz2 \
&& tar xjf latest.tar.bz2 --strip 1 -C /nextcloud \
&& apk del ${BUILD_DEPS} php7-pear php7-dev \
&& rm -rf /var/cache/apk/* /tmp/*
COPY nginx.conf /etc/nginx/nginx.conf
COPY php-fpm.conf /etc/php7/php-fpm.conf
COPY opcache.ini /etc/php7/conf.d/00_opcache.ini
COPY apcu.ini /etc/php7/conf.d/apcu.ini
COPY redis.conf /etc/redis.conf
COPY run.sh /usr/local/bin/run.sh
COPY setup.sh /usr/local/bin/setup.sh
COPY occ /usr/local/bin/occ
COPY s6.d /etc/s6.d
RUN chmod +x /usr/local/bin/* /etc/s6.d/*/* /etc/s6.d/.s6-svscan/*
VOLUME /data /config /apps2 /var/lib/redis
EXPOSE 8888
LABEL description="A server software for creating file hosting services" \
nextcloud="Nextcloud daily build"
CMD ["run.sh"]

View File

@ -1,4 +0,0 @@
extension=apcu.so
apc.enabled=1
apc.shm_size=<APC_SHM_SIZE>
apc.ttl=7200

View File

@ -1,113 +0,0 @@
worker_processes auto;
pid /tmp/nginx.pid;
daemon off;
events {
worker_connections 1024;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log off;
error_log /tmp/ngx_error.log error;
sendfile on;
keepalive_timeout 15;
keepalive_disable msie6;
keepalive_requests 100;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
fastcgi_temp_path /tmp/fastcgi 1 2;
client_body_temp_path /tmp/client_body 1 2;
proxy_temp_path /tmp/proxy 1 2;
uwsgi_temp_path /tmp/uwsgi 1 2;
scgi_temp_path /tmp/scgi 1 2;
gzip off;
server {
listen 8888;
root /nextcloud;
client_max_body_size <UPLOAD_MAX_SIZE>;
fastcgi_buffers 64 4K;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload";
add_header X-Frame-Options "SAMEORIGIN";
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;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location / {
rewrite ^ /index.php$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/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass unix:/tmp/php-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_read_timeout 1200;
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}
location ~* \.(?:css|js)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Frame-Options "SAMEORIGIN";
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;
access_log off;
}
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
access_log off;
}
}
}

View File

@ -1,2 +0,0 @@
#!/bin/sh
su-exec $UID:$GID php7 /nextcloud/occ $@

View File

@ -1,8 +0,0 @@
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.fast_shutdown=1
opcache.memory_consumption=<OPCACHE_MEM_SIZE>
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=5413
opcache.revalidate_freq=60

View File

@ -1,18 +0,0 @@
[global]
daemonize = no
[www]
listen = /tmp/php-fpm.sock
pm = dynamic
pm.max_children = 15
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
chdir = /
request_terminate_timeout = 0
env[PATH] = /usr/local/bin:/usr/bin:/bin
php_admin_value[post_max_size] = <UPLOAD_MAX_SIZE>
php_admin_value[upload_max_filesize] = <UPLOAD_MAX_SIZE>
php_admin_value[max_execution_time] = 10800
php_admin_value[max_input_time] = 3600
php_admin_value[expose_php] = Off

View File

@ -1,14 +0,0 @@
bind 127.0.0.1
protected-mode yes
port 0
unixsocket /tmp/redis.sock
unixsocketperm 700
daemonize no
pidfile /tmp/redis.pid
logfile /tmp/redis.log
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis/
maxmemory <REDIS_MAX_MEMORY>

View File

@ -1,33 +0,0 @@
#!/bin/sh
sed -i -e "s/<UPLOAD_MAX_SIZE>/$UPLOAD_MAX_SIZE/g" /etc/nginx/nginx.conf /etc/php7/php-fpm.conf \
-e "s/<APC_SHM_SIZE>/$APC_SHM_SIZE/g" /etc/php7/conf.d/apcu.ini \
-e "s/<OPCACHE_MEM_SIZE>/$OPCACHE_MEM_SIZE/g" /etc/php7/conf.d/00_opcache.ini \
-e "s/<REDIS_MAX_MEMORY>/$REDIS_MAX_MEMORY/g" /etc/redis.conf \
-e "s/<CRON_PERIOD>/$CRON_PERIOD/g" /etc/s6.d/cron/run
# Put the configuration and apps into volumes
ln -sf /config/config.php /nextcloud/config/config.php &>/dev/null
ln -sf /apps2 /nextcloud &>/dev/null
for dir in /nextcloud /data /config /apps2 /etc/nginx /etc/php7 /var/log /var/lib/nginx /var/lib/redis /tmp /etc/s6.d; do
if $(find $dir ! -user $UID -o ! -group $GID|egrep '.' -q); then
chown -R $UID:$GID $dir
fi
done
if [ ! -f /config/config.php ]; then
# New installation, run the setup
/usr/local/bin/setup.sh
else
occ upgrade
if [ \( $? -ne 0 \) -a \( $? -ne 3 \) ]; then
echo "Trying ownCloud upgrade again to work around ownCloud upgrade bug..."
occ upgrade
if [ \( $? -ne 0 \) -a \( $? -ne 3 \) ]; then exit 1; fi
occ maintenance:mode --off
echo "...which seemed to work."
fi
fi
exec su-exec $UID:$GID /bin/s6-svscan /etc/s6.d

View File

@ -1,3 +0,0 @@
#!/bin/sh
exit 0

View File

@ -1,6 +0,0 @@
#!/bin/sh
while true; do
php7 -f /nextcloud/cron.php
sleep <CRON_PERIOD>
done

View File

@ -1,2 +0,0 @@
#!/bin/sh
exec nginx

View File

@ -1,2 +0,0 @@
#!/bin/sh
exec php-fpm7

View File

@ -1,2 +0,0 @@
#!/bin/sh
exec redis-server /etc/redis.conf

View File

@ -1,112 +0,0 @@
#!/bin/sh
# Nextcloud
##########################
#source setup/functions.sh # load our functions
#source /etc/mailinabox.conf # load global vars
CONFIGFILE=/config/config.php
# Create an initial configuration file.
instanceid=oc$(echo $PRIMARY_HOSTNAME | sha1sum | fold -w 10 | head -n 1)
cat > $CONFIGFILE <<EOF;
<?php
\$CONFIG = array (
'datadirectory' => '/data',
"apps_paths" => array (
0 => array (
"path" => "/nextcloud/apps",
"url" => "/apps",
"writable" => false,
),
1 => array (
"path" => "/apps2",
"url" => "/apps2",
"writable" => true,
),
),
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '/tmp/redis.sock',
'port' => 0,
'timeout' => 0.0,
),
'instanceid' => '$instanceid',
);
?>
EOF
# Create an auto-configuration file to fill in database settings
# when the install script is run. Make an administrator account
# here or else the install can't finish.
adminpassword=$(dd if=/dev/urandom bs=1 count=40 2>/dev/null | sha1sum | fold -w 30 | head -n 1)
cat > /nextcloud/config/autoconfig.php <<EOF;
<?php
\$AUTOCONFIG = array (
# storage/database
'directory' => '/data',
'dbtype' => '${DB_TYPE:-sqlite3}',
'dbname' => '${DB_NAME:-nextcloud}',
'dbuser' => '${DB_USER:-nextcloud}',
'dbpass' => '${DB_PASSWORD:-password}',
'dbhost' => '${DB_HOST:-nextcloud-db}',
'dbtableprefix' => 'oc_',
EOF
if [[ ! -z "$ADMIN_USER" ]]; then
cat >> /nextcloud/config/autoconfig.php <<EOF;
# create an administrator account with a random password so that
# the user does not have to enter anything on first load of ownCloud
'adminlogin' => '${ADMIN_USER}',
'adminpass' => '${ADMIN_PASSWORD}',
EOF
fi
cat >> /nextcloud/config/autoconfig.php <<EOF;
);
?>
EOF
echo "Starting automatic configuration..."
# Execute ownCloud's setup step, which creates the ownCloud database.
# It also wipes it if it exists. And it updates config.php with database
# settings and deletes the autoconfig.php file.
(cd /nextcloud; php7 index.php)
echo "Automatic configuration finished."
# Update config.php.
# * trusted_domains is reset to localhost by autoconfig starting with ownCloud 8.1.1,
# so set it here. It also can change if the box's PRIMARY_HOSTNAME changes, so
# this will make sure it has the right value.
# * Some settings weren't included in previous versions of Mail-in-a-Box.
# * We need to set the timezone to the system timezone to allow fail2ban to ban
# users within the proper timeframe
# * We need to set the logdateformat to something that will work correctly with fail2ban
# Use PHP to read the settings file, modify it, and write out the new settings array.
CONFIG_TEMP=$(/bin/mktemp)
php7 <<EOF > $CONFIG_TEMP && mv $CONFIG_TEMP $CONFIGFILE
<?php
include("/config/config.php");
//\$CONFIG['memcache.local'] = '\\OC\\Memcache\\Memcached';
\$CONFIG['mail_from_address'] = 'administrator'; # just the local part, matches our master administrator address
\$CONFIG['logtimezone'] = '$TZ';
\$CONFIG['logdateformat'] = 'Y-m-d H:i:s';
echo "<?php\n\\\$CONFIG = ";
var_export(\$CONFIG);
echo ";";
?>
EOF
chown -R $UID:$GID /config /data
# Enable/disable apps. Note that this must be done after the ownCloud setup.
# The firstrunwizard gave Josh all sorts of problems, so disabling that.
# user_external is what allows ownCloud to use IMAP for login. The contacts
# and calendar apps are the extensions we really care about here.
occ app:disable firstrunwizard

View File

@ -1,29 +1,30 @@
FROM alpine:edge
MAINTAINER Wonderfall <wonderfall@schrodinger.io>
ARG GNU_LIBICONV_VERSION=1.14
ARG GPG_nextcloud="2880 6A87 8AE4 23A2 8372 792E D758 99B9 A724 937A"
ENV UID=991 GID=991 \
UPLOAD_MAX_SIZE=10G \
APC_SHM_SIZE=128M \
OPCACHE_MEM_SIZE=128 \
REDIS_MAX_MEMORY=64mb \
CRON_PERIOD=15m \
CRON_MEMORY_LIMIT=1g \
TZ=Etc/UTC \
DB_TYPE=sqlite3 \
ADMIN_USER=admin \
ADMIN_PASSWORD=admin
RUN echo "@commuedge https://nl.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
RUN echo "@testing https://nl.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
&& echo "@testing https://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
&& BUILD_DEPS=" \
gnupg \
tar \
build-base \
autoconf \
automake \
libtool \
samba-dev" \
&& apk -U add \
&& apk -U upgrade && apk add \
${BUILD_DEPS} \
nginx \
s6 \
@ -33,62 +34,60 @@ RUN echo "@commuedge https://nl.alpinelinux.org/alpine/edge/community" >> /etc/a
samba-client \
su-exec \
tzdata \
redis \
php7@commuedge \
php7-fpm@commuedge \
php7-intl@commuedge \
php7-mbstring@commuedge \
php7-curl@commuedge \
php7-gd@commuedge \
php7-mcrypt@commuedge \
php7-opcache@commuedge \
php7-json@commuedge \
php7-session@commuedge \
php7-pdo@commuedge \
php7-dom@commuedge \
php7-ctype@commuedge \
php7-pdo_mysql@commuedge \
php7-pdo_pgsql@commuedge \
php7-pgsql@commuedge \
php7-pdo_sqlite@commuedge \
php7-sqlite3@commuedge \
php7-zlib@commuedge \
php7-zip@commuedge \
php7-xmlreader@commuedge \
php7-posix@commuedge \
php7-openssl@commuedge \
php7-ldap@commuedge \
php7-ftp@commuedge \
php7-pcntl@commuedge \
php7-exif@commuedge \
php7-apcu@testing \
php7-redis@testing \
php7-pear@commuedge \
php7-dev@commuedge \
&& sed -i "$ s|\-n||g" /usr/bin/pecl && pecl install smbclient \
php7.1@testing \
php7.1-fpm@testing \
php7.1-intl@testing \
php7.1-mbstring@testing \
php7.1-curl@testing \
php7.1-gd@testing \
php7.1-mcrypt@testing \
php7.1-opcache@testing \
php7.1-json@testing \
php7.1-session@testing \
php7.1-pdo@testing \
php7.1-dom@testing \
php7.1-ctype@testing \
php7.1-pdo_mysql@testing \
php7.1-pdo_pgsql@testing \
php7.1-pgsql@testing \
php7.1-pdo_sqlite@testing \
php7.1-sqlite3@testing \
php7.1-zlib@testing \
php7.1-zip@testing \
php7.1-xmlreader@testing \
php7.1-xml@testing \
php7.1-xmlwriter@testing \
php7.1-posix@testing \
php7.1-openssl@testing \
php7.1-ldap@testing \
php7.1-ftp@testing \
php7.1-pcntl@testing \
php7.1-exif@testing \
php7.1-pear@testing \
php7.1-dev@testing \
&& sed -i "$ s|\-n||g" /usr/bin/pecl && pecl install smbclient apcu \
&& cd /tmp && wget -q http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${GNU_LIBICONV_VERSION}.tar.gz \
&& tar xzf libiconv-${GNU_LIBICONV_VERSION}.tar.gz && cd libiconv-${GNU_LIBICONV_VERSION} \
&& ./configure --prefix=/usr/local \
&& wget -q https://raw.githubusercontent.com/mxe/mxe/7e231efd245996b886b501dad780761205ecf376/src/libiconv-1-fixes.patch \
&& patch -p1 -u < libiconv-1-fixes.patch \
&& make && make install && libtool --finish /usr/local/lib && cd /tmp \
&& wget -q http://is1.php.net/get/php-7.0.13.tar.gz/from/this/mirror -O php7.tar.gz \
&& tar xzf php7.tar.gz && cd /tmp/php-7.0.13/ext/iconv && phpize7 \
&& ./configure --with-iconv=/usr/local --with-php-config=/usr/bin/php-config7 \
&& make && cp modules/iconv.so /usr/lib/php7/modules && cd /tmp \
&& echo "extension=iconv.so" > /etc/php7/conf.d/00_iconv.ini \
&& echo "extension=smbclient.so" > /etc/php7/conf.d/00_smbclient.ini \
&& wget -q http://is1.php.net/get/php-7.1.1.tar.gz/from/this/mirror -O php7.1.tar.gz \
&& tar xzf php7.1.tar.gz && cd /tmp/php-7.1.1/ext/iconv && phpize7.1 \
&& ./configure --with-iconv=/usr/local --with-php-config=/usr/bin/php-config7.1 \
&& make && cp modules/iconv.so /usr/lib/php7.1/modules && cd /tmp \
&& echo "extension=iconv.so" > /etc/php7.1/conf.d/00_iconv.ini \
&& echo "extension=smbclient.so" > /etc/php7.1/conf.d/00_smbclient.ini \
&& mkdir /nextcloud \
&& wget -q https://download.nextcloud.com/server/daily/latest.tar.bz2 \
&& tar xjf latest.tar.bz2 --strip 1 -C /nextcloud \
&& apk del ${BUILD_DEPS} php7-pear php7-dev \
&& rm -rf /var/cache/apk/* /tmp/*
&& apk del ${BUILD_DEPS} php7.1-pear php7.1-dev \
&& rm -rf /var/cache/apk/* /tmp/* /root/.gnupg
COPY nginx.conf /etc/nginx/nginx.conf
COPY php-fpm.conf /etc/php7/php-fpm.conf
COPY opcache.ini /etc/php7/conf.d/00_opcache.ini
COPY apcu.ini /etc/php7/conf.d/apcu.ini
COPY redis.conf /etc/redis.conf
COPY php-fpm.conf /etc/php7.1/php-fpm.conf
COPY opcache.ini /etc/php7.1/conf.d/00_opcache.ini
COPY apcu.ini /etc/php7.1/conf.d/apcu.ini
COPY run.sh /usr/local/bin/run.sh
COPY setup.sh /usr/local/bin/setup.sh
COPY occ /usr/local/bin/occ
@ -96,11 +95,12 @@ COPY s6.d /etc/s6.d
RUN chmod +x /usr/local/bin/* /etc/s6.d/*/* /etc/s6.d/.s6-svscan/*
VOLUME /data /config /apps2 /var/lib/redis
VOLUME /data /config /apps2
EXPOSE 8888
LABEL description="A server software for creating file hosting services" \
nextcloud="Nextcloud daily build"
nextcloud="Nextcloud daily" \
maintainer="Wonderfall <wonderfall@targaryen.house>"
CMD ["run.sh"]

View File

@ -1,2 +1,2 @@
#!/bin/sh
su-exec $UID:$GID php7 /nextcloud/occ $@
su-exec $UID:$GID php7.1 /nextcloud/occ $@

View File

@ -1,14 +0,0 @@
bind 127.0.0.1
protected-mode yes
port 0
unixsocket /tmp/redis.sock
unixsocketperm 700
daemonize no
pidfile /tmp/redis.pid
logfile /tmp/redis.log
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis/
maxmemory <REDIS_MAX_MEMORY>

View File

@ -1,20 +1,27 @@
#!/bin/sh
sed -i -e "s/<UPLOAD_MAX_SIZE>/$UPLOAD_MAX_SIZE/g" /etc/nginx/nginx.conf /etc/php7/php-fpm.conf \
-e "s/<APC_SHM_SIZE>/$APC_SHM_SIZE/g" /etc/php7/conf.d/apcu.ini \
-e "s/<OPCACHE_MEM_SIZE>/$OPCACHE_MEM_SIZE/g" /etc/php7/conf.d/00_opcache.ini \
-e "s/<REDIS_MAX_MEMORY>/$REDIS_MAX_MEMORY/g" /etc/redis.conf \
sed -i -e "s/<UPLOAD_MAX_SIZE>/$UPLOAD_MAX_SIZE/g" /etc/nginx/nginx.conf /etc/php7.1/php-fpm.conf \
-e "s/<APC_SHM_SIZE>/$APC_SHM_SIZE/g" /etc/php7.1/conf.d/apcu.ini \
-e "s/<OPCACHE_MEM_SIZE>/$OPCACHE_MEM_SIZE/g" /etc/php7.1/conf.d/00_opcache.ini \
-e "s/<CRON_MEMORY_LIMIT>/$CRON_MEMORY_LIMIT/g" /etc/s6.d/cron/run \
-e "s/<CRON_PERIOD>/$CRON_PERIOD/g" /etc/s6.d/cron/run
# Put the configuration and apps into volumes
ln -sf /config/config.php /nextcloud/config/config.php &>/dev/null
ln -sf /apps2 /nextcloud &>/dev/null
for dir in /nextcloud /data /config /apps2 /etc/nginx /etc/php7 /var/log /var/lib/nginx /var/lib/redis /tmp /etc/s6.d; do
mv nextcloud fix && mv fix nextcloud # fix strange bug
echo "Updating permissions..."
for dir in /nextcloud /data /config /apps2 /etc/nginx /etc/php7.1 /var/log /var/lib/nginx /tmp /etc/s6.d; do
if $(find $dir ! -user $UID -o ! -group $GID|egrep '.' -q); then
echo "Updating permissions in $dir..."
chown -R $UID:$GID $dir
else
echo "Permissions in $dir are correct."
fi
done
echo "Done updating permissions."
if [ ! -f /config/config.php ]; then
# New installation, run the setup

View File

@ -1,6 +1,6 @@
#!/bin/sh
while true; do
php7 -f /nextcloud/cron.php
php7.1 -d memory_limit=<CRON_MEMORY_LIMIT> -f /nextcloud/cron.php
sleep <CRON_PERIOD>
done

View File

@ -1,2 +1,2 @@
#!/bin/sh
exec php-fpm7
exec php-fpm7.1

View File

@ -1,2 +0,0 @@
#!/bin/sh
exec redis-server /etc/redis.conf

View File

@ -29,13 +29,6 @@ cat > $CONFIGFILE <<EOF;
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '/tmp/redis.sock',
'port' => 0,
'timeout' => 0.0,
),
'instanceid' => '$instanceid',
);
?>
@ -74,7 +67,7 @@ echo "Starting automatic configuration..."
# Execute ownCloud's setup step, which creates the ownCloud database.
# It also wipes it if it exists. And it updates config.php with database
# settings and deletes the autoconfig.php file.
(cd /nextcloud; php7 index.php)
(cd /nextcloud; php7.1 index.php)
echo "Automatic configuration finished."
# Update config.php.
@ -88,7 +81,7 @@ echo "Automatic configuration finished."
# Use PHP to read the settings file, modify it, and write out the new settings array.
CONFIG_TEMP=$(/bin/mktemp)
php7 <<EOF > $CONFIG_TEMP && mv $CONFIG_TEMP $CONFIGFILE
php7.1 <<EOF > $CONFIG_TEMP && mv $CONFIG_TEMP $CONFIGFILE
<?php
include("/config/config.php");