From 97051f1fa516dee5d0ed7b7f3555697fca1096bd Mon Sep 17 00:00:00 2001 From: David Hoese <david.hoese@ssec.wisc.edu> Date: Fri, 25 Oct 2019 12:39:10 -0500 Subject: [PATCH] Get working apache with mapserver cgi-bin --- mapserver/Dockerfile | 167 ++++--------------------------- mapserver/apache-conf | 227 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 248 insertions(+), 146 deletions(-) create mode 100644 mapserver/apache-conf diff --git a/mapserver/Dockerfile b/mapserver/Dockerfile index 702d5a7..d60247e 100644 --- a/mapserver/Dockerfile +++ b/mapserver/Dockerfile @@ -54,164 +54,39 @@ RUN mkdir -p /build/mapserver && \ # pgbouncer # apache -# Copied from https://github.com/docker-library/httpd/blob/master/2.4/Dockerfile -############################################################## -#FROM debian:buster-slim - +# http://www.inanzzz.com/index.php/post/rhsb/running-apache-server-as-foreground-on-ubuntu-with-dockerfile # add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added +ENV APACHE_RUN_USER www-data +ENV APACHE_RUN_GROUP www-data +ENV APACHE_LOCK_DIR /var/lock/apache2 +ENV APACHE_LOG_DIR /var/log/apache2 +ENV APACHE_PID_FILE /var/run/apache2/apache2.pid +ENV APACHE_SERVER_NAME localhost #RUN groupadd -r www-data && useradd -r --create-home -g www-data www-data -ENV HTTPD_PREFIX /usr/local/apache2 -ENV PATH $HTTPD_PREFIX/bin:$PATH -RUN mkdir -p "$HTTPD_PREFIX" \ - && chown www-data:www-data "$HTTPD_PREFIX" -WORKDIR $HTTPD_PREFIX - # install httpd runtime dependencies # https://httpd.apache.org/docs/2.4/install.html#requirements -RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - libapr1-dev \ - libaprutil1-dev \ - libaprutil1-ldap \ - ; \ +RUN apt-get -y install apache2 && \ + ls /etc/apache2/mods-available && \ + ls /etc/apache2/mods-enabled && \ + apt-get -y install libapache2-mod-php7.3 php7.3-common php7.3-cli php7.3-fpm php7.3 && \ + a2enmod actions proxy_fcgi setenvif cgi && \ + a2enconf php7.3-fpm && \ + apt-get -y clean && \ rm -rf /var/lib/apt/lists/* -ENV HTTPD_VERSION 2.4.41 -ENV HTTPD_SHA256 133d48298fe5315ae9366a0ec66282fa4040efa5d566174481077ade7d18ea40 - -# https://httpd.apache.org/security/vulnerabilities_24.html -ENV HTTPD_PATCHES="" - -# see https://httpd.apache.org/docs/2.4/install.html#requirements -RUN set -eux; \ - \ - # mod_http2 mod_lua mod_proxy_html mod_xml2enc - # https://anonscm.debian.org/cgit/pkg-apache/apache2.git/tree/debian/control?id=adb6f181257af28ee67af15fc49d2699a0080d4c - savedAptMark="$(apt-mark showmanual)"; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - bzip2 \ - ca-certificates \ - dirmngr \ - dpkg-dev \ - gcc \ - gnupg \ - libbrotli-dev \ - libcurl4-openssl-dev \ - libjansson-dev \ - liblua5.2-dev \ - libnghttp2-dev \ - libpcre3-dev \ - libssl-dev \ - libxml2-dev \ - make \ - wget \ - zlib1g-dev \ - ; \ - rm -r /var/lib/apt/lists/*; \ - \ - ddist() { \ - local f="$1"; shift; \ - local distFile="$1"; shift; \ - local success=; \ - local distUrl=; \ - for distUrl in \ -# https://issues.apache.org/jira/browse/INFRA-8753?focusedCommentId=14735394#comment-14735394 - 'https://www.apache.org/dyn/closer.cgi?action=download&filename=' \ -# if the version is outdated (or we're grabbing the .asc file), we might have to pull from the dist/archive :/ - https://www-us.apache.org/dist/ \ - https://www.apache.org/dist/ \ - https://archive.apache.org/dist/ \ - ; do \ - if wget -O "$f" "$distUrl$distFile" && [ -s "$f" ]; then \ - success=1; \ - break; \ - fi; \ - done; \ - [ -n "$success" ]; \ - }; \ - \ - ddist 'httpd.tar.bz2' "httpd/httpd-$HTTPD_VERSION.tar.bz2"; \ - echo "$HTTPD_SHA256 *httpd.tar.bz2" | sha256sum -c -; \ - \ -# see https://httpd.apache.org/download.cgi#verify - ddist 'httpd.tar.bz2.asc' "httpd/httpd-$HTTPD_VERSION.tar.bz2.asc"; \ - export GNUPGHOME="$(mktemp -d)"; \ - for key in \ -# gpg: key 791485A8: public key "Jim Jagielski (Release Signing Key) <jim@apache.org>" imported - A93D62ECC3C8EA12DB220EC934EA76E6791485A8 \ -# gpg: key 995E35221AD84DFF: public key "Daniel Ruggeri (https://home.apache.org/~druggeri/) <druggeri@apache.org>" imported - B9E8213AEFB861AF35A41F2C995E35221AD84DFF \ - ; do \ - gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ - done; \ - gpg --batch --verify httpd.tar.bz2.asc httpd.tar.bz2; \ - command -v gpgconf && gpgconf --kill all || :; \ - rm -rf "$GNUPGHOME" httpd.tar.bz2.asc; \ - \ - mkdir -p src; \ - tar -xf httpd.tar.bz2 -C src --strip-components=1; \ - rm httpd.tar.bz2; \ - cd src; \ - \ - patches() { \ - while [ "$#" -gt 0 ]; do \ - local patchFile="$1"; shift; \ - local patchSha256="$1"; shift; \ - ddist "$patchFile" "httpd/patches/apply_to_$HTTPD_VERSION/$patchFile"; \ - echo "$patchSha256 *$patchFile" | sha256sum -c -; \ - patch -p0 < "$patchFile"; \ - rm -f "$patchFile"; \ - done; \ - }; \ - patches $HTTPD_PATCHES; \ - \ - gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ - ./configure \ - --build="$gnuArch" \ - --prefix="$HTTPD_PREFIX" \ - --enable-mods-shared=reallyall \ - --enable-mpms-shared=all \ - ; \ - make -j "$(nproc)"; \ - make install; \ - \ - cd ..; \ - rm -r src man manual; \ - \ - sed -ri \ - -e 's!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g' \ - -e 's!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g' \ - -e 's!^(\s*TransferLog)\s+\S+!\1 /proc/self/fd/1!g' \ - "$HTTPD_PREFIX/conf/httpd.conf" \ - "$HTTPD_PREFIX/conf/extra/httpd-ssl.conf" \ - ; \ - \ -# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies - apt-mark auto '.*' > /dev/null; \ - [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \ - find /usr/local -type f -executable -exec ldd '{}' ';' \ - | awk '/=>/ { print $(NF-1) }' \ - | sort -u \ - | xargs -r dpkg-query --search \ - | cut -d: -f1 \ - | sort -u \ - | xargs -r apt-mark manual \ - ; \ - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - \ -# smoke test - httpd -v +COPY apache-conf /etc/apache2/apache2.conf + +# Point apache to the mapserver binary +RUN ln -s /usr/local/bin/mapserv /usr/lib/cgi-bin/mapserv && \ + chown ${APACHE_RUN_USER}:${APACHE_RUN_GROUP} /usr/lib/cgi-bin/mapserv && \ + chown -h ${APACHE_RUN_USER}:${APACHE_RUN_GROUP} /usr/lib/cgi-bin/mapserv # https://httpd.apache.org/docs/2.4/stopping.html#gracefulstop STOPSIGNAL WINCH -COPY httpd-foreground /usr/local/bin/ - EXPOSE 80 -CMD ["httpd-foreground"] +CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"] ############################################################## diff --git a/mapserver/apache-conf b/mapserver/apache-conf new file mode 100644 index 0000000..2560da5 --- /dev/null +++ b/mapserver/apache-conf @@ -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/> + Options Indexes FollowSymLinks + AllowOverride None + 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 \ No newline at end of file -- GitLab