diff --git a/bitnami/drupal-nginx/9/debian-10/Dockerfile b/bitnami/drupal-nginx/9/debian-10/Dockerfile new file mode 100644 index 000000000000..cb00dc920ac9 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/Dockerfile @@ -0,0 +1,56 @@ +FROM docker.io/bitnami/minideb:buster +LABEL maintainer "Bitnami " + +ENV PATH="/opt/bitnami/php/bin:/opt/bitnami/php/sbin:/opt/bitnami/nginx/sbin:/opt/bitnami/mysql/bin:/opt/bitnami/common/bin:/opt/bitnami/drupal/vendor/bin:/opt/bitnami/nami/bin:$PATH" + +COPY prebuildfs / +# Install required system packages and dependencies +RUN install_packages ca-certificates curl dirmngr gnupg gzip libaudit1 libbsd0 libbz2-1.0 libc6 libcap-ng0 libcom-err2 libcurl4 libexpat1 libffi6 libfftw3-double3 libfontconfig1 libfreetype6 libgcc1 libgcrypt20 libgeoip1 libglib2.0-0 libgmp10 libgnutls30 libgomp1 libgpg-error0 libgssapi-krb5-2 libhogweed4 libicu63 libidn2-0 libjemalloc2 libjpeg62-turbo libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 liblcms2-2 libldap-2.4-2 liblqr-1-0 libltdl7 liblzma5 libmagickcore-6.q16-6 libmagickwand-6.q16-6 libmcrypt4 libmemcached11 libmemcachedutil2 libncurses6 libnettle6 libnghttp2-14 libp11-kit0 libpam0g libpcre3 libpng16-16 libpq5 libpsl5 libreadline7 librtmp1 libsasl2-2 libssh2-1 libssl1.1 libstdc++6 libsybdb5 libtasn1-6 libtidy5deb1 libtinfo6 libunistring2 libuuid1 libx11-6 libxau6 libxcb1 libxdmcp6 libxext6 libxml2 libxslt1.1 libzip4 procps sudo tar zlib1g +RUN /build/bitnami-user.sh +RUN /build/install-nami.sh +RUN bitnami-pkg unpack php-7.3.19-0 --checksum 8799bc6c2565c4e9010756915de8f250a1f989df33794395f6ea1abc85bbf4b1 +RUN bitnami-pkg unpack nginx-1.18.0-1 --checksum 4ba415b4511382484b860de346f9109d6d734c0331754e9d8486d65e2e25aaab +RUN bitnami-pkg unpack mysql-client-10.3.23-0 --checksum 7af3cead7a38670bed924fbc99e20c67f6244bb5a92642adb4ab6cd307aa9a5e +RUN bitnami-pkg install tini-0.19.0-0 --checksum 9a8ae20be31a518f042fcec359f2cf35bfdb4e2a56f2fa8ff9ef2ecaf45da80c +RUN bitnami-pkg install gosu-1.12.0-0 --checksum 582d501eeb6b338a24f417fededbf14295903d6be55c52d66c52e616c81bcd8c +RUN bitnami-pkg unpack drupal-9.0.0-0 --checksum 43fcc9203756c6a1b653cb97da69eef26bfc1e21549752499eb5475e0e64119e +RUN apt-get update && apt-get upgrade -y && \ + rm -r /var/lib/apt/lists /var/cache/apt/archives +RUN ln -sf /dev/stdout /opt/bitnami/nginx/logs/access.log +RUN ln -sf /dev/stderr /opt/bitnami/nginx/logs/error.log + +COPY rootfs / +ENV ALLOW_EMPTY_PASSWORD="no" \ + BITNAMI_APP_NAME="drupal-nginx" \ + BITNAMI_IMAGE_VERSION="9.0.0-debian-10-r0" \ + DRUPAL_DATABASE_NAME="bitnami_drupal" \ + DRUPAL_DATABASE_PASSWORD="" \ + DRUPAL_DATABASE_USER="bn_drupal" \ + DRUPAL_EMAIL="user@example.com" \ + DRUPAL_HTTPS_PORT="443" \ + DRUPAL_HTTP_PORT="80" \ + DRUPAL_PASSWORD="bitnami" \ + DRUPAL_PROFILE="standard" \ + DRUPAL_USERNAME="user" \ + MARIADB_HOST="mariadb" \ + MARIADB_PORT_NUMBER="3306" \ + MARIADB_ROOT_PASSWORD="" \ + MARIADB_ROOT_USER="root" \ + MYSQL_CLIENT_CREATE_DATABASE_NAME="" \ + MYSQL_CLIENT_CREATE_DATABASE_PASSWORD="" \ + MYSQL_CLIENT_CREATE_DATABASE_PRIVILEGES="ALL" \ + MYSQL_CLIENT_CREATE_DATABASE_USER="" \ + MYSQL_CLIENT_ENABLE_SSL="no" \ + MYSQL_CLIENT_SSL_CA_FILE="" \ + NGINX_ENABLE_CUSTOM_PORTS="no" \ + NGINX_HTTPS_PORT_NUMBER="443" \ + NGINX_HTTP_PORT_NUMBER="80" \ + OS_ARCH="amd64" \ + OS_FLAVOUR="debian-10" \ + OS_NAME="linux" \ + PHP_MEMORY_LIMIT="256M" + +EXPOSE 80 443 + +ENTRYPOINT [ "/app-entrypoint.sh" ] +CMD [ "/run.sh" ] diff --git a/bitnami/drupal-nginx/9/debian-10/docker-compose.yml b/bitnami/drupal-nginx/9/debian-10/docker-compose.yml new file mode 100644 index 000000000000..ea1f789f3629 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/docker-compose.yml @@ -0,0 +1,32 @@ +version: '2' + +services: + mariadb: + image: 'docker.io/bitnami/mariadb:10.3-debian-10' + environment: + - ALLOW_EMPTY_PASSWORD=yes + - MARIADB_USER=bn_drupal + - MARIADB_DATABASE=bitnami_drupal + volumes: + - 'mariadb_data:/bitnami' + drupal: + image: 'docker.io/bitnami/drupal-nginx:9-debian-10' + environment: + - MARIADB_HOST=mariadb + - MARIADB_PORT_NUMBER=3306 + - DRUPAL_DATABASE_USER=bn_drupal + - DRUPAL_DATABASE_NAME=bitnami_drupal + - ALLOW_EMPTY_PASSWORD=yes + ports: + - '80:80' + - '443:443' + volumes: + - 'drupal_data:/bitnami/drupal' + - './drupal-server-block.conf:/opt/bitnami/nginx/conf/server_blocks/drupal-server-block.conf' + depends_on: + - mariadb +volumes: + mariadb_data: + driver: local + drupal_data: + driver: local diff --git a/bitnami/drupal-nginx/9/debian-10/drupal-server-block.conf b/bitnami/drupal-nginx/9/debian-10/drupal-server-block.conf new file mode 100644 index 000000000000..adc936016c1d --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/drupal-server-block.conf @@ -0,0 +1,85 @@ +server { + listen 0.0.0.0:80; + server_name myapp.example.com; + + root /opt/bitnami/drupal; + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + # Block access to scripts in site files directory + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + # Allow "Well-Known URIs" as per RFC 5785 + location ~* ^/.well-known/ { + allow all; + } + + # Block access to "hidden" files and directories whose names begin with a + # period. This includes directories used by version control systems such + # as Subversion or Git to store control files. + location ~ (^|/)\. { + return 403; + } + + location / { + try_files $uri /index.php?$query_string; + } + + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } + + # Don't allow direct access to PHP files in the vendor directory. + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } + + # The laxer rule will continue to work if Drupal uses this new URL + # pattern with front controllers other than update.php in a future + # release. + location ~ \.php(/|$) { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + include fastcgi_params; + # Block httpoxy attacks. See https://httpoxy.org/. + fastcgi_param HTTP_PROXY ""; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param QUERY_STRING $query_string; + fastcgi_intercept_errors on; + # PHP 7 socket location. + fastcgi_pass localhost:9000; + } + + # Fighting with Styles? This little gem is amazing. + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + # Handle private files through Drupal. Private file's path can come + # with a language prefix. + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } +} diff --git a/bitnami/drupal-nginx/9/debian-10/prebuildfs/build/bitnami-user.sh b/bitnami/drupal-nginx/9/debian-10/prebuildfs/build/bitnami-user.sh new file mode 100755 index 000000000000..0b21a219a4f3 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/prebuildfs/build/bitnami-user.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +useradd -ms /bin/bash bitnami +mkdir -p /opt/bitnami +sed -i -e 's/\s*Defaults\s*secure_path\s*=/# Defaults secure_path=/' /etc/sudoers +echo 'bitnami ALL=NOPASSWD: ALL' >> /etc/sudoers diff --git a/bitnami/drupal-nginx/9/debian-10/prebuildfs/build/install-nami.sh b/bitnami/drupal-nginx/9/debian-10/prebuildfs/build/install-nami.sh new file mode 100755 index 000000000000..455022638541 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/prebuildfs/build/install-nami.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +curl --silent -L https://nami-prod.s3.amazonaws.com/tools/nami/releases/nami-2.0.0-0-linux-x64.tar.gz > /tmp/nami-linux-x64.tar.gz +echo "63e836f3d752cb157b175e1efe2238e5b4e04ab139097c682ca5a0651f0df65c /tmp/nami-linux-x64.tar.gz" | sha256sum --check +mkdir -p /opt/bitnami/nami /opt/bitnami/licenses +tar xzf /tmp/nami-linux-x64.tar.gz --strip 1 -C /opt/bitnami/nami && rm /tmp/nami-linux-x64.tar.gz +curl --silent -L https://raw.githubusercontent.com/bitnami/nami/master/COPYING > /opt/bitnami/licenses/nami-2.0.0-0.txt diff --git a/bitnami/drupal-nginx/9/debian-10/prebuildfs/opt/bitnami/base/functions b/bitnami/drupal-nginx/9/debian-10/prebuildfs/opt/bitnami/base/functions new file mode 100644 index 000000000000..c0eaff78f63e --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/prebuildfs/opt/bitnami/base/functions @@ -0,0 +1,120 @@ +#!/bin/bash + +[[ ${BASH_DEBUG:-false} = true ]] && set -x + +# Constants +MODULE="$(basename "$0")" +BITNAMI_PREFIX=/opt/bitnami + +# Color Palette +RESET='\033[0m' +BOLD='\033[1m' + +## Foreground +BLACK='\033[38;5;0m' +RED='\033[38;5;1m' +GREEN='\033[38;5;2m' +YELLOW='\033[38;5;3m' +BLUE='\033[38;5;4m' +MAGENTA='\033[38;5;5m' +CYAN='\033[38;5;6m' +WHITE='\033[38;5;7m' + +## Background +ON_BLACK='\033[48;5;0m' +ON_RED='\033[48;5;1m' +ON_GREEN='\033[48;5;2m' +ON_YELLOW='\033[48;5;3m' +ON_BLUE='\033[48;5;4m' +ON_MAGENTA='\033[48;5;5m' +ON_CYAN='\033[48;5;6m' +ON_WHITE='\033[48;5;7m' + +# Functions + +######################## +# Print to STDERR +# Arguments: +# Message to print +# Returns: +# None +######################### +stderr_print() { + printf "%b\\n" "${*}" >&2 +} + +######################## +# Log message +# Arguments: +# Message to log +# Returns: +# None +######################### +log() { + stderr_print "${NAMI_DEBUG:+${CYAN}${MODULE:-} ${MAGENTA}$(date "+%T.%2N ")}${RESET}${*}" +} +######################## +# Log an 'info' message +# Arguments: +# Message to log +# Returns: +# None +######################### +info() { + log "${GREEN}INFO ${RESET} ==> ${*}" +} +######################## +# Log message +# Arguments: +# Message to log +# Returns: +# None +######################### +warn() { + log "${YELLOW}WARN ${RESET} ==> ${*}" +} +######################## +# Log an 'error' message +# Arguments: +# Message to log +# Returns: +# None +######################### +error() { + log "${RED}ERROR${RESET} ==> ${*}" +} +######################## +# Print the welcome page +# Globals: +# DISABLE_WELCOME_MESSAGE +# BITNAMI_APP_NAME +# Arguments: +# None +# Returns: +# None +######################### +print_welcome_page() { + if [[ -z "${DISABLE_WELCOME_MESSAGE:-}" ]]; then + if [[ -n "$BITNAMI_APP_NAME" ]]; then + print_image_welcome_page + fi + fi +} +######################## +# Print the welcome page for a Bitnami Docker image +# Globals: +# BITNAMI_APP_NAME +# Arguments: +# None +# Returns: +# None +######################### +print_image_welcome_page() { + local github_url="https://github.com/bitnami/bitnami-docker-${BITNAMI_APP_NAME}" + + log "" + log "${BOLD}Welcome to the Bitnami ${BITNAMI_APP_NAME} container${RESET}" + log "Subscribe to project updates by watching ${BOLD}${github_url}${RESET}" + log "Submit issues and feature requests at ${BOLD}${github_url}/issues${RESET}" + log "" +} diff --git a/bitnami/drupal-nginx/9/debian-10/prebuildfs/opt/bitnami/base/helpers b/bitnami/drupal-nginx/9/debian-10/prebuildfs/opt/bitnami/base/helpers new file mode 100644 index 000000000000..da35a1975ec6 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/prebuildfs/opt/bitnami/base/helpers @@ -0,0 +1,40 @@ +#!/bin/bash + +. /opt/bitnami/base/functions + +######################## +# Helper function to initialize a single nami module +# Arguments: +# Module to initialize +# Returns: +# None +# Description: +# Initialize an unpacked nami module with the `nami initialize` command. +# Command arguments can be specified as function argumnts after the module name. +# `--log-level trace` flag is added to the command if `NAMI_DEBUG` env variable exists. +# The log level can be overriden using the `NAMI_LOG_LEVEL` env variable. +######################### +nami_initialize_one() { + local module="${1:?module not specified}" + if nami inspect $module | grep -q '"lifecycle": "unpacked"'; then + local inputs= + if [[ -f "/${module}-inputs.json" ]]; then + inputs="--inputs-file=/${module}-inputs.json" + fi + nami ${NAMI_DEBUG:+--log-level ${NAMI_LOG_LEVEL:-trace}} initialize $module $inputs "${@:2}" + fi +} + +######################## +# Helper function to initialize one or more nami modules +# Arguments: +# Module to initialize +# Returns: +# None +######################### +nami_initialize() { + local module="${1:?module not specified}" + for module in "${@}"; do + nami_initialize_one $module + done +} diff --git a/bitnami/drupal-nginx/9/debian-10/prebuildfs/opt/bitnami/licenses/licenses.txt b/bitnami/drupal-nginx/9/debian-10/prebuildfs/opt/bitnami/licenses/licenses.txt new file mode 100644 index 000000000000..c76ba31f3b8a --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/prebuildfs/opt/bitnami/licenses/licenses.txt @@ -0,0 +1,3 @@ +Bitnami containers ship with software bundles. You can find the licenses under: +/opt/bitnami/nami/COPYING +/opt/bitnami/[name-of-bundle]/licenses/[bundle-version].txt diff --git a/bitnami/drupal-nginx/9/debian-10/prebuildfs/usr/sbin/bitnami-pkg b/bitnami/drupal-nginx/9/debian-10/prebuildfs/usr/sbin/bitnami-pkg new file mode 100755 index 000000000000..eb0ea3c02952 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/prebuildfs/usr/sbin/bitnami-pkg @@ -0,0 +1,215 @@ +#!/bin/bash -e +. /opt/bitnami/base/functions + +print_usage() { + log "Usage: bitnami-pkg - [OPTIONS] -- [ARGS]" + log "" + log "Download and install Bitnami packages" + log "" + log "Commands:" + log " install Download and install a package." + log " unpack Download and unpack a package." + log "" + log "Options:" + log " -b, --bucket Package release bucket (default: stacksmith)." + log " -c, --checksum SHA256 verification checksum." + log " -h, --help Show this help message and exit." + log "" + log "If the package is already available in the /tmp/bitnami/pkg/cache/" + log "directory, the download will be skipped. If there is a corresponding" + log "file of the same name post-fixed with .sha256 in the directory," + log "that sha will be used instead of the --checksum option." + log "" + log "Examples:" + log " - Unpack package" + log " \$ bitnami-pkg unpack nginx-1.9.10-0" + log "" + log " - Verify and Install package" + log " \$ bitnami-pkg install nginx-1.9.10-0 --checksum 15565d06b18c2e3710fc08e579ddb3d0e39aa663264a0f7404f0743cb4cdb58d" + log "" + log " - Install package with arguments" + log " \$ bitnami-pkg install mariadb-10.1.11-0 -- --password bitnami" + log "" + log " - Install package from testing" + log " \$ bitnami-pkg install mariadb-10.1.11-0 --bucket testing" + log "" +} + +identify_distro() { + distro="${IMAGE_OS:-unknown}" + if [ "${distro}" == "unknown" -a -f /etc/os-release ]; then + distro="$(grep "^ID=" /etc/os-release | cut -d'=' -f2 | cut -d'"' -f2)-$(grep "^VERSION_ID=" /etc/os-release | cut -d'=' -f2 | cut -d'"' -f2 | cut -d'.' -f1)" + fi + echo "$distro" +} + +identify_arch() { + local arch=$(uname -m) + + case "${arch}" in + ppc64le) + ;; # no-op + x86_64) + case $(identify_distro) in + debian-*) + arch=amd64 + ;; + ol-*) + arch=x86_64 + ;; + centos-*) + arch=x86_64 + ;; + rhel-*) + arch=x86_64 + ;; + photon-*) + arch=x86_64 + ;; + esac + ;; + *) + arch="unknown" + ;; + esac + echo $arch +} + +# break up command line for easy parsing and check legal options +ARGS=$(getopt -o b:c:h -l "bucket:,checksum:,help" -n "bitnami-pkg" -- "$@") +if [ $? -ne 0 ]; +then + exit 1 +fi + +eval set -- "$ARGS"; +while true; do + case "$1" in + -b|--bucket) + shift + if [ -n "$1" ]; then + RELEASE_BUCKET=$1 + shift + fi + ;; + -c|--checksum) + shift + if [ -n "$1" ]; then + PACKAGE_SHA256=$1 + shift + fi + ;; + -h|--help) + print_usage + exit 0 + ;; + --) + shift + break + ;; + esac +done + +# weed out unrecognized commands +case "$1" in + install|unpack) ;; + *) + error "Unrecognized command: $1" + print_usage + exit 1 + ;; +esac + +# install/unpack command need to be supplied a package name +if [ $# -lt 2 ]; then + print_usage + exit 1 +fi + +INSTALL_ROOT=/tmp/bitnami/pkg/install +CACHE_ROOT=/tmp/bitnami/pkg/cache + +PACKAGE="$2-linux-$(identify_arch)-$(identify_distro)" +PACKAGE_ARGS=${@:3} +PACKAGE_NAME=$(echo $PACKAGE | sed 's/-[0-9].*//') +RELEASE_BUCKET=${RELEASE_BUCKET:-stacksmith} + +mkdir -p $INSTALL_ROOT +cd $INSTALL_ROOT + +info "Downloading $PACKAGE package" +if [ -f $CACHE_ROOT/$PACKAGE.tar.gz ]; then + info "$CACHE_ROOT/$PACKAGE.tar.gz already exists, skipping download." + cp $CACHE_ROOT/$PACKAGE.tar.gz . + if [ -f $CACHE_ROOT/$PACKAGE.tar.gz.sha256 ]; then + info "Using the local sha256 from $CACHE_ROOT/$PACKAGE.tar.gz.sha256" + PACKAGE_SHA256=$(cat $CACHE_ROOT/$PACKAGE.tar.gz.sha256) + fi +else + # display cURL progress bar when a tty is attached + if tty -s; then + CURL_ARGS="-#" + else + CURL_ARGS="-sS" + fi + if ! curl $CURL_ARGS -LOf "https://downloads.bitnami.com/files/$RELEASE_BUCKET/$PACKAGE.tar.gz"; then + warn "Package name '$PACKAGE' does not exist, will try '${PACKAGE%-$(identify_distro)}'..." + if curl $CURL_ARGS -LOf "https://downloads.bitnami.com/files/$RELEASE_BUCKET/${PACKAGE%-$(identify_distro)}.tar.gz"; then + PACKAGE="${PACKAGE%-$(identify_distro)}" + else + error "Could not find the requested package..." + exit 1 + fi + fi +fi + +if ! tar tzf $PACKAGE.tar.gz >/dev/null 2>&1; then + error "Invalid or corrupt '$PACKAGE' package." + exit 1 +fi + +if [ "$PACKAGE_SHA256" ]; then + info "Verifying package integrity" + echo "$PACKAGE_SHA256 $PACKAGE.tar.gz" | sha256sum -c - +fi + +# If the tarball has too many files, it can trigger a bug +# in overlayfs when using tar. Install bsdtar in the container image +# to workaround it. As the overhead is too big (~40 MB), it is not added by +# default. Source: https://github.com/coreos/bugs/issues/1095 +if which bsdtar >/dev/null 2>&1; then + bsdtar -xf $PACKAGE.tar.gz +else + tar xzf $PACKAGE.tar.gz +fi + +case "$1" in + install) info "Installing $PACKAGE" ;; + unpack) info "Unpacking $PACKAGE" ;; +esac + +nami $1 $PACKAGE $PACKAGE_ARGS +rm -rf $INSTALL_ROOT + +if [ "$BITNAMI_PKG_EXTRA_DIRS" ]; then + info "Creating extra directories" + for i in ${BITNAMI_PKG_EXTRA_DIRS}; do + mkdir -p $i + done +fi + +if [ "$BITNAMI_PKG_CHMOD" ]; then + DIRS="/.nami /bitnami $BITNAMI_PKG_EXTRA_DIRS" + if ! [[ $PACKAGE_NAME =~ .*-client ]]; then + mkdir -p /bitnami/$PACKAGE_NAME + fi + # We need to be in $HOME in order to nami inspect works + cd $HOME + DIRS+=" $(nami inspect $PACKAGE_NAME | grep -e '"installdir"' | cut -f4 -d\")" + info "Fixing permissions: chmod $BITNAMI_PKG_CHMOD $DIRS" + chmod $BITNAMI_PKG_CHMOD $DIRS +fi + +# Include metadata about the package +touch "${BITNAMI_PREFIX}/.bitnami_packages" +echo "${PACKAGE}" >> "${BITNAMI_PREFIX}/.bitnami_packages" diff --git a/bitnami/drupal-nginx/9/debian-10/prebuildfs/usr/sbin/install_packages b/bitnami/drupal-nginx/9/debian-10/prebuildfs/usr/sbin/install_packages new file mode 100755 index 000000000000..c9577647443b --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/prebuildfs/usr/sbin/install_packages @@ -0,0 +1,24 @@ +#!/bin/sh +set -e +set -u +export DEBIAN_FRONTEND=noninteractive +n=0 +max=2 +until [ $n -gt $max ]; do + set +e + ( + apt-get update -qq && + apt-get install -y --no-install-recommends "$@" + ) + CODE=$? + set -e + if [ $CODE -eq 0 ]; then + break + fi + if [ $n -eq $max ]; then + exit $CODE + fi + echo "apt failed, retrying" + n=$(($n + 1)) +done +rm -r /var/lib/apt/lists /var/cache/apt/archives diff --git a/bitnami/drupal-nginx/9/debian-10/rootfs/app-entrypoint.sh b/bitnami/drupal-nginx/9/debian-10/rootfs/app-entrypoint.sh new file mode 100755 index 000000000000..aaafd5581b53 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/rootfs/app-entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/bash -e + +. /opt/bitnami/base/functions +. /opt/bitnami/base/helpers + +print_welcome_page + +if [[ "$1" == "nami" && "$2" == "start" ]] || [[ "$1" == "/run.sh" ]]; then + . /drupal-init.sh + nami_initialize php nginx mysql-client drupal + info "Starting drupal... " + . /post-init.sh +fi + +exec tini -- "$@" diff --git a/bitnami/drupal-nginx/9/debian-10/rootfs/drupal-init.sh b/bitnami/drupal-nginx/9/debian-10/rootfs/drupal-init.sh new file mode 100755 index 000000000000..1787f67cc5b2 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/rootfs/drupal-init.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +## +## @brief Helper function to show an error when a password is empty and exit +## param $1 Input name +## +empty_password_error() { + error "The $1 environment variable is empty or not set. Set the environment variable ALLOW_EMPTY_PASSWORD=yes to allow the container to be started with blank passwords. This is recommended only for development." + exit 1 +} + +## +## @brief Helper function to show a warning when the ALLOW_EMPTY_PASSWORD flag is enabled +## +empty_password_enabled_warn() { + warn "You set the environment variable ALLOW_EMPTY_PASSWORD=${ALLOW_EMPTY_PASSWORD}. For safety reasons, do not use this flag in a production environment." +} + +# Validate passwords +if [[ "$ALLOW_EMPTY_PASSWORD" =~ ^(yes|Yes|YES)$ ]]; then + empty_password_enabled_warn +else + # Database creation by MySQL client + if [[ -n "$MYSQL_CLIENT_CREATE_DATABASE_USER" && -z "$MYSQL_CLIENT_CREATE_DATABASE_PASSWORD" ]]; then + empty_password_error MYSQL_CLIENT_CREATE_DATABASE_PASSWORD + fi + # Drupal database + if [[ -z "$DRUPAL_DATABASE_PASSWORD" ]]; then + empty_password_error DRUPAL_DATABASE_PASSWORD + fi +fi diff --git a/bitnami/drupal-nginx/9/debian-10/rootfs/drupal-inputs.json b/bitnami/drupal-nginx/9/debian-10/rootfs/drupal-inputs.json new file mode 100644 index 000000000000..505aaae50fe8 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/rootfs/drupal-inputs.json @@ -0,0 +1,14 @@ +{ + "databaseName": "{{$global.env.DRUPAL_DATABASE_NAME}}", + "databasePassword": "{{$global.env.DRUPAL_DATABASE_PASSWORD}}", + "databaseServerHost": "{{$global.env.MARIADB_HOST}}", + "databaseServerPort": "{{$global.env.MARIADB_PORT_NUMBER}}", + "databaseUser": "{{$global.env.DRUPAL_DATABASE_USER}}", + "email": "{{$global.env.DRUPAL_EMAIL}}", + "httpPort": "{{$global.env.DRUPAL_HTTP_PORT}}", + "httpsPort": "{{$global.env.DRUPAL_HTTPS_PORT}}", + "installationProfile": "{{$global.env.DRUPAL_PROFILE}}", + "password": "{{$global.env.DRUPAL_PASSWORD}}", + "phpMemoryLimit": "{{$global.env.PHP_MEMORY_LIMIT}}", + "username": "{{$global.env.DRUPAL_USERNAME}}" +} \ No newline at end of file diff --git a/bitnami/drupal-nginx/9/debian-10/rootfs/init.sh b/bitnami/drupal-nginx/9/debian-10/rootfs/init.sh new file mode 100755 index 000000000000..f85df5dce4b2 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/rootfs/init.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +## +## @brief Helper function to show an error when a password is empty and exit +## param $1 Input name +## +empty_password_error() { + error "The $1 environment variable is empty or not set. Set the environment variable ALLOW_EMPTY_PASSWORD=yes to allow the container to be started with blank passwords. This is recommended only for development." + exit 1 +} + +## +## @brief Helper function to show a warning when the ALLOW_EMPTY_PASSWORD flag is enabled +## +empty_password_enabled_warn() { + warn "You set the environment variable ALLOW_EMPTY_PASSWORD=${ALLOW_EMPTY_PASSWORD}. For safety reasons, do not use this flag in a production environment." +} + +# Validate passwords +if [[ "$ALLOW_EMPTY_PASSWORD" =~ ^(yes|Yes|YES)$ ]]; then + empty_password_enabled_warn +else + # Database creation by MySQL client + if [[ -n "$MYSQL_CLIENT_CREATE_DATABASE_USER" && -z "$MYSQL_CLIENT_CREATE_DATABASE_PASSWORD" ]]; then + empty_password_error MYSQL_CLIENT_CREATE_DATABASE_PASSWORD + fi + # Drupal database + if [[ -z "$DRUPAL_DATABASE_PASSWORD" ]]; then + empty_password_error DRUPAL_DATABASE_PASSWORD + fi +fi + +# Check whether custom NGINX ports must be configured +if [[ -n "${NGINX_HTTP_PORT_NUMBER:-}" || -n "${NGINX_HTTPS_PORT_NUMBER:-}" ]]; then + export NGINX_ENABLE_CUSTOM_PORTS="yes" +fi diff --git a/bitnami/drupal-nginx/9/debian-10/rootfs/mysql-client-inputs.json b/bitnami/drupal-nginx/9/debian-10/rootfs/mysql-client-inputs.json new file mode 100644 index 000000000000..eee1b745ba79 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/rootfs/mysql-client-inputs.json @@ -0,0 +1,13 @@ +{ + "allowEmptyPassword": "{{$global.env.ALLOW_EMPTY_PASSWORD}}", + "createDatabaseName": "{{$global.env.MYSQL_CLIENT_CREATE_DATABASE_NAME}}", + "createDatabasePassword": "{{$global.env.MYSQL_CLIENT_CREATE_DATABASE_PASSWORD}}", + "createDatabasePrivileges": "{{$global.env.MYSQL_CLIENT_CREATE_DATABASE_PRIVILEGES}}", + "createDatabaseUser": "{{$global.env.MYSQL_CLIENT_CREATE_DATABASE_USER}}", + "host": "{{$global.env.MARIADB_HOST}}", + "port": "{{$global.env.MARIADB_PORT_NUMBER}}", + "rootPassword": "{{$global.env.MARIADB_ROOT_PASSWORD}}", + "rootUser": "{{$global.env.MARIADB_ROOT_USER}}", + "sslCAFile": "{{$global.env.MYSQL_CLIENT_SSL_CA_FILE}}", + "sslEnable": "{{$global.env.MYSQL_CLIENT_ENABLE_SSL}}" +} \ No newline at end of file diff --git a/bitnami/drupal-nginx/9/debian-10/rootfs/nginx-inputs.json b/bitnami/drupal-nginx/9/debian-10/rootfs/nginx-inputs.json new file mode 100644 index 000000000000..40475df8964c --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/rootfs/nginx-inputs.json @@ -0,0 +1,5 @@ +{ + "enableCustomPorts": "{{$global.env.NGINX_ENABLE_CUSTOM_PORTS}}", + "httpPort": "{{$global.env.NGINX_HTTP_PORT_NUMBER}}", + "httpsPort": "{{$global.env.NGINX_HTTPS_PORT_NUMBER}}" +} \ No newline at end of file diff --git a/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.d/php.sh b/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.d/php.sh new file mode 100755 index 000000000000..fb44050dece0 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.d/php.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# Post-init script to execute PHP files + +# shellcheck disable=SC1091 + +# set -o xtrace # Uncomment this line for debugging purposes + +. /opt/bitnami/base/functions + +readonly f="${1:?missing PHP file}" +failure=0 + +if [[ "$f" == *".php" ]]; then + info "Executing $f with PHP interpreter" + php "$f" || failure=$? +fi +if [[ "$failure" -ne 0 ]]; then + error "Failed to execute ${f}" + exit "$failure" +fi diff --git a/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.d/shell.sh b/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.d/shell.sh new file mode 100755 index 000000000000..e03122ff6f3a --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.d/shell.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# +# Post-init script to execute Shell files + +# shellcheck disable=SC1090,SC1091 + +# set -o xtrace # Uncomment this line for debugging purposes + +. /opt/bitnami/base/functions + +readonly f="${1:?missing SHELL file}" +failure=0 + +if [[ "$f" == *".sh" ]]; then + if [[ -x "$f" ]]; then + info "Executing $f"; "$f" || failure=$? + else + info "Sourcing $f"; . "$f" + fi +fi +if [[ "$failure" -ne 0 ]]; then + error "Failed to execute ${f}" + exit "$failure" +fi diff --git a/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.d/sql-mysql.sh b/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.d/sql-mysql.sh new file mode 100755 index 000000000000..11b14a25f5bc --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.d/sql-mysql.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# Post-init script to execute SQL files with MySQL client + +# shellcheck disable=SC1091 + +# set -o xtrace # Uncomment this line for debugging purposes + +. /opt/bitnami/base/functions + +readonly f="${1:?missing SQL file}" +failure=0 + +if [[ "$f" =~ ^.*(\.sql|\.sql\.gz)$ ]]; then + info "Executing $f" + mysql_cmd=( mysql -h "$MARIADB_HOST" -P "$MARIADB_PORT_NUMBER" -u "$MARIADB_ROOT_USER" ) + if [[ "${ALLOW_EMPTY_PASSWORD:-no}" != "yes" ]]; then + mysql_cmd+=( -p"$MARIADB_ROOT_PASSWORD" ) + fi + if [[ "$f" == *".sql" ]]; then + "${mysql_cmd[@]}" < "$f" || failure=$? + elif [[ "$f" == *".sql.gz" ]]; then + gunzip -c "$f" | "${mysql_cmd[@]}" || failure=$? + fi +fi +if [[ "$failure" -ne 0 ]]; then + error "Failed to execute ${f}" + exit "$failure" +fi diff --git a/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.sh b/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.sh new file mode 100644 index 000000000000..1e8e50707548 --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/rootfs/post-init.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# set -o xtrace # Uncomment this line for debugging purposes + +. /opt/bitnami/base/functions + +if [[ -d /docker-entrypoint-init.d ]] && [[ ! -f "/bitnami/drupal-nginx/.user_scripts_initialized" ]]; then + for f in /docker-entrypoint-init.d/*; do + for p in /post-init.d/*.sh; do + "$p" "$f" + done + done + info "Custom scripts were executed" + touch "/bitnami/drupal-nginx/.user_scripts_initialized" +fi diff --git a/bitnami/drupal-nginx/9/debian-10/rootfs/run.sh b/bitnami/drupal-nginx/9/debian-10/rootfs/run.sh new file mode 100755 index 000000000000..9a8eacd96e9b --- /dev/null +++ b/bitnami/drupal-nginx/9/debian-10/rootfs/run.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +. /opt/bitnami/base/functions +. /opt/bitnami/base/helpers + +_forwardTerm () { + echo "Caught signal SIGTERM, passing it to child processes..." + pgrep -P $$ | xargs kill -15 2>/dev/null + wait + exit $? +} + +trap _forwardTerm TERM + +info "Starting PHP-FPM..." +su daemon -s /bin/bash -c "/opt/bitnami/php/sbin/php-fpm -F --pid /opt/bitnami/php/tmp/php-fpm.pid --fpm-config /opt/bitnami/php/etc/php-fpm.conf --prefix /opt/bitnami/php -c /opt/bitnami/php/etc/php.ini" & + +info "Starting NGINX..." +exec nginx -c /opt/bitnami/nginx/conf/nginx.conf -g "daemon off;" diff --git a/bitnami/drupal-nginx/docker-compose.yml b/bitnami/drupal-nginx/docker-compose.yml index c7dbbe4419ee..ea1f789f3629 100644 --- a/bitnami/drupal-nginx/docker-compose.yml +++ b/bitnami/drupal-nginx/docker-compose.yml @@ -10,7 +10,7 @@ services: volumes: - 'mariadb_data:/bitnami' drupal: - image: 'docker.io/bitnami/drupal-nginx:8-debian-10' + image: 'docker.io/bitnami/drupal-nginx:9-debian-10' environment: - MARIADB_HOST=mariadb - MARIADB_PORT_NUMBER=3306