From ba9e20b97d7fdfbc3fed631cce5145b2d0e9c2cb Mon Sep 17 00:00:00 2001 From: Ian Holsman Date: Fri, 13 Feb 2015 13:31:06 -0600 Subject: [PATCH 1/3] add log rotation --- Dockerfile | 7 ++ build.sh | 1 + config/000-default.config | 33 +++++++ config/default-ssl.conf | 136 ++++++++++++++++++++++++++++ config/other-vhosts-access-log.conf | 4 + 5 files changed, 181 insertions(+) create mode 100644 build.sh create mode 100644 config/000-default.config create mode 100644 config/default-ssl.conf create mode 100644 config/other-vhosts-access-log.conf diff --git a/Dockerfile b/Dockerfile index 6f4b065d..b6e3e966 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,6 +17,11 @@ RUN apt-get update && \ RUN sed -i "s/variables_order.*/variables_order = \"EGPCS\"/g" /etc/php5/apache2/php.ini RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +# override default logging configs and enable log roation +ADD config/000-default.config /etc/apache2/sites-available/000-default.config +ADD config/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf +ADD config/other-vhosts-access-log.conf /etc/apache2/conf-available/default-ssl.conf + # Add image configuration and scripts ADD run.sh /run.sh RUN chmod 755 /*.sh @@ -27,4 +32,6 @@ ADD sample/ /app EXPOSE 80 WORKDIR /app +# for log cleanup/access +VOLUME /var/log/apache2 CMD ["/run.sh"] diff --git a/build.sh b/build.sh new file mode 100644 index 00000000..2ba0a105 --- /dev/null +++ b/build.sh @@ -0,0 +1 @@ +docker build -t kryton/apache-php . diff --git a/config/000-default.config b/config/000-default.config new file mode 100644 index 00000000..03eec157 --- /dev/null +++ b/config/000-default.config @@ -0,0 +1,33 @@ +# Every 24 hours +ErrorLog "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/error.log.%Y%m%d%H%M%S 86400" + + # 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/html + + # 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 "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/error.log.%Y%m%d%H%M%S 86400" + CustomLog "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/access.log.%Y%m%d%H%M%S 86400" 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 + + +# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/config/default-ssl.conf b/config/default-ssl.conf new file mode 100644 index 00000000..0d787eb4 --- /dev/null +++ b/config/default-ssl.conf @@ -0,0 +1,136 @@ + + + ServerAdmin webmaster@localhost + + DocumentRoot /var/www/html + + # 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 "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/error.log.%Y%m%d%H%M%S 86400" + CustomLog "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/access.log.%Y%m%d%H%M%S 86400" 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 + + # SSL Engine Switch: + # Enable/Disable SSL for this virtual host. + SSLEngine on + + # A self-signed (snakeoil) certificate can be created by installing + # the ssl-cert package. See + # /usr/share/doc/apache2/README.Debian.gz for more info. + # If both key and certificate are stored in the same file, only the + # SSLCertificateFile directive is needed. + SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem + SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key + + # Server Certificate Chain: + # Point SSLCertificateChainFile at a file containing the + # concatenation of PEM encoded CA certificates which form the + # certificate chain for the server certificate. Alternatively + # the referenced file can be the same as SSLCertificateFile + # when the CA certificates are directly appended to the server + # certificate for convinience. + #SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt + + # Certificate Authority (CA): + # Set the CA certificate verification path where to find CA + # certificates for client authentication or alternatively one + # huge file containing all of them (file must be PEM encoded) + # Note: Inside SSLCACertificatePath you need hash symlinks + # to point to the certificate files. Use the provided + # Makefile to update the hash symlinks after changes. + #SSLCACertificatePath /etc/ssl/certs/ + #SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt + + # Certificate Revocation Lists (CRL): + # Set the CA revocation path where to find CA CRLs for client + # authentication or alternatively one huge file containing all + # of them (file must be PEM encoded) + # Note: Inside SSLCARevocationPath you need hash symlinks + # to point to the certificate files. Use the provided + # Makefile to update the hash symlinks after changes. + #SSLCARevocationPath /etc/apache2/ssl.crl/ + #SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl + + # Client Authentication (Type): + # Client certificate verification type and depth. Types are + # none, optional, require and optional_no_ca. Depth is a + # number which specifies how deeply to verify the certificate + # issuer chain before deciding the certificate is not valid. + #SSLVerifyClient require + #SSLVerifyDepth 10 + + # SSL Engine Options: + # Set various options for the SSL engine. + # o FakeBasicAuth: + # Translate the client X.509 into a Basic Authorisation. This means that + # the standard Auth/DBMAuth methods can be used for access control. The + # user name is the `one line' version of the client's X.509 certificate. + # Note that no password is obtained from the user. Every entry in the user + # file needs this password: `xxj31ZMTZzkVA'. + # o ExportCertData: + # This exports two additional environment variables: SSL_CLIENT_CERT and + # SSL_SERVER_CERT. These contain the PEM-encoded certificates of the + # server (always existing) and the client (only existing when client + # authentication is used). This can be used to import the certificates + # into CGI scripts. + # o StdEnvVars: + # This exports the standard SSL/TLS related `SSL_*' environment variables. + # Per default this exportation is switched off for performance reasons, + # because the extraction step is an expensive operation and is usually + # useless for serving static content. So one usually enables the + # exportation for CGI and SSI requests only. + # o OptRenegotiate: + # This enables optimized SSL connection renegotiation handling when SSL + # directives are used in per-directory context. + #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire + + SSLOptions +StdEnvVars + + + SSLOptions +StdEnvVars + + + # SSL Protocol Adjustments: + # The safe and default but still SSL/TLS standard compliant shutdown + # approach is that mod_ssl sends the close notify alert but doesn't wait for + # the close notify alert from client. When you need a different shutdown + # approach you can use one of the following variables: + # o ssl-unclean-shutdown: + # This forces an unclean shutdown when the connection is closed, i.e. no + # SSL close notify alert is send or allowed to received. This violates + # the SSL/TLS standard but is needed for some brain-dead browsers. Use + # this when you receive I/O errors because of the standard approach where + # mod_ssl sends the close notify alert. + # o ssl-accurate-shutdown: + # This forces an accurate shutdown when the connection is closed, i.e. a + # SSL close notify alert is send and mod_ssl waits for the close notify + # alert of the client. This is 100% SSL/TLS standard compliant, but in + # practice often causes hanging connections with brain-dead browsers. Use + # this only for browsers where you know that their SSL implementation + # works correctly. + # Notice: Most problems of broken clients are also related to the HTTP + # keep-alive facility, so you usually additionally want to disable + # keep-alive for those clients, too. Use variable "nokeepalive" for this. + # Similarly, one has to force some clients to use HTTP/1.0 to workaround + # their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and + # "force-response-1.0" for this. + BrowserMatch "MSIE [2-6]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + # MSIE 7 and newer should be able to use keepalive + BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown + + + + +# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/config/other-vhosts-access-log.conf b/config/other-vhosts-access-log.conf new file mode 100644 index 00000000..224ff34e --- /dev/null +++ b/config/other-vhosts-access-log.conf @@ -0,0 +1,4 @@ +# Define an access log for VirtualHosts that don't define their own logfile +CustomLog "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/other_vhosts_access.log.%Y%m%d%H%M%S 86400" vhost_combined + +# vim: syntax=apache ts=4 sw=4 sts=4 sr noet From 453e7988065698a75be804d60c4051c01a6e9733 Mon Sep 17 00:00:00 2001 From: Ian Holsman Date: Tue, 17 Feb 2015 17:07:11 -0600 Subject: [PATCH 2/3] yay log rotation --- Dockerfile | 5 +++-- build.sh | 0 config/{000-default.config => 000-default.conf} | 6 +++--- config/default-ssl.conf | 4 ++-- config/other-vhosts-access-log.conf | 2 +- run.sh | 5 +---- 6 files changed, 10 insertions(+), 12 deletions(-) mode change 100644 => 100755 build.sh rename config/{000-default.config => 000-default.conf} (83%) diff --git a/Dockerfile b/Dockerfile index b6e3e966..33d6df3c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,7 @@ RUN apt-get update && \ apt-get -yq install \ curl \ apache2 \ + apache2-utils \ libapache2-mod-php5 \ php5-mysql \ php5-gd \ @@ -18,7 +19,7 @@ RUN sed -i "s/variables_order.*/variables_order = \"EGPCS\"/g" /etc/php5/apache2 RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer # override default logging configs and enable log roation -ADD config/000-default.config /etc/apache2/sites-available/000-default.config +ADD config/000-default.conf /etc/apache2/sites-available/000-default.conf ADD config/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf ADD config/other-vhosts-access-log.conf /etc/apache2/conf-available/default-ssl.conf @@ -33,5 +34,5 @@ ADD sample/ /app EXPOSE 80 WORKDIR /app # for log cleanup/access -VOLUME /var/log/apache2 +VOLUME [ "/var/log/apache2" ] CMD ["/run.sh"] diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 diff --git a/config/000-default.config b/config/000-default.conf similarity index 83% rename from config/000-default.config rename to config/000-default.conf index 03eec157..533e15a9 100644 --- a/config/000-default.config +++ b/config/000-default.conf @@ -1,5 +1,5 @@ # Every 24 hours -ErrorLog "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/error.log.%Y%m%d%H%M%S 86400" +ErrorLog "||/usr/bin/rotatelogs ${APACHE_LOG_DIR}/error.log.%Y%m%d%H%M%S 86400" # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating @@ -19,8 +19,8 @@ ErrorLog "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/error.log.%Y%m%d%H%M%S 86400 # modules, e.g. #LogLevel info ssl:warn - ErrorLog "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/error.log.%Y%m%d%H%M%S 86400" - CustomLog "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/access.log.%Y%m%d%H%M%S 86400" combined + ErrorLog "||/usr/bin/rotatelogs ${APACHE_LOG_DIR}/error.log.%Y%m%d%H%M%S 86400" + CustomLog "||/usr/bin/rotatelogs ${APACHE_LOG_DIR}/access.log.%Y%m%d%H%M%S 86400" combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to diff --git a/config/default-ssl.conf b/config/default-ssl.conf index 0d787eb4..1b3e902d 100644 --- a/config/default-ssl.conf +++ b/config/default-ssl.conf @@ -10,8 +10,8 @@ # modules, e.g. #LogLevel info ssl:warn - ErrorLog "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/error.log.%Y%m%d%H%M%S 86400" - CustomLog "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/access.log.%Y%m%d%H%M%S 86400" combined + ErrorLog "||/usr/bin/rotatelogs ${APACHE_LOG_DIR}/error.log.%Y%m%d%H%M%S 86400" + CustomLog "||/usr/bin/rotatelogs ${APACHE_LOG_DIR}/access.log.%Y%m%d%H%M%S 86400" combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to diff --git a/config/other-vhosts-access-log.conf b/config/other-vhosts-access-log.conf index 224ff34e..71d75fe8 100644 --- a/config/other-vhosts-access-log.conf +++ b/config/other-vhosts-access-log.conf @@ -1,4 +1,4 @@ # Define an access log for VirtualHosts that don't define their own logfile -CustomLog "||/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/other_vhosts_access.log.%Y%m%d%H%M%S 86400" vhost_combined +CustomLog "||/usr/bin/rotatelogs ${APACHE_LOG_DIR}/other_vhosts_access.log.%Y%m%d%H%M%S 86400" vhost_combined # vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/run.sh b/run.sh index 6a0f5d93..547dde0e 100644 --- a/run.sh +++ b/run.sh @@ -1,4 +1 @@ -#!/bin/bash -chown www-data:www-data /app -R -source /etc/apache2/envvars -exec apache2 -D FOREGROUND + docker run --name ap -p 80:80 -v /opt/wiki/logs:/var/log/apache2 -d kryton/apache-php From ba6fa12a026eca35ad6bbb3b734cce23ad08341e Mon Sep 17 00:00:00 2001 From: Ian Holsman Date: Fri, 20 Feb 2015 07:42:55 -0600 Subject: [PATCH 3/3] revert run.sh --- run.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/run.sh b/run.sh index 547dde0e..6a0f5d93 100644 --- a/run.sh +++ b/run.sh @@ -1 +1,4 @@ - docker run --name ap -p 80:80 -v /opt/wiki/logs:/var/log/apache2 -d kryton/apache-php +#!/bin/bash +chown www-data:www-data /app -R +source /etc/apache2/envvars +exec apache2 -D FOREGROUND