Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F3909479
D342.id811.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
10 KB
Referenced Files
None
Subscribers
None
D342.id811.diff
View Options
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -47,3 +47,13 @@
# If you need other processes, adds a /etc/service/<service name>/run file
That's it.
+
+## How to upgrade this image?
+
+As noted in https://devcentral.nasqueron.org/T787 we need to sync files and novolume/files.
+
+For that, you can use our helper Makefile:
+```
+cd novolume
+make update
+```
diff --git a/novolume/Dockerfile b/novolume/Dockerfile
--- a/novolume/Dockerfile
+++ b/novolume/Dockerfile
@@ -83,7 +83,7 @@
chmod 700 /home/app && \
chmod 711 /var/wwwroot/default
-COPY ../files /
+COPY files /
#
# Docker properties
diff --git a/novolume/Makefile b/novolume/Makefile
new file mode 100644
--- /dev/null
+++ b/novolume/Makefile
@@ -0,0 +1,9 @@
+all: files
+
+files:
+ cp -Rp ../files .
+
+clean:
+ rm -rf files
+
+update: clean files
diff --git a/novolume/files/etc/nginx/nginx.conf b/novolume/files/etc/nginx/nginx.conf
new file mode 100644
--- /dev/null
+++ b/novolume/files/etc/nginx/nginx.conf
@@ -0,0 +1,43 @@
+# Webserver runs as www-data user
+# PHP code runs as app user
+# This allows to configure a read-only, can execute web directory.
+
+user www-data;
+worker_processes 4;
+pid /run/nginx.pid;
+daemon off;
+
+events {
+ worker_connections 768;
+}
+
+http {
+ sendfile on;
+ tcp_nopush on;
+ tcp_nodelay on;
+ keepalive_timeout 65;
+ types_hash_max_size 2048;
+
+ client_max_body_size 32M;
+
+ include /etc/nginx/mime.types;
+ default_type application/octet-stream;
+
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_prefer_server_ciphers on;
+
+ access_log /var/log/nginx/access.log;
+ error_log /var/log/nginx/error.log;
+
+ gzip on;
+ gzip_disable "msie6";
+ gzip_vary on;
+ gzip_proxied any;
+ gzip_comp_level 6;
+ gzip_buffers 16 8k;
+ gzip_http_version 1.1;
+ gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
+
+ include /etc/nginx/conf.d/*.conf;
+ include /etc/nginx/sites-enabled/*;
+}
diff --git a/novolume/files/etc/nginx/sites-available/default b/novolume/files/etc/nginx/sites-available/default
new file mode 100644
--- /dev/null
+++ b/novolume/files/etc/nginx/sites-available/default
@@ -0,0 +1,18 @@
+server {
+ listen 80 default_server;
+ listen [::]:80 default_server;
+ server_name _;
+
+ root /var/wwwroot/default;
+
+ index index.html index.php index.htm;
+
+ location / {
+ try_files $uri $uri/ =404;
+ }
+
+ location ~ \.php$ {
+ include snippets/fastcgi-php.conf;
+ fastcgi_pass 127.0.0.1:9000;
+ }
+}
diff --git a/novolume/files/etc/service/nginx/run b/novolume/files/etc/service/nginx/run
new file mode 100755
--- /dev/null
+++ b/novolume/files/etc/service/nginx/run
@@ -0,0 +1,4 @@
+#!/bin/bash
+exec 2>&1
+source /usr/local/etc/envvars
+exec /usr/sbin/nginx
diff --git a/novolume/files/etc/service/php-fpm/run b/novolume/files/etc/service/php-fpm/run
new file mode 100755
--- /dev/null
+++ b/novolume/files/etc/service/php-fpm/run
@@ -0,0 +1,5 @@
+#!/bin/bash
+exec 2>&1
+source /usr/local/etc/envvars
+php-fpm-env > /usr/local/etc/php-fpm-env.conf
+exec /usr/local/sbin/php-fpm --nodaemonize
diff --git a/novolume/files/usr/local/bin/docker-php-ext-configure b/novolume/files/usr/local/bin/docker-php-ext-configure
new file mode 100755
--- /dev/null
+++ b/novolume/files/usr/local/bin/docker-php-ext-configure
@@ -0,0 +1,19 @@
+#!/bin/bash
+set -e
+
+ext="$1"
+extDir="/usr/src/php/ext/$ext"
+if [ -z "$ext" -o ! -d "$extDir" ]; then
+ echo >&2 "usage: $0 ext-name [configure flags]"
+ echo >&2 " ie: $0 gd --with-jpeg-dir=/usr/local/something"
+ echo >&2
+ echo >&2 'Possible values for ext-name:'
+ echo >&2 $(find /usr/src/php/ext -mindepth 2 -maxdepth 2 -type f -name 'config.m4' | cut -d/ -f6 | sort)
+ exit 1
+fi
+shift
+
+set -x
+cd "$extDir"
+phpize
+./configure "$@"
diff --git a/novolume/files/usr/local/bin/docker-php-ext-install b/novolume/files/usr/local/bin/docker-php-ext-install
new file mode 100755
--- /dev/null
+++ b/novolume/files/usr/local/bin/docker-php-ext-install
@@ -0,0 +1,60 @@
+#!/bin/bash
+set -e
+
+cd /usr/src/php/ext
+
+usage() {
+ echo "usage: $0 ext-name [ext-name ...]"
+ echo " ie: $0 gd mysqli"
+ echo " $0 pdo pdo_mysql"
+ echo
+ echo 'if custom ./configure arguments are necessary, see docker-php-ext-configure'
+ echo
+ echo 'Possible values for ext-name:'
+ echo $(find /usr/src/php/ext -mindepth 2 -maxdepth 2 -type f -name 'config.m4' | cut -d/ -f6 | sort)
+}
+
+exts=()
+while [ $# -gt 0 ]; do
+ ext="$1"
+ shift
+ if [ -z "$ext" ]; then
+ continue
+ fi
+ if [ ! -d "$ext" ]; then
+ echo >&2 "error: $(pwd -P)/$ext does not exist"
+ echo >&2
+ usage >&2
+ exit 1
+ fi
+ exts+=( "$ext" )
+done
+
+if [ "${#exts[@]}" -eq 0 ]; then
+ usage >&2
+ exit 1
+fi
+
+for ext in "${exts[@]}"; do
+ (
+ cd "$ext"
+ [ -e Makefile ] || docker-php-ext-configure "$ext"
+ make
+ make install
+ ini="/usr/local/etc/php/conf.d/docker-php-ext-$ext.ini"
+ for module in modules/*.so; do
+ if [ -f "$module" ]; then
+ if grep -q zend_extension_entry "$module"; then
+ # https://wiki.php.net/internals/extensions#loading_zend_extensions
+ line="zend_extension=$(basename "$module")"
+ else
+ line="extension=$(basename "$module")"
+ fi
+ if ! grep -q "$line" "$ini"; then
+ echo "$line" >> "/usr/local/etc/php/conf.d/ext-$ext.ini"
+ fi
+ fi
+ done
+ make clean
+ )
+done
diff --git a/novolume/files/usr/local/etc/php-fpm.conf b/novolume/files/usr/local/etc/php-fpm.conf
new file mode 100644
--- /dev/null
+++ b/novolume/files/usr/local/etc/php-fpm.conf
@@ -0,0 +1,13 @@
+[app]
+listen = 127.0.0.1:9000
+user = app
+group = app
+pm = ondemand
+pm.max_children = 10
+pm.process_idle_timeout = 60
+pm.max_requests = 500
+
+php_admin_flag[cgi.fix_pathinfo] = off
+
+include=etc/php-fpm-env.conf
+
diff --git a/novolume/files/usr/local/etc/php/conf.d/apcu.ini b/novolume/files/usr/local/etc/php/conf.d/apcu.ini
new file mode 100644
--- /dev/null
+++ b/novolume/files/usr/local/etc/php/conf.d/apcu.ini
@@ -0,0 +1 @@
+extension=apcu.so
diff --git a/novolume/files/usr/local/etc/php/conf.d/date.ini b/novolume/files/usr/local/etc/php/conf.d/date.ini
new file mode 100644
--- /dev/null
+++ b/novolume/files/usr/local/etc/php/conf.d/date.ini
@@ -0,0 +1,4 @@
+[date]
+date.timezone = UTC
+date.default_latitude = 50.37
+date.default_longitude = 4.49
diff --git a/novolume/files/usr/local/etc/php/conf.d/opcache.ini b/novolume/files/usr/local/etc/php/conf.d/opcache.ini
new file mode 100644
--- /dev/null
+++ b/novolume/files/usr/local/etc/php/conf.d/opcache.ini
@@ -0,0 +1,3 @@
+zend_extension=opcache.so
+opcache.enable=On
+opcache.validate_timestamps=0
diff --git a/novolume/files/usr/local/lib/php-fpm-env/PhpFpmEnvironment.php b/novolume/files/usr/local/lib/php-fpm-env/PhpFpmEnvironment.php
new file mode 100755
--- /dev/null
+++ b/novolume/files/usr/local/lib/php-fpm-env/PhpFpmEnvironment.php
@@ -0,0 +1,103 @@
+#!/usr/bin/env php
+<?php
+
+/**
+ * Allows to get the content of a php-fpm environment configuration file
+ */
+class PhpFpmEnvironment {
+ /**
+ * The temporary directory, used in TMP, TEMP and TMPDIR environment variables
+ * @var string
+ */
+ const TMP = '/tmp';
+
+ /**
+ * The path where to find executables, where sbin should be excluded if you don't run PHP as root.
+ * @var string
+ */
+ const PATH = '/usr/local/bin:/usr/bin:/bin';
+
+ /**
+ * The environment variables to discard
+ * @var Array
+ */
+ const VARIABLES_TO_DISCARD = [
+ '_', // The caller executable script, not pertinent
+ 'HOME', // Set correctly by php-fpm
+ 'TERM', // Not pertinent in server context
+ 'MYSQL_ENV_MYSQL_ROOT_PASSWORD', // from --link …:mysql
+ ];
+
+ /**
+ * Gets an environment array from the current process environment,
+ * with PATH and temp variablesfiltered.
+ *
+ * @return Array
+ */
+ public static function getEnvironmentVariables () {
+ $variables = [];
+
+ foreach ($_ENV as $key => $value) {
+ if (!static::mustIgnoreVariable($key)) {
+ $variables[$key] = $value;
+ }
+ }
+
+ static::addHardcodedEnvironmentVariables($variables);
+
+ return $variables;
+ }
+
+ /**
+ * Adds hardcoded and always wanted environment variables
+ * (path, temporary directory) to the specified array.
+ *
+ * @paran array $variables the array to add the variables to
+ */
+ public static function addHardcodedEnvironmentVariables (&$variables) {
+ static::addTempEnvironmentVariables ($variables);
+ static::addPathEnvironmentVariables ($variables);
+ }
+
+ /**
+ * Adds temporary directory environment variables to the specified array.
+ *
+ * @paran array $variables the array to add the variables to
+ */
+ public static function addTempEnvironmentVariables (&$variables) {
+ $variables['TMP'] = static::TMP;
+ $variables['TEMP'] = static::TMP;
+ $variables['TMPDIR'] = static::TMP;
+ }
+
+ /**
+ * Adds temporary directory environment variables to the specified array.
+ *
+ * @paran array $variables the array to add the variables to
+ */
+ public static function addPathEnvironmentVariables (&$variables) {
+ $variables['PATH'] = static::PATH;
+ }
+
+ /**
+ * Determines if the variable name must be ignored
+ *
+ * @return bool true if the variable must be ignored; otherwise, false.
+ */
+ public static function mustIgnoreVariable ($variableName) {
+ return in_array($variableName, static::VARIABLES_TO_DISCARD);
+ }
+
+ /**
+ * Prints the environment
+ */
+ public static function printConfig () {
+ $variables = static::getEnvironmentVariables();
+
+ foreach ($variables as $key => $value) {
+ echo 'env["', $key, '"] = "', $value, '"', PHP_EOL;
+ }
+ }
+}
+
+PhpFpmEnvironment::printConfig();
diff --git a/novolume/files/usr/local/sbin/php-fpm-env b/novolume/files/usr/local/sbin/php-fpm-env
new file mode 120000
--- /dev/null
+++ b/novolume/files/usr/local/sbin/php-fpm-env
@@ -0,0 +1 @@
+../lib/php-fpm-env/PhpFpmEnvironment.php
\ No newline at end of file
diff --git a/novolume/files/usr/local/sbin/runsvdir-init b/novolume/files/usr/local/sbin/runsvdir-init
new file mode 100755
--- /dev/null
+++ b/novolume/files/usr/local/sbin/runsvdir-init
@@ -0,0 +1,3 @@
+#!/bin/bash
+export > /usr/local/etc/envvars
+exec /usr/sbin/runsvdir-start
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Dec 19, 20:13 (2 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2306791
Default Alt Text
D342.id811.diff (10 KB)
Attached To
Mode
D342: Copy files/ to novolume/files/ for Docker Hub builder
Attached
Detach File
Event Timeline
Log In to Comment