-
-
Notifications
You must be signed in to change notification settings - Fork 284
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update Nginx installation from latest official image
as now Python 3.5 is also based on Debian Stretch
- Loading branch information
Showing
1 changed file
with
90 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,22 +5,100 @@ LABEL maintainer="Sebastian Ramirez <[email protected]>" | |
# Install uWSGI | ||
RUN pip install uwsgi | ||
|
||
# There is no longer an official Nginx Docker image for Debian Jessie, only for Debian Stretch, | ||
# but the official Python 3.5 image is only available in Debian Jessie, | ||
# so, here's an updated custom Nginx installation, based on the last official Jessie Nginx image | ||
# Installation reference: https://www.nginx.com/resources/wiki/start/topics/tutorials/install/ | ||
# Packages repo: http://nginx.org/packages/debian/dists/jessie/ | ||
ENV NGINX_VERSION 1.15.0-1~jessie | ||
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62 \ | ||
&& echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \ | ||
# Standard set up Nginx | ||
ENV NGINX_VERSION 1.13.12-1~stretch | ||
ENV NJS_VERSION 1.13.12.0.2.0-1~stretch | ||
|
||
RUN set -x \ | ||
&& apt-get update \ | ||
&& apt-get install -y ca-certificates nginx=${NGINX_VERSION} gettext-base \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
&& apt-get install --no-install-recommends --no-install-suggests -y gnupg1 apt-transport-https ca-certificates \ | ||
&& \ | ||
NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; \ | ||
found=''; \ | ||
for server in \ | ||
ha.pool.sks-keyservers.net \ | ||
hkp://keyserver.ubuntu.com:80 \ | ||
hkp://p80.pool.sks-keyservers.net:80 \ | ||
pgp.mit.edu \ | ||
; do \ | ||
echo "Fetching GPG key $NGINX_GPGKEY from $server"; \ | ||
apt-key adv --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; \ | ||
done; \ | ||
test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; \ | ||
apt-get remove --purge --auto-remove -y gnupg1 && rm -rf /var/lib/apt/lists/* \ | ||
&& dpkgArch="$(dpkg --print-architecture)" \ | ||
&& nginxPackages=" \ | ||
nginx=${NGINX_VERSION} \ | ||
nginx-module-xslt=${NGINX_VERSION} \ | ||
nginx-module-geoip=${NGINX_VERSION} \ | ||
nginx-module-image-filter=${NGINX_VERSION} \ | ||
nginx-module-njs=${NJS_VERSION} \ | ||
" \ | ||
&& case "$dpkgArch" in \ | ||
amd64|i386) \ | ||
# arches officialy built by upstream | ||
echo "deb https://nginx.org/packages/mainline/debian/ stretch nginx" >> /etc/apt/sources.list.d/nginx.list \ | ||
&& apt-get update \ | ||
;; \ | ||
*) \ | ||
# we're on an architecture upstream doesn't officially build for | ||
# let's build binaries from the published source packages | ||
echo "deb-src https://nginx.org/packages/mainline/debian/ stretch nginx" >> /etc/apt/sources.list.d/nginx.list \ | ||
\ | ||
# new directory for storing sources and .deb files | ||
&& tempDir="$(mktemp -d)" \ | ||
&& chmod 777 "$tempDir" \ | ||
# (777 to ensure APT's "_apt" user can access it too) | ||
\ | ||
# save list of currently-installed packages so build dependencies can be cleanly removed later | ||
&& savedAptMark="$(apt-mark showmanual)" \ | ||
\ | ||
# build .deb files from upstream's source packages (which are verified by apt-get) | ||
&& apt-get update \ | ||
&& apt-get build-dep -y $nginxPackages \ | ||
&& ( \ | ||
cd "$tempDir" \ | ||
&& DEB_BUILD_OPTIONS="nocheck parallel=$(nproc)" \ | ||
apt-get source --compile $nginxPackages \ | ||
) \ | ||
# we don't remove APT lists here because they get re-downloaded and removed later | ||
\ | ||
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies | ||
# (which is done after we install the built packages so we don't have to redownload any overlapping dependencies) | ||
&& apt-mark showmanual | xargs apt-mark auto > /dev/null \ | ||
&& { [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; } \ | ||
\ | ||
# create a temporary local APT repo to install from (so that dependency resolution can be handled by APT, as it should be) | ||
&& ls -lAFh "$tempDir" \ | ||
&& ( cd "$tempDir" && dpkg-scanpackages . > Packages ) \ | ||
&& grep '^Package: ' "$tempDir/Packages" \ | ||
&& echo "deb [ trusted=yes ] file://$tempDir ./" > /etc/apt/sources.list.d/temp.list \ | ||
# work around the following APT issue by using "Acquire::GzipIndexes=false" (overriding "/etc/apt/apt.conf.d/docker-gzip-indexes") | ||
# Could not open file /var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages - open (13: Permission denied) | ||
# ... | ||
# E: Failed to fetch store:/var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages Could not open file /var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages - open (13: Permission denied) | ||
&& apt-get -o Acquire::GzipIndexes=false update \ | ||
;; \ | ||
esac \ | ||
\ | ||
&& apt-get install --no-install-recommends --no-install-suggests -y \ | ||
$nginxPackages \ | ||
gettext-base \ | ||
&& rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx.list \ | ||
\ | ||
# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) | ||
&& if [ -n "$tempDir" ]; then \ | ||
apt-get purge -y --auto-remove \ | ||
&& rm -rf "$tempDir" /etc/apt/sources.list.d/temp.list; \ | ||
fi | ||
|
||
# forward request and error logs to docker log collector | ||
RUN ln -sf /dev/stdout /var/log/nginx/access.log \ | ||
&& ln -sf /dev/stderr /var/log/nginx/error.log | ||
EXPOSE 80 443 | ||
# Finished setting up Nginx | ||
EXPOSE 80 | ||
# Removed the section that breaks pip installations | ||
# && apt-get remove --purge --auto-remove -y apt-transport-https ca-certificates | ||
# Standard set up Nginx finished | ||
|
||
# Make NGINX run on the foreground | ||
RUN echo "daemon off;" >> /etc/nginx/nginx.conf | ||
|