REL-0.1 Initial Release

This commit is contained in:
cytopia
2018-02-23 08:53:30 +01:00
parent c594390bb3
commit f9782dbab6
47 changed files with 5952 additions and 31 deletions

View File

@@ -0,0 +1,71 @@
# Auto-generated via Ansible
FROM php:5.4-fpm
MAINTAINER "cytopia" <cytopia@everythingcli.org>
###
### Labels
###
LABEL \
name="cytopia's PHP-FPM 5.4 Image" \
image="devilbox/php-fpm" \
tag="5.4-base" \
vendor="devilbox" \
license="MIT"
###
### Envs
###
ENV MY_USER="devilbox" \
MY_GROUP="devilbox" \
MY_UID="1000" \
MY_GID="1000"
###
### User/Group
###
RUN set -x \
&& groupadd -g ${MY_GID} -r ${MY_GROUP} \
&& useradd -u ${MY_UID} -m -s /bin/bash -g ${MY_GROUP} ${MY_USER}
###
### Upgrade
###
RUN set -x \
&& apt-get update \
&& apt-get upgrade -y \
&& rm -rf /var/lib/apt/lists/*
###
### Copy files
###
COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh
COPY ./data/docker-entrypoint.d /docker-entrypoint.d
COPY ./data/php-fpm.conf /usr/local/etc/php-fpm.conf
COPY ./data/php-fpm.d/devilbox.conf /usr/local/etc/php-fpm.d/zzz-devilbox.conf
###
### Verify
###
RUN set -x \
&& php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.4' \
&& /usr/local/sbin/php-fpm --test \
&& PHP_ERROR="$( php -v 2>&1 1>/dev/null )" \
&& if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi
###
### Ports
###
EXPOSE 9000
###
### Entrypoint
###
ENTRYPOINT ["/docker-entrypoint.sh"]

View File

@@ -0,0 +1,71 @@
# Auto-generated via Ansible
FROM php:5.5-fpm
MAINTAINER "cytopia" <cytopia@everythingcli.org>
###
### Labels
###
LABEL \
name="cytopia's PHP-FPM 5.5 Image" \
image="devilbox/php-fpm" \
tag="5.5-base" \
vendor="devilbox" \
license="MIT"
###
### Envs
###
ENV MY_USER="devilbox" \
MY_GROUP="devilbox" \
MY_UID="1000" \
MY_GID="1000"
###
### User/Group
###
RUN set -x \
&& groupadd -g ${MY_GID} -r ${MY_GROUP} \
&& useradd -u ${MY_UID} -m -s /bin/bash -g ${MY_GROUP} ${MY_USER}
###
### Upgrade
###
RUN set -x \
&& apt-get update \
&& apt-get upgrade -y \
&& rm -rf /var/lib/apt/lists/*
###
### Copy files
###
COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh
COPY ./data/docker-entrypoint.d /docker-entrypoint.d
COPY ./data/php-fpm.conf /usr/local/etc/php-fpm.conf
COPY ./data/php-fpm.d/devilbox.conf /usr/local/etc/php-fpm.d/zzz-devilbox.conf
###
### Verify
###
RUN set -x \
&& php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.5' \
&& /usr/local/sbin/php-fpm --test \
&& PHP_ERROR="$( php -v 2>&1 1>/dev/null )" \
&& if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi
###
### Ports
###
EXPOSE 9000
###
### Entrypoint
###
ENTRYPOINT ["/docker-entrypoint.sh"]

View File

@@ -0,0 +1,71 @@
# Auto-generated via Ansible
FROM php:5.6-fpm
MAINTAINER "cytopia" <cytopia@everythingcli.org>
###
### Labels
###
LABEL \
name="cytopia's PHP-FPM 5.6 Image" \
image="devilbox/php-fpm" \
tag="5.6-base" \
vendor="devilbox" \
license="MIT"
###
### Envs
###
ENV MY_USER="devilbox" \
MY_GROUP="devilbox" \
MY_UID="1000" \
MY_GID="1000"
###
### User/Group
###
RUN set -x \
&& groupadd -g ${MY_GID} -r ${MY_GROUP} \
&& useradd -u ${MY_UID} -m -s /bin/bash -g ${MY_GROUP} ${MY_USER}
###
### Upgrade
###
RUN set -x \
&& apt-get update \
&& apt-get upgrade -y \
&& rm -rf /var/lib/apt/lists/*
###
### Copy files
###
COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh
COPY ./data/docker-entrypoint.d /docker-entrypoint.d
COPY ./data/php-fpm.conf /usr/local/etc/php-fpm.conf
COPY ./data/php-fpm.d/devilbox.conf /usr/local/etc/php-fpm.d/zzz-devilbox.conf
###
### Verify
###
RUN set -x \
&& php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^5.6' \
&& /usr/local/sbin/php-fpm --test \
&& PHP_ERROR="$( php -v 2>&1 1>/dev/null )" \
&& if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi
###
### Ports
###
EXPOSE 9000
###
### Entrypoint
###
ENTRYPOINT ["/docker-entrypoint.sh"]

View File

@@ -0,0 +1,71 @@
# Auto-generated via Ansible
FROM php:7.0-fpm
MAINTAINER "cytopia" <cytopia@everythingcli.org>
###
### Labels
###
LABEL \
name="cytopia's PHP-FPM 7.0 Image" \
image="devilbox/php-fpm" \
tag="7.0-base" \
vendor="devilbox" \
license="MIT"
###
### Envs
###
ENV MY_USER="devilbox" \
MY_GROUP="devilbox" \
MY_UID="1000" \
MY_GID="1000"
###
### User/Group
###
RUN set -x \
&& groupadd -g ${MY_GID} -r ${MY_GROUP} \
&& useradd -u ${MY_UID} -m -s /bin/bash -g ${MY_GROUP} ${MY_USER}
###
### Upgrade
###
RUN set -x \
&& apt-get update \
&& apt-get upgrade -y \
&& rm -rf /var/lib/apt/lists/*
###
### Copy files
###
COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh
COPY ./data/docker-entrypoint.d /docker-entrypoint.d
COPY ./data/php-fpm.conf /usr/local/etc/php-fpm.conf
COPY ./data/php-fpm.d/devilbox.conf /usr/local/etc/php-fpm.d/zzz-devilbox.conf
###
### Verify
###
RUN set -x \
&& php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.0' \
&& /usr/local/sbin/php-fpm --test \
&& PHP_ERROR="$( php -v 2>&1 1>/dev/null )" \
&& if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi
###
### Ports
###
EXPOSE 9000
###
### Entrypoint
###
ENTRYPOINT ["/docker-entrypoint.sh"]

View File

@@ -0,0 +1,71 @@
# Auto-generated via Ansible
FROM php:7.1-fpm
MAINTAINER "cytopia" <cytopia@everythingcli.org>
###
### Labels
###
LABEL \
name="cytopia's PHP-FPM 7.1 Image" \
image="devilbox/php-fpm" \
tag="7.1-base" \
vendor="devilbox" \
license="MIT"
###
### Envs
###
ENV MY_USER="devilbox" \
MY_GROUP="devilbox" \
MY_UID="1000" \
MY_GID="1000"
###
### User/Group
###
RUN set -x \
&& groupadd -g ${MY_GID} -r ${MY_GROUP} \
&& useradd -u ${MY_UID} -m -s /bin/bash -g ${MY_GROUP} ${MY_USER}
###
### Upgrade
###
RUN set -x \
&& apt-get update \
&& apt-get upgrade -y \
&& rm -rf /var/lib/apt/lists/*
###
### Copy files
###
COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh
COPY ./data/docker-entrypoint.d /docker-entrypoint.d
COPY ./data/php-fpm.conf /usr/local/etc/php-fpm.conf
COPY ./data/php-fpm.d/devilbox.conf /usr/local/etc/php-fpm.d/zzz-devilbox.conf
###
### Verify
###
RUN set -x \
&& php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.1' \
&& /usr/local/sbin/php-fpm --test \
&& PHP_ERROR="$( php -v 2>&1 1>/dev/null )" \
&& if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi
###
### Ports
###
EXPOSE 9000
###
### Entrypoint
###
ENTRYPOINT ["/docker-entrypoint.sh"]

View File

@@ -0,0 +1,71 @@
# Auto-generated via Ansible
FROM php:7.2-fpm
MAINTAINER "cytopia" <cytopia@everythingcli.org>
###
### Labels
###
LABEL \
name="cytopia's PHP-FPM 7.2 Image" \
image="devilbox/php-fpm" \
tag="7.2-base" \
vendor="devilbox" \
license="MIT"
###
### Envs
###
ENV MY_USER="devilbox" \
MY_GROUP="devilbox" \
MY_UID="1000" \
MY_GID="1000"
###
### User/Group
###
RUN set -x \
&& groupadd -g ${MY_GID} -r ${MY_GROUP} \
&& useradd -u ${MY_UID} -m -s /bin/bash -g ${MY_GROUP} ${MY_USER}
###
### Upgrade
###
RUN set -x \
&& apt-get update \
&& apt-get upgrade -y \
&& rm -rf /var/lib/apt/lists/*
###
### Copy files
###
COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh
COPY ./data/docker-entrypoint.d /docker-entrypoint.d
COPY ./data/php-fpm.conf /usr/local/etc/php-fpm.conf
COPY ./data/php-fpm.d/devilbox.conf /usr/local/etc/php-fpm.d/zzz-devilbox.conf
###
### Verify
###
RUN set -x \
&& php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^7.2' \
&& /usr/local/sbin/php-fpm --test \
&& PHP_ERROR="$( php -v 2>&1 1>/dev/null )" \
&& if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi
###
### Ports
###
EXPOSE 9000
###
### Entrypoint
###
ENTRYPOINT ["/docker-entrypoint.sh"]

View File

@@ -0,0 +1,140 @@
#!/bin/sh
#
# Available global variables:
# + MY_USER
# + MY_GROUP
# + DEBUG_LEVEL
set -e
set -u
############################################################
# Functions
############################################################
###
### Log to stdout/stderr
###
log() {
log_lvl="${1}"
log_msg="${2}"
log_clr_ok="\033[0;32m"
log_clr_info="\033[0;34m"
log_clr_warn="\033[0;33m"
log_clr_err="\033[0;31m"
log_clr_rst="\033[0m"
if [ "${log_lvl}" = "ok" ]; then
if [ "${DEBUG_LEVEL}" -gt "0" ]; then
printf "${log_clr_ok}[OK] %s${log_clr_rst}\n" "${log_msg}"
fi
elif [ "${log_lvl}" = "info" ]; then
if [ "${DEBUG_LEVEL}" -gt "0" ]; then
printf "${log_clr_info}[INFO] %s${log_clr_rst}\n" "${log_msg}"
fi
elif [ "${log_lvl}" = "warn" ]; then
printf "${log_clr_warn}[WARN] %s${log_clr_rst}\n" "${log_msg}" 1>&2 # stdout -> stderr
elif [ "${log_lvl}" = "err" ]; then
printf "${log_clr_err}[ERR] %s${log_clr_rst}\n" "${log_msg}" 1>&2 # stdout -> stderr
else
printf "${log_clr_err}[???] %s${log_clr_rst}\n" "${log_msg}" 1>&2 # stdout -> stderr
fi
unset -v log_lvl
unset -v log_msg
unset -v log_clr_ok
unset -v log_clr_info
unset -v log_clr_warn
unset -v log_clr_err
unset -v log_clr_rst
}
###
### Wrapper for run_run command
###
run() {
run_cmd="${1}"
run_clr_red="\033[0;31m"
run_clr_green="\033[0;32m"
run_clr_reset="\033[0m"
if [ "${DEBUG_LEVEL}" -gt "1" ]; then
printf "${run_clr_red}%s \$ ${run_clr_green}${run_cmd}${run_clr_reset}\n" "$( whoami )"
fi
/bin/sh -c "LANG=C LC_ALL=C ${run_cmd}"
unset -v run_cmd
unset -v run_clr_red
unset -v run_clr_green
unset -v run_clr_reset
}
###
### Is argument an integer?
###
isint() {
echo "${1}" | grep -Eq '^([0-9]|[1-9][0-9]*)$'
}
###
### Is env variable set?
###
env_set() {
if set | grep "^${1}=" >/dev/null 2>&1; then
return 0
else
return 1
fi
}
###
### Get env variable by name
###
env_get() {
if ! env_set "${1}"; then
return 1
fi
env_get_value="$( set | grep "^${1}=" | awk -F '=' '{for (i=2; i<NF; i++) printf $i "="; print $NF}' )"
# Remove surrounding quotes
env_get_value="$( echo "${env_get_value}" | sed "s/^'//g" )"
env_get_value="$( echo "${env_get_value}" | sed 's/^"//g' )"
env_get_value="$( echo "${env_get_value}" | sed "s/'$//g" )"
env_get_value="$( echo "${env_get_value}" | sed 's/"$//g' )"
echo "${env_get_value}"
unset -v env_get_value
}
############################################################
# Sanity Checks
############################################################
if ! command -v grep >/dev/null 2>&1; then
log "err" "grep not found, but required."
exit 1
fi
if ! command -v sed >/dev/null 2>&1; then
log "err" "sed not found, but required."
exit 1
fi
if ! command -v awk >/dev/null 2>&1; then
log "err" "awk not found, but required."
exit 1
fi
if ! command -v getent >/dev/null 2>&1; then
log "err" "getent not found, but required."
exit 1
fi

View File

@@ -0,0 +1,22 @@
#!/bin/sh
set -e
set -u
############################################################
# Functions
############################################################
###
### Debug level
###
get_debug_level() {
if ! env_set "${1}"; then
# Return default specified value
echo "${2}"
else
# Return env value
env_get "${1}"
fi
}

View File

@@ -0,0 +1,104 @@
#!/bin/sh
#
# Available global variables:
# + MY_USER
# + MY_GROUP
# + DEBUG_LEVEL
set -e
set -u
############################################################
# Functions
############################################################
###
### Change UID
###
set_uid() {
uid_varname="${1}"
if ! env_set "${uid_varname}"; then
log "info" "\$${uid_varname} not set. Keeping default uid for '${MY_USER}'."
else
uid_env_uid="$( env_get "${uid_varname}" )"
if ! isint "${uid_env_uid}"; then
log "err" "\$${uid_varname} is not an integer: '${uid_env_uid}'"
exit 1
else
if uid_getent_row="$( getent passwd "${uid_env_uid}" )"; then
uid_getent_name="$( echo "${uid_getent_row}" | awk -F ':' '{print $1}' )"
if [ "${uid_getent_name}" != "${MY_USER}" ]; then
log "warn" "User with ${uid_env_uid} already exists: ${uid_getent_name}"
log "info" "Changing UID of ${uid_getent_name} to 9999"
run "usermod -u 9999 ${uid_getent_name}"
fi
fi
log "info" "Changing user '${MY_USER}' uid to: ${uid_env_uid}"
run "usermod -u ${uid_env_uid} ${MY_USER}"
fi
fi
# Fix homedir permissions
run "chown -R ${MY_USER} /home/${MY_USER}"
unset -v uid_varname
unset -v uid_env_uid
unset -v uid_getent_row
unset -v uid_getent_name
}
###
### Change GID
###
set_gid() {
gid_varname="${1}"
if ! env_set "${gid_varname}"; then
log "info" "\$${gid_varname} not set. Keeping default gid for '${MY_GROUP}'."
else
# Retrieve the value from env
gid_env_gid="$( env_get "${gid_varname}" )"
if ! isint "${gid_env_gid}"; then
log "err" "\$${gid_varname} is not an integer: '${gid_env_gid}'"
exit 1
else
if gid_getent_row="$( getent group "${gid_env_gid}" )"; then
gid_getent_name="$( echo "${gid_getent_row}" | awk -F ':' '{print $1}' )"
if [ "${gid_getent_name}" != "${MY_GROUP}" ]; then
log "warn" "Group with ${gid_env_gid} already exists: ${gid_getent_name}"
log "info" "Changing GID of ${gid_getent_name} to 9999"
run "groupmod -g 9999 ${gid_getent_name}"
fi
fi
log "info" "Changing group '${MY_GROUP}' gid to: ${gid_env_gid}"
run "groupmod -g ${gid_env_gid} ${MY_GROUP}"
fi
fi
# Fix homedir permissions
run "chown -R :${MY_GROUP} /home/${MY_USER}"
unset -v gid_varname
unset -v gid_env_gid
unset -v gid_getent_row
unset -v gid_getent_name
}
############################################################
# Sanity Checks
############################################################
if ! command -v usermod >/dev/null 2>&1; then
log "err" "usermod not found, but required."
exit 1
fi
if ! command -v groupmod >/dev/null 2>&1; then
log "err" "groupmod not found, but required."
exit 1
fi

View File

@@ -0,0 +1,51 @@
#!/bin/sh
#
# Available global variables:
# + MY_USER
# + MY_GROUP
# + DEBUG_LEVEL
###
### Settings
###
set -e
set -u
CONFIG_DIR="/docker-entrypoint.d"
###
### Source libs
###
init="$( find "${CONFIG_DIR}" -name '*.sh' -type f | sort -u )"
for f in ${init}; do
# shellcheck disable=SC1090
. "${f}"
done
###
### Set Debug level
###
DEBUG_LEVEL="$( get_debug_level "DEBUG_ENTRYPOINT" "0" )"
log "info" "Debug level: ${DEBUG_LEVEL}"
#############################################################
## Entry Point
#############################################################
###
### Change uid/gid
###
set_uid "NEW_UID"
set_gid "NEW_GID"
###
### Startup
###
log "info" "Starting $( php-fpm -v 2>&1 | head -1 )"
exec /usr/local/sbin/php-fpm

View File

@@ -0,0 +1,5 @@
[global]
error_log = /proc/self/fd/2
log_level = notice
daemonize = no
include = /usr/local/etc/php-fpm.d/*.conf

View File

@@ -0,0 +1,24 @@
[www]
; User and Group
user = devilbox
group = devilbox
; if we send this to /proc/self/fd/1, it never appears
access.log = /proc/self/fd/2
; Ensure to listen here
listen = 9000
; Keep env variables set by docker
clear_env = no
; Ensure worker stdout and stderr are sent to the main error log.
catch_workers_output = yes
; Pool config
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3