docker: updated to stretch and added NextCloudPi layer

This commit is contained in:
nachoparker 2017-09-21 18:19:35 +02:00
parent 786728c2ec
commit acbe26cc14
18 changed files with 327 additions and 161 deletions

View File

@ -5,15 +5,20 @@
#
nextcloudpi: nextcloud
docker build . -f docker/nextcloudpi/Dockerfile -t ownyourbits/nextcloudpi:latest
nextcloud: lamp
docker build . -f docker/nextcloud.dockerfile -t ownyourbits/nextcloudpi:latest
docker build . -f docker/nextcloud/Dockerfile -t ownyourbits/nextcloud:latest
lamp: miniraspbian
docker build . -f docker/lamp.dockerfile -t ownyourbits/lamp-arm:latest
docker build . -f docker/lamp/Dockerfile -t ownyourbits/lamp-arm:latest
miniraspbian:
docker build . -f docker/raspbian.dockerfile -t ownyourbits/miniraspbian:latest
docker build . -f docker/miniraspbian/Dockerfile -t ownyourbits/miniraspbian:latest
devel:
docker build . -f docker/devel/Dockerfile -t ownyourbits/nextcloudpi:devel
# License
#
# This script is free software; you can redistribute it and/or modify it

View File

@ -1,5 +1,15 @@
[v0.28.1](https://github.com/nextcloud/nextcloudpi/commit/164b656) (2017-09-15) nc-static-IP: add new IP to trusted domain
[v0.29.3](https://github.com/nextcloud/nextcloudpi/commit/93c19f2) (2017-09-21) docker: updated to stretch and added NextCloudPi layer
[v0.29.2 ](https://github.com/nextcloud/nextcloudpi/commit/94a6513) (2017-09-20) changed hostname
[v0.29.1 ](https://github.com/nextcloud/nextcloudpi/commit/03b0263) (2017-09-20) lamp: add fileinfo mcrypt packages
[v0.29.0 ](https://github.com/nextcloud/nextcloudpi/commit/74a97c3) (2017-09-20) updated to NC12.0.3
[v0.28.2](https://github.com/nextcloud/nextcloudpi/commit/ac3fcab) (2017-09-18) ncp-web: point changelog to master
[v0.28.1 ](https://github.com/nextcloud/nextcloudpi/commit/3b71b3d) (2017-09-15) nc-static-IP: add new IP to trusted domain
[v0.28.0 ](https://github.com/nextcloud/nextcloudpi/commit/6cf07b2) (2017-09-14) added nc-static-IP

35
docker/devel/Dockerfile Normal file
View File

@ -0,0 +1,35 @@
# docker run -d -p 4443:4443 -p 443:443 -p 80:80 -v ncdata:/data --name nextcloudpi ownyourbits/nextcloudpi:devel
# docker build . -f docker/devel/Dockerfile -t ownyourbits/nextcloudpi:devel
FROM ownyourbits/nextcloud
MAINTAINER Ignacio Núñez Hernanz <nacho@ownyourbits.com>
SHELL ["/bin/bash", "-c"]
ENV DOCKERBUILD 1
COPY build-devel.sh /usr/local/etc/
RUN \
apt-get update; \
apt-get install --no-install-recommends -y wget ca-certificates git; \
# install nextcloudpi devel
source /usr/local/etc/library.sh; \
set +x; \
cd /usr/local/etc/; \
install_script build-devel.sh; \
# specific cleanup
rm /usr/local/etc/build-devel.sh; \
apt-get purge -y wget ca-certificates git; \
# package clean up
apt-get autoremove -y; \
apt-get clean; \
rm -f /var/lib/apt/lists/*; \
rm -rf /usr/share/man/*; \
rm -rf /usr/share/doc/*; \
rm -f /var/log/alternatives.log /var/log/apt/*; \
rm /var/cache/debconf/*-old;

View File

@ -1,27 +0,0 @@
# docker run -d -p 443:443 -p 80:80 -v ncdata:/data --name lamp ownyourbits/lamp
# docker build . -f lamp.dockerfile -t ownyourbits/lamp-arm:latest
FROM ownyourbits/miniraspbian
MAINTAINER Ignacio Núñez Hernanz <nacho@ownyourbits.com>
SHELL ["/bin/bash", "-c"]
COPY etc/library.sh lamp.sh /usr/local/etc/
# NOTE: move database to /data, which will be in a persistent volume
RUN source /usr/local/etc/library.sh; set +x; install_script /usr/local/etc/lamp.sh; \
apt-get autoremove -y; apt-get clean; rm /var/lib/apt/lists/* -f; rm -rf /usr/share/man/*; rm -rf /usr/share/doc/*; \
mkdir -p /data/; \
mv /var/lib/mysql /data/database; \
sed -i "s|^datadir.*|datadir = /data/database|" /etc/mysql/mariadb.conf.d/50-server.cnf; \
rm /data/database/ib_logfile*; \
rm /var/cache/debconf/*-old; \
rm /var/log/alternatives.log /var/log/apt/* ; \
rm /usr/local/etc/{lamp.sh,library.sh}
COPY docker/run-lamp.sh /usr/local/bin/
ENTRYPOINT ["/usr/local/bin/run.sh"]
EXPOSE 80 443

24
docker/lamp/010-lamp-run.sh Executable file
View File

@ -0,0 +1,24 @@
#!/bin/bash
set -e
case "$1" in
stop)
apachectl graceful-stop
killall php-fpm7.0
mysqladmin -u root shutdown
echo "LAMP cleanup complete"
exit 0
;;
esac
echo "Starting PHP-fpm"
php-fpm7.0 &
echo "Starting Apache"
/usr/sbin/apache2ctl start
echo "Starting mariaDB"
mysqld &
exit 0

41
docker/lamp/Dockerfile Normal file
View File

@ -0,0 +1,41 @@
# docker run -d -p 443:443 -p 80:80 -v ncdata:/data --name lamp ownyourbits/lamp
# docker build . -f lamp.dockerfile -t ownyourbits/lamp-arm:latest
FROM ownyourbits/miniraspbian
MAINTAINER Ignacio Núñez Hernanz <nacho@ownyourbits.com>
SHELL ["/bin/bash", "-c"]
COPY etc/library.sh lamp.sh /usr/local/etc/
RUN \
# installation
source /usr/local/etc/library.sh; \
set +x; \
install_script /usr/local/etc/lamp.sh; \
# mariaDB fixups (move database to /data, which will be in a persistent volume)
mkdir -p /data/; \
mv /var/lib/mysql /data/database; \
sed -i "s|^datadir.*|datadir = /data/database|" /etc/mysql/mariadb.conf.d/50-server.cnf; \
# package cleanup
apt-get autoremove -y; \
apt-get clean; \
rm /var/lib/apt/lists/* -f; \
rm -rf /usr/share/man/*; \
rm -rf /usr/share/doc/*; \
rm /var/cache/debconf/*-old; \
rm -f /var/log/alternatives.log /var/log/apt/*; \
# specific cleanup
rm /data/database/ib_logfile*; \
rm /usr/local/etc/{lamp.sh,library.sh}
COPY docker/lamp/010-lamp-run.sh /etc/cont-init.d/
ENTRYPOINT ["/run-parts.sh"]
EXPOSE 80 443

View File

@ -6,3 +6,6 @@ MAINTAINER Ignacio Núñez Hernanz <nacho@ownyourbits.com>
CMD /bin/bash
RUN mkdir -p /etc/cont-init.d
COPY docker/miniraspbian/run-parts.sh /

View File

@ -0,0 +1,18 @@
#!/bin/bash
cleanup()
{
for file in $( ls -1rv /etc/cont-init.d ); do
/etc/cont-init.d/$file stop
done
exit
}
trap cleanup SIGTERM
for file in $( ls -1v /etc/cont-init.d ); do
/etc/cont-init.d/$file start
done
echo "Init done"
while true; do sleep 0.5; done # do nothing, just wait for trap from 'docker stop'

View File

@ -1,20 +0,0 @@
# docker run -d -p 443:443 -p 80:80 -v ncdata:/data --name nextcloudpi ownyourbits/nextcloudpi
# docker build . -f nextcloud.dockerfile -t ownyourbits/nextcloudpi:latest
FROM ownyourbits/lamp-arm
MAINTAINER Ignacio Núñez Hernanz <nacho@ownyourbits.com>
SHELL ["/bin/bash", "-c"]
COPY etc/library.sh etc/nextcloudpi-config.d/nc-init.sh etc/nextcloudpi-config.d/nc-nextcloud.sh /usr/local/etc/
RUN apt-get update; apt-get install --no-install-recommends -y wget ca-certificates; \
source /usr/local/etc/library.sh; set +x; activate_script /usr/local/etc/nc-nextcloud.sh; \
apt-get purge -y wget ca-certificates libgnutls-deb0-28 libhogweed2 libicu52 libnettle4 libpsl0; \
apt-get autoremove -y; apt-get clean; rm /var/lib/apt/lists/* -f; rm -rf /usr/share/man/*; rm -rf /usr/share/doc/*; \
rm /var/log/apt/* ; \
rm /var/cache/debconf/*-old; \
rm /usr/local/etc/nc-nextcloud.sh
COPY docker/run-nc.sh /usr/local/bin/run.sh

View File

@ -0,0 +1,49 @@
#!/bin/bash
set -e
NCDIR=/var/www/nextcloud
OCC="$NCDIR/occ"
case "$1" in
stop)
echo "stopping cron..."
killall cron
exit 0
;;
esac
# COPY NEXTCLOUD TO /data, WHICH WILL BE IN A PERSISTENT VOLUME (first run)
test -d /data/app || {
echo "Setting up persistent Nextcloud dir..."
mv "$NCDIR" /data/app
ln -s /data/app "$NCDIR"
}
# INIT DATABASE AND NEXTCLOUD CONFIG (first run)
test -f /data/app/config/config.php || {
echo "Uninitialized instance, running nc-init..."
source /usr/local/etc/library.sh
cd /usr/local/etc/
activate_script nc-init.sh
}
# Trusted Domain ( as an argument )
[[ "$@" != "" ]] && {
IP=$( grep -oP '\d{1,3}(\.\d{1,3}){3}' <<< "$1" ) # validate that the first argument is a valid IP
if [[ "$IP" != "" ]]; then
sudo -u www-data php $OCC config:system:set trusted_domains 1 --value="$IP"
else
echo "First argument must be an IP address to include as a Trusted domain. Ignoring"
fi
}
# Trusted Domain ( local IP )
IFACE=$( ip r | grep "default via" | awk '{ print $5 }' )
IP=$( ip a | grep "global $IFACE" | grep -oP '\d{1,3}(\.\d{1,3}){3}' | head -1 )
sudo -u www-data php $OCC config:system:set trusted_domains 2 --value="$IP"
echo "Starting cron"
cron
exit 0

View File

@ -0,0 +1,44 @@
# docker run -d -p 443:443 -p 80:80 -v ncdata:/data --name nextcloud ownyourbits/nextcloud
# docker build . -f nextcloud.dockerfile -t ownyourbits/nextcloud:latest
FROM ownyourbits/lamp-arm
MAINTAINER Ignacio Núñez Hernanz <nacho@ownyourbits.com>
SHELL ["/bin/bash", "-c"]
COPY etc/library.sh etc/nextcloudpi-config.d/nc-init.sh etc/nextcloudpi-config.d/nc-nextcloud.sh /usr/local/etc/
RUN \
# installation
apt-get update; \
apt-get install --no-install-recommends -y wget ca-certificates iputils-ping; \
source /usr/local/etc/library.sh; \
set +x; \
activate_script /usr/local/etc/nc-nextcloud.sh; \
# package cleanup
apt-get autoremove -y; \
apt-get clean; \
rm /var/lib/apt/lists/* -f; \
rm -rf /usr/share/man/*; \
rm -rf /usr/share/doc/*; \
rm /var/cache/debconf/*-old; \
rm -f /var/log/alternatives.log /var/log/apt/*; \
# specific cleanup
apt-get purge -y wget ca-certificates; \
rm /usr/local/etc/nc-nextcloud.sh
# TODO install make in noip:
# TODO consider pre-populating /data (volume overcopies)
# TODO call cleanup() hooks for extras
# TODO remove packages unneeded from lamp, wget...
# # libudev1 util-linux
# TODO remove mariadb client (reinstall mysqldump later, but that only)
# apt-get purge -y wget ca-certificates libhogweed4 libnettle4 libpsl5
# apt-get purge -y wget ca-certificates libgnutls-deb0-28 libhogweed2 libicu52 libnettle4 libpsl0
COPY docker/nextcloud/020-nextcloud-run.sh /etc/cont-init.d/

View File

@ -0,0 +1,25 @@
#!/bin/bash
NCDIR=/var/www/nextcloud
OCC="$NCDIR/occ"
# INIT SYSTEM CONFIG (first run)
test -d /data/etc || {
echo "Setting up system dir..."
#mv /etc /data/etc
#ln -s /data/etc /etc
}
# INIT NCP CONFIG (first run)
test -d /data/ncp || {
echo "Setting up ncp dir..."
mv /usr/local/etc/ /data/ncp
ln -s /data/ncp /usr/local/etc
}
# NC-INIT TODO copy all nextcloud folder?
# INIT DATABASE AND NEXTCLOUD CONFIG
#source /usr/local/etc/library.sh
#activate_script /usr/local/etc/nextcloudpi-config.d/nc-init.sh
exit 0

View File

@ -0,0 +1,40 @@
# docker run -d -p 4443:4443 -p 443:443 -p 80:80 -v ncdata:/data --name nextcloudpi ownyourbits/nextcloudpi
# docker build . -f nextcloud.dockerfile -t ownyourbits/nextcloudpi:latest
FROM ownyourbits/nextcloudpi
MAINTAINER Ignacio Núñez Hernanz <nacho@ownyourbits.com>
SHELL ["/bin/bash", "-c"]
ENV DOCKERBUILD 1
COPY nextcloudpi.sh /usr/local/etc/
RUN \
apt-get update; \
apt-get install --no-install-recommends -y wget ca-certificates; \
# install nextcloudpi
source /usr/local/etc/library.sh; \
set +x; \
cd /usr/local/etc/; \
install_script nextcloudpi.sh; \
# specific cleanup
rm /usr/local/etc/nextcloudpi.sh; \
apt-get purge -y wget ca-certificates; \
# package clean up
apt-get autoremove -y; \
apt-get clean; \
rm -f /var/lib/apt/lists/*; \
rm -rf /usr/share/man/*; \
rm -rf /usr/share/doc/*; \
rm -f /var/log/alternatives.log /var/log/apt/*; \
rm /var/cache/debconf/*-old;
COPY docker/nextcloudpi/000-ncp-run.sh /etc/cont-init.d/
# 4443 - ncp-web
EXPOSE 80 443 4443

View File

@ -1,27 +0,0 @@
#!/bin/bash
cleanup()
{
apachectl graceful-stop
killall php-fpm7.0
mysqladmin -u root -pownyourbits shutdown
killall cron
echo "Cleanup complete"
}
trap cleanup SIGTERM
echo "Starting PHP-fpm"
php-fpm7.0 &
echo "Starting Apache"
/usr/sbin/apache2ctl start
echo "Starting mariaDB"
mysqld &
echo "Starting cron"
cron
echo "Done"
while true; do sleep 0.5; done # do nothing, just wait for trap from 'docker stop'

View File

@ -1,77 +0,0 @@
#!/bin/bash
NCDIR=/var/www/nextcloud
OCC="$NCDIR/occ"
cleanup()
{
apachectl graceful-stop
killall php-fpm7.0
mysqladmin -u root -pownyourbits shutdown
killall cron
echo "Cleanup complete"
}
trap cleanup SIGTERM
echo "Starting PHP-fpm"
php-fpm7.0 &
echo "Starting mariaDB"
mysqld &
# WAIT FOR MARIADB
while :; do
[[ -S /var/run/mysqld/mysqld.sock ]] && break
sleep 0.5
done
## FIRST RUN: initialize NextCloud
test -d /data/app || {
echo "[First run]"
# INIT DATABASE AND NEXTCLOUD CONFIG
source /usr/local/etc/library.sh
activate_script /usr/local/etc/nextcloudpi-config.d/nc-init.sh
# COPY DATADIR TO /data, WHICH WILL BE IN A PERSISTENT VOLUME
echo "Setting up persistent data dir..."
cp -ra /"$NCDIR"/data /data/app
sudo -u www-data php $OCC config:system:set datadirectory --value=/data/app
# COPY CONFIG TO /data, WHICH WILL BE IN A PERSISTENT VOLUME
echo "Setting up persistent configuration..."
test -e /data/config || mv /"$NCDIR"/config /data
}
# Use persistent configuration
test -e /data/config && {
rm -rf /"$NCDIR"/config
ln -s /data/config /"$NCDIR"/config
}
# Trusted Domain ( as an argument )
[[ "$@" != "" ]] && {
IP=$( grep -oP '\d{1,3}(\.\d{1,3}){3}' <<< "$1" ) # validate that the first argument is a valid IP
if [[ "$IP" != "" ]]; then
sudo -u www-data php $OCC config:system:set trusted_domains 1 --value="$IP"
else
echo "First argument must be an IP address to include as a Trusted domain. Ignoring"
fi
}
# Trusted Domain ( local IP )
IFACE=$( ip r | grep "default via" | awk '{ print $5 }' )
IP=$( ip a | grep "global $IFACE" | grep -oP '\d{1,3}(\.\d{1,3}){3}' | head -1 )
sudo -u www-data php $OCC config:system:set trusted_domains 2 --value="$IP"
echo "Starting Apache"
/usr/sbin/apache2ctl start
echo "Starting cron"
cron
echo "Done"
while true; do sleep 0.5; done # do nothing, just wait for trap from 'docker stop'

View File

@ -141,6 +141,17 @@ function configure_script()
)
}
function persistent_cfgdir()
{
local SRCDIR="$1"
local DSTDIR="${2:-/data/etc/$SRCDIR}"
mkdir -p "$( basename "$DSTDIR" )"
test -d "$DSTDIR" || {
echo "Setting up $SRCDIR dir..."
mv /etc/"$SRCDIR" "$DSTDIR"
ln -s "$DSTDIR" /etc/"$SRCDIR"
}
}
# License
#

View File

@ -31,6 +31,7 @@ install()
$APTINSTALL apt-utils
$APTINSTALL cron
$APTINSTALL util-linux # TODO only need getopt (busybox?)
$APTINSTALL apache2
$APTINSTALL php7.0 php7.0-curl php7.0-gd php7.0-fpm php7.0-cli php7.0-opcache php7.0-mbstring php7.0-xml php7.0-zip php7.0-APC php7.0-fileinfo php7.0-mcrypt
mkdir -p /run/php
@ -122,6 +123,14 @@ EOF
sed -i '/\[mysqld\]/ainnodb_file_per_table=1' /etc/mysql/mariadb.conf.d/50-server.cnf
sed -i '/\[mysqld\]/ainnodb_file_format=barracuda' /etc/mysql/mariadb.conf.d/50-server.cnf
# launch mariadb if not already running (for docker build)
[[ "$DOCKERBUILD" == 1 ]] && { mysqld & }
# wait for mariadb
while :; do
[[ -S /var/run/mysqld/mysqld.sock ]] && break
sleep 0.5
done
mysql_secure_installation <<EOF
$DBPASSWD
n

View File

@ -27,9 +27,10 @@ install()
apt-get update
$APTINSTALL dialog
mkdir -p $CONFDIR
sed -i '/Change User Password/i"0 NextCloudPi Configuration" "Configuration of NextCloudPi" \\\\' /usr/bin/raspi-config
sed -i '/1\\\\ \*) do_change_pass ;;/i0\\\\ *) nextcloudpi-config ;;' /usr/bin/raspi-config
[[ "$DOCKERBUILD" != 1 ]] && {
sed -i '/Change User Password/i"0 NextCloudPi Configuration" "Configuration of NextCloudPi" \\\\' /usr/bin/raspi-config
sed -i '/1\\\\ \*) do_change_pass ;;/i0\\\\ *) nextcloudpi-config ;;' /usr/bin/raspi-config
}
# NEXTCLOUDPI-CONFIG WEB
##########################################
@ -120,12 +121,12 @@ done
cd /var/www/nextcloud
sudo -u www-data php occ config:system:set trusted_domains 1 --value=$IP
EOF
systemctl enable nextcloud-domain # make sure this is called on last re-boot
# make sure this is called on last re-boot
[[ "$DOCKERBUILD" != 1 ]] && systemctl enable nextcloud-domain
# NEXTCLOUDPI UPDATES
##########################################
$APTINSTALL git
cat > /etc/cron.daily/ncp-check-version <<EOF
#!/bin/sh
/usr/local/bin/ncp-check-version
@ -139,8 +140,10 @@ EOF
sed -i "s|^;\?sys_temp_dir =.*$|sys_temp_dir = $UPLOADTMPDIR|" /etc/php/7.0/fpm/php.ini
# update to latest version from github as part of the build process
$APTINSTALL git
wget https://raw.githubusercontent.com/nextcloud/nextcloudpi/master/bin/ncp-update -O /usr/local/bin/ncp-update
chmod a+x /usr/local/bin/ncp-update
/usr/local/bin/ncp-update
# Optional packets for Nextcloud and Apps