From ef93d7091d20344bb530dca4d3d2fd2032d167fa Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 26 Feb 2019 08:09:14 +0800 Subject: [PATCH 1/7] Add Docker and Git ignore files --- .dockerignore | 9 +++++++++ .gitignore | 8 ++++++++ 2 files changed, 17 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..59046da --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +.git/* +# Swap files (vim) +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] +# Temporary files including undo +*~ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a576ddd --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +# Swap files (vim) +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] +# Temporary files including undo +*~ From 41669288ddef457fbcc975238698b41d99fac512 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 26 Feb 2019 08:11:50 +0800 Subject: [PATCH 2/7] Refactor installation for better caching --- Dockerfile | 22 +++++++++++++++------- root/tmp/setup/mssql-extension.sh | 25 +++++++++++++++++++++++++ root/tmp/setup/php-extensions.sh | 11 +---------- 3 files changed, 41 insertions(+), 17 deletions(-) create mode 100755 root/tmp/setup/mssql-extension.sh diff --git a/Dockerfile b/Dockerfile index ba5cf47..20b76ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,22 @@ FROM php:7.1-apache-stretch -ADD root/ / -# Fix the original permissions of /tmp, the PHP default upload tmp dir. -RUN chmod 777 /tmp && chmod +t /tmp - -# Setup the required extensions. ARG DEBIAN_FRONTEND=noninteractive -RUN /tmp/setup/php-extensions.sh -RUN /tmp/setup/oci8-extension.sh + +# Install the standard PHP extensions. +ADD root/tmp/setup/php-extensions.sh /tmp/setup/ +RUN chmod 777 /tmp && chmod +t /tmp && \ + /tmp/setup/php-extensions.sh + +# Install the PHP MSSQL Extension. +ADD root/tmp/setup/mssql-extension.sh /tmp/setup/ +RUN chmod 777 /tmp && chmod +t /tmp && \ + /tmp/setup/mssql-extension.sh + +# Install the PHP OCI8 Extension. ENV LD_LIBRARY_PATH /usr/local/instantclient +ADD root/tmp/setup/oci8-extension.sh /tmp/setup/ +RUN chmod 777 /tmp && chmod +t /tmp && \ + /tmp/setup/oci8-extension.sh RUN mkdir /var/www/moodledata && chown www-data /var/www/moodledata && \ mkdir /var/www/phpunitdata && chown www-data /var/www/phpunitdata && \ diff --git a/root/tmp/setup/mssql-extension.sh b/root/tmp/setup/mssql-extension.sh new file mode 100755 index 0000000..4763395 --- /dev/null +++ b/root/tmp/setup/mssql-extension.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +set -e + +BUILD_PACKAGES="gnupg unixodbc-dev" + +apt-get update +apt-get install -y --no-install-recommends apt-transport-https \ + $BUILD_PACKAGES + +# Install Microsoft dependcies for sqlsrv. +curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - +curl https://packages.microsoft.com/config/debian/9/prod.list -o /etc/apt/sources.list.d/mssql-release.list +apt-get update +ACCEPT_EULA=Y apt-get install -y msodbcsql17 + +pecl install sqlsrv +docker-php-ext-enable sqlsrv + +# Keep our image size down.. +pecl clear-cache +apt-get remove --purge -y $BUILD_PACKAGES +apt-get autoremove -y +apt-get clean +rm -rf /var/lib/apt/lists/* diff --git a/root/tmp/setup/php-extensions.sh b/root/tmp/setup/php-extensions.sh index e888fe0..4c70c7b 100755 --- a/root/tmp/setup/php-extensions.sh +++ b/root/tmp/setup/php-extensions.sh @@ -7,7 +7,7 @@ echo "Installing apt dependencies" # Build packages will be added during the build, but will be removed at the end. BUILD_PACKAGES="gettext gnupg libcurl4-openssl-dev libfreetype6-dev libicu-dev libjpeg62-turbo-dev \ libldap2-dev libmariadbclient-dev libmemcached-dev libpng-dev libpq-dev libxml2-dev libxslt-dev \ - unixodbc-dev zlib1g-dev" + zlib1g-dev" # Packages for Postgres. PACKAGES_POSTGRES="libpq5" @@ -64,15 +64,6 @@ docker-php-ext-enable solr memcached redis apcu igbinary echo 'apc.enable_cli = On' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini -# Install Microsoft dependcies for sqlsrv. -curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - -curl https://packages.microsoft.com/config/debian/9/prod.list -o /etc/apt/sources.list.d/mssql-release.list -apt-get update -ACCEPT_EULA=Y apt-get install -y msodbcsql17 - -pecl install sqlsrv -docker-php-ext-enable sqlsrv - # Keep our image size down.. pecl clear-cache apt-get remove --purge -y $BUILD_PACKAGES From fccc39f57a7e70c01e6f1ca884aa695610da1c87 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 26 Feb 2019 08:12:38 +0800 Subject: [PATCH 3/7] Add docker-entrypoint-initdb --- Dockerfile | 9 +++++---- moodle-php-entrypoint | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) create mode 100755 moodle-php-entrypoint diff --git a/Dockerfile b/Dockerfile index 20b76ba..58426d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,7 @@ ARG DEBIAN_FRONTEND=noninteractive ADD root/tmp/setup/php-extensions.sh /tmp/setup/ RUN chmod 777 /tmp && chmod +t /tmp && \ /tmp/setup/php-extensions.sh +ADD nvm-wrapper /usr/local/bin/nvm # Install the PHP MSSQL Extension. ADD root/tmp/setup/mssql-extension.sh /tmp/setup/ @@ -18,7 +19,7 @@ ADD root/tmp/setup/oci8-extension.sh /tmp/setup/ RUN chmod 777 /tmp && chmod +t /tmp && \ /tmp/setup/oci8-extension.sh -RUN mkdir /var/www/moodledata && chown www-data /var/www/moodledata && \ - mkdir /var/www/phpunitdata && chown www-data /var/www/phpunitdata && \ - mkdir /var/www/behatdata && chown www-data /var/www/behatdata && \ - mkdir /var/www/behatfaildumps && chown www-data /var/www/behatfaildumps +# Set the custom entrypoint. +ADD moodle-php-entrypoint /usr/local/bin/ +ENTRYPOINT ["moodle-php-entrypoint"] +CMD ["apache2-foreground"] diff --git a/moodle-php-entrypoint b/moodle-php-entrypoint new file mode 100755 index 0000000..7cd3145 --- /dev/null +++ b/moodle-php-entrypoint @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -Eeo pipefail + +ARGS="$@" + +# Create directories for general usage. +mkdir /var/www/moodledata && chown www-data:www-data /var/www/moodledata +mkdir /var/www/phpunitdata && chown www-data:www-data /var/www/phpunitdata +mkdir /var/www/behatdata && chown www-data:www-data /var/www/behatdata +mkdir /var/www/behatfaildumps && chown www-data:www-data /var/www/behatfaildumps + +# Load any additional entrypoint init files. +for f in /docker-entrypoint-initdb.d/*; do + case "$f" in + *.sh) + # https://github.com/docker-library/postgres/issues/450#issuecomment-393167936 + # https://github.com/docker-library/postgres/pull/452 + if [ -x "$f" ]; then + echo "$0: running $f" + "$f" + else + echo "$0: sourcing $f" + . "$f" + fi + ;; + *) echo "$0: ignoring $f" ;; + esac + echo +done + +# Execute the original entrypoint with the original args. +exec docker-php-entrypoint $ARGS From 02c0386a85ff0d75513e52cf83d0c81ba63bc30c Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 26 Feb 2019 08:10:13 +0800 Subject: [PATCH 4/7] Add NVM to the image --- Dockerfile | 7 +++++++ moodle-php-entrypoint | 9 +++++++++ nvm-wrapper | 13 +++++++++++++ 3 files changed, 29 insertions(+) create mode 100755 nvm-wrapper diff --git a/Dockerfile b/Dockerfile index 58426d0..0313655 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,13 @@ FROM php:7.1-apache-stretch ARG DEBIAN_FRONTEND=noninteractive +# Install NVM and the current (as of 26/02/2019) LTS version of Node. +ENV NVM_DIR /usr/local/nvm +ENV NODE_VERSION lts/carbon +RUN mkdir -p $NVM_DIR && \ + curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash && \ + . $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use --delete-prefix $NODE_VERSION + # Install the standard PHP extensions. ADD root/tmp/setup/php-extensions.sh /tmp/setup/ RUN chmod 777 /tmp && chmod +t /tmp && \ diff --git a/moodle-php-entrypoint b/moodle-php-entrypoint index 7cd3145..b6142ca 100755 --- a/moodle-php-entrypoint +++ b/moodle-php-entrypoint @@ -9,6 +9,15 @@ mkdir /var/www/phpunitdata && chown www-data:www-data /var/www/phpunitdata mkdir /var/www/behatdata && chown www-data:www-data /var/www/behatdata mkdir /var/www/behatfaildumps && chown www-data:www-data /var/www/behatfaildumps +# Ensure that all users get NVM as standard. +echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> /etc/bash.bashrc +echo 'export NODE_REPL_HISTORY=' >> /etc/bash.bashrc +mkdir /var/www/.config && chown www-data:www-data /var/www/.config + +# Ensure that the requested version of node is installed. +source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use --delete-prefix $NODE_VERSION +echo 'nvm use "$NODE_VERSION"' >> /etc/bash.bashrc + # Load any additional entrypoint init files. for f in /docker-entrypoint-initdb.d/*; do case "$f" in diff --git a/nvm-wrapper b/nvm-wrapper new file mode 100755 index 0000000..eaa2515 --- /dev/null +++ b/nvm-wrapper @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -Eeo pipefail + +# This is a wrapper around NVM to load the nvm functions, and then run nvm. + +if [ -z "$(LC_ALL=C type -t nvm)" ] || [ "$(LC_ALL=C type -t nvm)" != function ] +then + # The `nvm` variable does not exist, or is not a function. + # Source nvm.sh to load it. + [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" +fi + +nvm $@ From 5144ff90a0eaa83a565c96cd7571d8cdb63b1582 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 26 Feb 2019 08:13:23 +0800 Subject: [PATCH 5/7] Clean up after OCI8 install --- root/tmp/setup/oci8-extension.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/root/tmp/setup/oci8-extension.sh b/root/tmp/setup/oci8-extension.sh index b6ced11..0f6ff60 100755 --- a/root/tmp/setup/oci8-extension.sh +++ b/root/tmp/setup/oci8-extension.sh @@ -23,3 +23,6 @@ ln -s /usr/local/instantclient/sqlplus /usr/bin/sqlplus echo 'instantclient,/usr/local/instantclient' | pecl install oci8 && docker-php-ext-enable oci8 echo 'oci8.statement_cache_size = 0' >> /usr/local/etc/php/conf.d/docker-php-ext-oci8.ini + +# Keep our image size down. +pecl clear-cache From 96d8438662c4eb27a1c2450500cd7600f0bdeb17 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 26 Feb 2019 08:13:35 +0800 Subject: [PATCH 6/7] Add Git --- root/tmp/setup/php-extensions.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/root/tmp/setup/php-extensions.sh b/root/tmp/setup/php-extensions.sh index 4c70c7b..1ad4ea1 100755 --- a/root/tmp/setup/php-extensions.sh +++ b/root/tmp/setup/php-extensions.sh @@ -18,6 +18,9 @@ PACKAGES_MYMARIA="libmariadbclient18" # Packages for other Moodle runtime dependenices. PACKAGES_RUNTIME="ghostscript libaio1 libcurl3 libgss3 libicu57 libmcrypt-dev libxml2 libxslt1.1 locales sassc unzip unixodbc sassc" +# Packages required for moodle-local_ci. +PACKAGES_CI="git" + # Packages for Memcached. PACKAGES_MEMCACHED="libmemcached11 libmemcachedutil2" @@ -31,7 +34,8 @@ apt-get install -y --no-install-recommends apt-transport-https \ $PACKAGES_MYMARIA \ $PACKAGES_RUNTIME \ $PACKAGES_MEMCACHED \ - $PACKAGES_LDAP + $PACKAGES_LDAP \ + $PACKAGES_CI # Generate the locales configuration fo rboth Australia, and the US. echo 'Generating locales..' From 29c8425957ca4aefe8c690e7d28165de7ad08b86 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 26 Feb 2019 16:49:56 +0800 Subject: [PATCH 7/7] Wait for apache to start --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index c5a321f..65bc353 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ install: - docker build -t moodle-php-apache . script: - "docker run --name test0 -d -p 8000:80 -v $PWD/tests/fixtures:/var/www/html moodle-php-apache" + - sleep 5 - docker exec test0 php /var/www/html/test.php - curl --fail http://127.0.0.1:8000/test.php after_failure: