Docker Update - Apache Conf., Define Entrypoint - Issue 137
This commit is contained in:
45
.docker/bash/uvdesk-entrypoint.sh
Executable file
45
.docker/bash/uvdesk-entrypoint.sh
Executable file
@@ -0,0 +1,45 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Output color codes
|
||||
# https://en.wikipedia.org/wiki/ANSI_escape_code
|
||||
|
||||
declare -r COLOR_NC='\033[0m'
|
||||
declare -r COLOR_RED='\033[0;31m'
|
||||
declare -r COLOR_GREEN='\033[0;32m'
|
||||
declare -r COLOR_LIGHT_GREEN='\033[1;32m'
|
||||
declare -r COLOR_YELLOW='\033[1;33m'
|
||||
declare -r COLOR_LIGHT_YELLOW='\033[0;33m'
|
||||
declare -r COLOR_BLUE='\033[0;34m'
|
||||
declare -r COLOR_LIGHT_BLUE='\033[1;34m'
|
||||
|
||||
# Restart apache & mysql server
|
||||
service apache2 restart && service mysql restart;
|
||||
|
||||
if [[ ! -z "$MYSQL_USER" && ! -z "$MYSQL_PASSWORD" && ! -z "$MYSQL_DATABASE" ]]; then
|
||||
if [ "$(mysqladmin ping)" == "mysqld is alive" ]; then
|
||||
# Mysql is up and running with default configuration
|
||||
|
||||
# Create default database if not found and grant non-root user all privileges to that database
|
||||
# Note: Grant privileges will create user if it doesn't exists prior to mysql 8
|
||||
mysql -u root -e "CREATE DATABASE IF NOT EXISTS $MYSQL_DATABASE";
|
||||
mysql -u root -e "GRANT ALL PRIVILEGES ON $MYSQL_DATABASE.* To '$MYSQL_USER'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD'";
|
||||
|
||||
# Update root user credentials
|
||||
mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$MYSQL_ROOT_PASSWORD'";
|
||||
|
||||
# Create new mysql configuration files (root & uvdesk)
|
||||
rm -f /etc/mysql/my.cnf /home/uvdesk/.my.cnf \
|
||||
&& echo -e "[client]\nuser = root\npassword = $MYSQL_ROOT_PASSWORD\nhost = localhost" >> /etc/mysql/my.cnf \
|
||||
&& echo -e "[client]\nuser = $MYSQL_USER\npassword = $MYSQL_PASSWORD\nhost = localhost" >> /home/uvdesk/.my.cnf;
|
||||
else
|
||||
echo -e "${COLOR_RED}Error: Failed to establish a connection with mysql server (localhost)${COLOR_NC}\n";
|
||||
exit 1;
|
||||
fi
|
||||
else
|
||||
echo -e "${COLOR_LIGHT_YELLOW}Notice: Skipping configuration of local database - one or more mysql environment variables are not defined.${COLOR_NC}\n";
|
||||
fi
|
||||
|
||||
# Step down from sudo to uvdesk
|
||||
/usr/local/bin/gosu uvdesk "$@"
|
||||
|
||||
exec "$@"
|
||||
47
.docker/config/apache2/env
Normal file
47
.docker/config/apache2/env
Normal file
@@ -0,0 +1,47 @@
|
||||
# envvars - default environment variables for apache2ctl
|
||||
|
||||
# this won't be correct after changing uid
|
||||
unset HOME
|
||||
|
||||
# for supporting multiple apache2 instances
|
||||
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
|
||||
SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
|
||||
else
|
||||
SUFFIX=
|
||||
fi
|
||||
|
||||
# Since there is no sane way to get the parsed apache2 config in scripts, some
|
||||
# settings are defined via environment variables and then used in apache2ctl,
|
||||
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
|
||||
export APACHE_RUN_USER=uvdesk
|
||||
export APACHE_RUN_GROUP=uvdesk
|
||||
# temporary state file location. This might be changed to /run in Wheezy+1
|
||||
export APACHE_PID_FILE=/var/run/apache2/apache2$SUFFIX.pid
|
||||
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
|
||||
export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
|
||||
# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2.
|
||||
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
|
||||
|
||||
## The locale used by some modules like mod_dav
|
||||
export LANG=C
|
||||
## Uncomment the following line to use the system default locale instead:
|
||||
#. /etc/default/locale
|
||||
|
||||
export LANG
|
||||
|
||||
## The command to get the status for 'apache2ctl status'.
|
||||
## Some packages providing 'www-browser' need '--dump' instead of '-dump'.
|
||||
#export APACHE_LYNX='www-browser -dump'
|
||||
|
||||
## If you need a higher file descriptor limit, uncomment and adjust the
|
||||
## following line (default is 8192):
|
||||
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'
|
||||
|
||||
## If you would like to pass arguments to the web server, add them below
|
||||
## to the APACHE_ARGUMENTS environment.
|
||||
#export APACHE_ARGUMENTS=''
|
||||
|
||||
## Enable the debug mode for maintainer scripts.
|
||||
## This will produce a verbose output on package installations of web server modules and web application
|
||||
## installations which interact with Apache
|
||||
#export APACHE2_MAINTSCRIPT_DEBUG=1
|
||||
227
.docker/config/apache2/httpd.conf
Normal file
227
.docker/config/apache2/httpd.conf
Normal file
@@ -0,0 +1,227 @@
|
||||
# This is the main Apache server configuration file. It contains the
|
||||
# configuration directives that give the server its instructions.
|
||||
# See http://httpd.apache.org/docs/2.4/ for detailed information about
|
||||
# the directives and /usr/share/doc/apache2/README.Debian about Debian specific
|
||||
# hints.
|
||||
#
|
||||
#
|
||||
# Summary of how the Apache 2 configuration works in Debian:
|
||||
# The Apache 2 web server configuration in Debian is quite different to
|
||||
# upstream's suggested way to configure the web server. This is because Debian's
|
||||
# default Apache2 installation attempts to make adding and removing modules,
|
||||
# virtual hosts, and extra configuration directives as flexible as possible, in
|
||||
# order to make automating the changes and administering the server as easy as
|
||||
# possible.
|
||||
|
||||
# It is split into several files forming the configuration hierarchy outlined
|
||||
# below, all located in the /etc/apache2/ directory:
|
||||
#
|
||||
# /etc/apache2/
|
||||
# |-- apache2.conf
|
||||
# | `-- ports.conf
|
||||
# |-- mods-enabled
|
||||
# | |-- *.load
|
||||
# | `-- *.conf
|
||||
# |-- conf-enabled
|
||||
# | `-- *.conf
|
||||
# `-- sites-enabled
|
||||
# `-- *.conf
|
||||
#
|
||||
#
|
||||
# * apache2.conf is the main configuration file (this file). It puts the pieces
|
||||
# together by including all remaining configuration files when starting up the
|
||||
# web server.
|
||||
#
|
||||
# * ports.conf is always included from the main configuration file. It is
|
||||
# supposed to determine listening ports for incoming connections which can be
|
||||
# customized anytime.
|
||||
#
|
||||
# * Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/
|
||||
# directories contain particular configuration snippets which manage modules,
|
||||
# global configuration fragments, or virtual host configurations,
|
||||
# respectively.
|
||||
#
|
||||
# They are activated by symlinking available configuration files from their
|
||||
# respective *-available/ counterparts. These should be managed by using our
|
||||
# helpers a2enmod/a2dismod, a2ensite/a2dissite and a2enconf/a2disconf. See
|
||||
# their respective man pages for detailed information.
|
||||
#
|
||||
# * The binary is called apache2. Due to the use of environment variables, in
|
||||
# the default configuration, apache2 needs to be started/stopped with
|
||||
# /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not
|
||||
# work with the default configuration.
|
||||
|
||||
|
||||
# Global configuration
|
||||
#
|
||||
|
||||
#
|
||||
# ServerRoot: The top of the directory tree under which the server's
|
||||
# configuration, error, and log files are kept.
|
||||
#
|
||||
# NOTE! If you intend to place this on an NFS (or otherwise network)
|
||||
# mounted filesystem then please read the Mutex documentation (available
|
||||
# at <URL:http://httpd.apache.org/docs/2.4/mod/core.html#mutex>);
|
||||
# you will save yourself a lot of trouble.
|
||||
#
|
||||
# Do NOT add a slash at the end of the directory path.
|
||||
#
|
||||
#ServerRoot "/etc/apache2"
|
||||
|
||||
#
|
||||
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
|
||||
#
|
||||
#Mutex file:${APACHE_LOCK_DIR} default
|
||||
|
||||
#
|
||||
# The directory where shm and other runtime files will be stored.
|
||||
#
|
||||
|
||||
DefaultRuntimeDir ${APACHE_RUN_DIR}
|
||||
|
||||
#
|
||||
# PidFile: The file in which the server should record its process
|
||||
# identification number when it starts.
|
||||
# This needs to be set in /etc/apache2/envvars
|
||||
#
|
||||
PidFile ${APACHE_PID_FILE}
|
||||
|
||||
#
|
||||
# Timeout: The number of seconds before receives and sends time out.
|
||||
#
|
||||
Timeout 300
|
||||
|
||||
#
|
||||
# KeepAlive: Whether or not to allow persistent connections (more than
|
||||
# one request per connection). Set to "Off" to deactivate.
|
||||
#
|
||||
KeepAlive On
|
||||
|
||||
#
|
||||
# MaxKeepAliveRequests: The maximum number of requests to allow
|
||||
# during a persistent connection. Set to 0 to allow an unlimited amount.
|
||||
# We recommend you leave this number high, for maximum performance.
|
||||
#
|
||||
MaxKeepAliveRequests 100
|
||||
|
||||
#
|
||||
# KeepAliveTimeout: Number of seconds to wait for the next request from the
|
||||
# same client on the same connection.
|
||||
#
|
||||
KeepAliveTimeout 5
|
||||
|
||||
|
||||
# These need to be set in /etc/apache2/envvars
|
||||
User ${APACHE_RUN_USER}
|
||||
Group ${APACHE_RUN_GROUP}
|
||||
|
||||
#
|
||||
# HostnameLookups: Log the names of clients or just their IP addresses
|
||||
# e.g., www.apache.org (on) or 204.62.129.132 (off).
|
||||
# The default is off because it'd be overall better for the net if people
|
||||
# had to knowingly turn this feature on, since enabling it means that
|
||||
# each client request will result in AT LEAST one lookup request to the
|
||||
# nameserver.
|
||||
#
|
||||
HostnameLookups Off
|
||||
|
||||
# ErrorLog: The location of the error log file.
|
||||
# If you do not specify an ErrorLog directive within a <VirtualHost>
|
||||
# container, error messages relating to that virtual host will be
|
||||
# logged here. If you *do* define an error logfile for a <VirtualHost>
|
||||
# container, that host's errors will be logged there and not here.
|
||||
#
|
||||
ErrorLog ${APACHE_LOG_DIR}/error.log
|
||||
|
||||
#
|
||||
# LogLevel: Control the severity of messages logged to the error_log.
|
||||
# Available values: trace8, ..., trace1, debug, info, notice, warn,
|
||||
# error, crit, alert, emerg.
|
||||
# It is also possible to configure the log level for particular modules, e.g.
|
||||
# "LogLevel info ssl:warn"
|
||||
#
|
||||
LogLevel warn
|
||||
|
||||
# Include module configuration:
|
||||
IncludeOptional mods-enabled/*.load
|
||||
IncludeOptional mods-enabled/*.conf
|
||||
|
||||
# Include list of ports to listen on
|
||||
Include ports.conf
|
||||
|
||||
|
||||
# Sets the default security model of the Apache2 HTTPD server. It does
|
||||
# not allow access to the root filesystem outside of /usr/share and /var/www.
|
||||
# The former is used by web applications packaged in Debian,
|
||||
# the latter may be used for local directories served by the web server. If
|
||||
# your system is serving content from a sub-directory in /srv you must allow
|
||||
# access here, or in any related virtual host.
|
||||
<Directory />
|
||||
Options FollowSymLinks
|
||||
AllowOverride None
|
||||
Require all denied
|
||||
</Directory>
|
||||
|
||||
<Directory /usr/share>
|
||||
AllowOverride None
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
<Directory /var/www/uvdesk>
|
||||
Options Indexes FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
#<Directory /srv/>
|
||||
# Options Indexes FollowSymLinks
|
||||
# AllowOverride None
|
||||
# Require all granted
|
||||
#</Directory>
|
||||
|
||||
|
||||
|
||||
|
||||
# AccessFileName: The name of the file to look for in each directory
|
||||
# for additional configuration directives. See also the AllowOverride
|
||||
# directive.
|
||||
#
|
||||
AccessFileName .htaccess
|
||||
|
||||
#
|
||||
# The following lines prevent .htaccess and .htpasswd files from being
|
||||
# viewed by Web clients.
|
||||
#
|
||||
<FilesMatch "^\.ht">
|
||||
Require all denied
|
||||
</FilesMatch>
|
||||
|
||||
|
||||
#
|
||||
# The following directives define some format nicknames for use with
|
||||
# a CustomLog directive.
|
||||
#
|
||||
# These deviate from the Common Log Format definitions in that they use %O
|
||||
# (the actual bytes sent including headers) instead of %b (the size of the
|
||||
# requested file), because the latter makes it impossible to detect partial
|
||||
# requests.
|
||||
#
|
||||
# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.
|
||||
# Use mod_remoteip instead.
|
||||
#
|
||||
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
|
||||
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
|
||||
LogFormat "%h %l %u %t \"%r\" %>s %O" common
|
||||
LogFormat "%{Referer}i -> %U" referer
|
||||
LogFormat "%{User-agent}i" agent
|
||||
|
||||
# Include of directories ignores editors' and dpkg's backup files,
|
||||
# see README.Debian for details.
|
||||
|
||||
# Include generic snippets of statements
|
||||
IncludeOptional conf-enabled/*.conf
|
||||
|
||||
# Include the virtual host configurations:
|
||||
IncludeOptional sites-enabled/*.conf
|
||||
|
||||
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
|
||||
31
.docker/config/apache2/vhost.conf
Normal file
31
.docker/config/apache2/vhost.conf
Normal file
@@ -0,0 +1,31 @@
|
||||
<VirtualHost *:80>
|
||||
# The ServerName directive sets the request scheme, hostname and port that
|
||||
# the server uses to identify itself. This is used when creating
|
||||
# redirection URLs. In the context of virtual hosts, the ServerName
|
||||
# specifies what hostname must appear in the request's Host: header to
|
||||
# match this virtual host. For the default virtual host (this file) this
|
||||
# value is not decisive as it is used as a last resort host regardless.
|
||||
# However, you must set it for any further virtual host explicitly.
|
||||
#ServerName www.example.com
|
||||
|
||||
ServerAdmin webmaster@localhost
|
||||
DocumentRoot /var/www/uvdesk/public
|
||||
|
||||
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
|
||||
# error, crit, alert, emerg.
|
||||
# It is also possible to configure the loglevel for particular
|
||||
# modules, e.g.
|
||||
#LogLevel info ssl:warn
|
||||
|
||||
ErrorLog ${APACHE_LOG_DIR}/error.log
|
||||
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
||||
|
||||
# For most configuration files from conf-available/, which are
|
||||
# enabled or disabled at a global level, it is possible to
|
||||
# include a line for only one particular virtual host. For example the
|
||||
# following line enables the CGI configuration for this host only
|
||||
# after it has been globally disabled with "a2disconf".
|
||||
#Include conf-available/serve-cgi-bin.conf
|
||||
</VirtualHost>
|
||||
|
||||
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
|
||||
4
.dockerignore
Normal file
4
.dockerignore
Normal file
@@ -0,0 +1,4 @@
|
||||
# Ignore files that aren't required to be in the build context when building images
|
||||
/var/log/*
|
||||
/var/cache/*
|
||||
/Dockerfile
|
||||
106
Dockerfile
106
Dockerfile
@@ -1,38 +1,80 @@
|
||||
FROM php:7.2-apache
|
||||
FROM ubuntu:latest
|
||||
LABEL maintainer="akshay.kumar758@webkul.com"
|
||||
|
||||
# Install dependencies
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y \
|
||||
libc-client-dev \
|
||||
libkrb5-dev \
|
||||
git \
|
||||
zip \
|
||||
&& rm -r /var/lib/apt/lists/*
|
||||
ENV GOSU_VERSION 1.11
|
||||
|
||||
# Enable PHP extensions
|
||||
RUN docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
|
||||
&& docker-php-ext-install imap \
|
||||
&& docker-php-ext-install mysqli \
|
||||
&& a2enmod rewrite
|
||||
RUN adduser uvdesk -q --disabled-password --gecos ""
|
||||
|
||||
# Install PECL extensions
|
||||
RUN pecl install \
|
||||
mailparse \
|
||||
&& docker-php-ext-enable \
|
||||
mailparse
|
||||
# Install base supplimentary packages
|
||||
RUN apt-get update && apt-get -y upgrade \
|
||||
&& apt-get update && apt-get install -y software-properties-common \
|
||||
&& apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install \
|
||||
curl \
|
||||
wget \
|
||||
git \
|
||||
unzip \
|
||||
apache2 \
|
||||
mysql-server \
|
||||
php7.2 \
|
||||
libapache2-mod-php7.2 \
|
||||
php-xml \
|
||||
php7.2-imap \
|
||||
php7.2-mysql \
|
||||
php-mailparse \
|
||||
ca-certificates; \
|
||||
if ! command -v gpg; then \
|
||||
apt-get install -y --no-install-recommends gnupg2 dirmngr; \
|
||||
elif gpg --version | grep -q '^gpg (GnuPG) 1\.'; then \
|
||||
apt-get install -y --no-install-recommends gnupg-curl; \
|
||||
fi;
|
||||
|
||||
# Install application
|
||||
COPY ./.docker/config/apache2/env /etc/apache2/envvars
|
||||
COPY ./.docker/config/apache2/httpd.conf /etc/apache2/apache2.conf
|
||||
COPY ./.docker/config/apache2/vhost.conf /etc/apache2/sites-available/000-default.conf
|
||||
COPY ./.docker/bash/uvdesk-entrypoint.sh /usr/local/bin/
|
||||
COPY . /var/www/uvdesk/
|
||||
|
||||
RUN \
|
||||
# Update apache configurations
|
||||
a2enmod php7.2 rewrite; \
|
||||
chmod +x /usr/local/bin/uvdesk-entrypoint.sh; \
|
||||
# Install gosu for stepping-down from root to a non-privileged user during container startup
|
||||
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
|
||||
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch" \
|
||||
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
|
||||
# Verify gosu installation
|
||||
export GNUPGHOME="$(mktemp -d)" \
|
||||
&& gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
|
||||
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
|
||||
&& gpgconf --kill all \
|
||||
&& chmod +x /usr/local/bin/gosu \
|
||||
&& gosu nobody true; \
|
||||
\
|
||||
# Download and verify composer installer signature
|
||||
wget -O /usr/local/bin/composer.php "https://getcomposer.org/installer"; \
|
||||
actualSig="$(wget -q -O - https://composer.github.io/installer.sig)"; \
|
||||
currentSig="$(shasum -a 384 /usr/local/bin/composer.php | awk '{print $1}')"; \
|
||||
if [ "$currentSig" != "$actualSig" ]; then \
|
||||
echo "Warning: Failed to verify composer signature."; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
# Install composer
|
||||
php /usr/local/bin/composer.php --quiet --filename=/usr/local/bin/composer \
|
||||
&& chmod +x /usr/local/bin/composer; \
|
||||
# Assign user uvdesk the ownership of source directory
|
||||
chown -R uvdesk:uvdesk /var/www; \
|
||||
# Clean up files
|
||||
rm -rf \
|
||||
"$GNUPGHOME" \
|
||||
/var/lib/apt/lists/* \
|
||||
/usr/local/bin/gosu.asc \
|
||||
/usr/local/bin/composer.php \
|
||||
/var/www/bin \
|
||||
/var/www/html \
|
||||
/var/www/uvdesk/.docker;
|
||||
|
||||
# Change working directory to uvdesk source
|
||||
WORKDIR /var/www
|
||||
RUN rm -rf /var/www/html
|
||||
COPY . /var/www/
|
||||
RUN chown -R www-data:www-data /var/www \
|
||||
&& ln -s public html
|
||||
|
||||
# Install composer dependencies
|
||||
USER www-data
|
||||
RUN curl -sS https://getcomposer.org/installer | php -- \
|
||||
&& php composer.phar install \
|
||||
&& rm -f composer.phar
|
||||
|
||||
USER root
|
||||
EXPOSE 80
|
||||
ENTRYPOINT ["uvdesk-entrypoint.sh"]
|
||||
CMD ["/bin/bash"]
|
||||
Reference in New Issue
Block a user