| ARG ALPINE_VERSION=3.8 |
| |
| ######################## |
| # Build pagespeed psol # |
| ######################## |
| FROM alpine:$ALPINE_VERSION as pagespeed |
| |
| # Check https://github.com/apache/incubator-pagespeed-mod/tags |
| ARG MOD_PAGESPEED_TAG=v1.13.35.2 |
| |
| RUN apk add --no-cache \ |
| apache2-dev \ |
| apr-dev \ |
| apr-util-dev \ |
| build-base \ |
| curl \ |
| gettext-dev \ |
| git \ |
| gperf \ |
| icu-dev \ |
| libjpeg-turbo-dev \ |
| libpng-dev \ |
| libressl-dev \ |
| pcre-dev \ |
| py-setuptools \ |
| zlib-dev \ |
| ; |
| |
| WORKDIR /usr/src |
| RUN git clone -b ${MOD_PAGESPEED_TAG} \ |
| --recurse-submodules \ |
| --depth=1 \ |
| -c advice.detachedHead=false \ |
| -j`nproc` \ |
| https://github.com/apache/incubator-pagespeed-mod.git \ |
| modpagespeed \ |
| ; |
| |
| WORKDIR /usr/src/modpagespeed |
| |
| COPY patches/modpagespeed/*.patch ./ |
| |
| RUN for i in *.patch; do printf "\r\nApplying patch ${i%%.*}\r\n"; patch -p1 < $i || exit 1; done |
| |
| WORKDIR /usr/src/modpagespeed/tools/gyp |
| RUN ./setup.py install |
| |
| WORKDIR /usr/src/modpagespeed |
| |
| RUN build/gyp_chromium --depth=. \ |
| -D use_system_libs=1 \ |
| && \ |
| cd /usr/src/modpagespeed/pagespeed/automatic && \ |
| make psol BUILDTYPE=Release \ |
| CFLAGS+="-I/usr/include/apr-1" \ |
| CXXFLAGS+="-I/usr/include/apr-1 -DUCHAR_TYPE=uint16_t" \ |
| -j`nproc` \ |
| ; |
| |
| RUN mkdir -p /usr/src/ngxpagespeed/psol/lib/Release/linux/x64 && \ |
| mkdir -p /usr/src/ngxpagespeed/psol/include/out/Release && \ |
| cp -R out/Release/obj /usr/src/ngxpagespeed/psol/include/out/Release/ && \ |
| cp -R pagespeed/automatic/pagespeed_automatic.a /usr/src/ngxpagespeed/psol/lib/Release/linux/x64/ && \ |
| cp -R net \ |
| pagespeed \ |
| testing \ |
| third_party \ |
| url \ |
| /usr/src/ngxpagespeed/psol/include/ \ |
| ; |
| |
| |
| ########################################## |
| # Build Nginx with support for PageSpeed # |
| ########################################## |
| FROM alpine:$ALPINE_VERSION AS nginx |
| |
| # Check https://github.com/apache/incubator-pagespeed-ngx/tags |
| ARG NGX_PAGESPEED_TAG=v1.13.35.2-stable |
| |
| # Check http://nginx.org/en/download.html for the latest version. |
| ARG NGINX_VERSION=1.14.1 |
| ARG NGINX_PGPKEY=520A9993A1C052F8 |
| ARG NGINX_BUILD_CONFIG="\ |
| --prefix=/etc/nginx \ |
| --sbin-path=/usr/sbin/nginx \ |
| --modules-path=/usr/lib/nginx/modules \ |
| --conf-path=/etc/nginx/nginx.conf \ |
| --error-log-path=/var/log/nginx/error.log \ |
| --http-log-path=/var/log/nginx/access.log \ |
| --pid-path=/var/run/nginx.pid \ |
| --lock-path=/var/run/nginx.lock \ |
| --http-client-body-temp-path=/var/cache/nginx/client_temp \ |
| --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ |
| --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ |
| --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ |
| --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ |
| --user=nginx \ |
| --group=nginx \ |
| --with-http_ssl_module \ |
| --with-http_realip_module \ |
| --with-http_addition_module \ |
| --with-http_sub_module \ |
| --with-http_dav_module \ |
| --with-http_flv_module \ |
| --with-http_mp4_module \ |
| --with-http_gunzip_module \ |
| --with-http_gzip_static_module \ |
| --with-http_random_index_module \ |
| --with-http_secure_link_module \ |
| --with-http_stub_status_module \ |
| --with-http_auth_request_module \ |
| --with-http_xslt_module=dynamic \ |
| --with-http_image_filter_module=dynamic \ |
| --with-http_geoip_module=dynamic \ |
| --with-threads \ |
| --with-stream \ |
| --with-stream_ssl_module \ |
| --with-stream_ssl_preread_module \ |
| --with-stream_realip_module \ |
| --with-stream_geoip_module=dynamic \ |
| --with-http_slice_module \ |
| --with-mail \ |
| --with-mail_ssl_module \ |
| --with-compat \ |
| --with-file-aio \ |
| --with-http_v2_module \ |
| " |
| |
| RUN apk add --no-cache \ |
| apr-dev \ |
| apr-util-dev \ |
| build-base \ |
| ca-certificates \ |
| gd-dev \ |
| geoip-dev \ |
| git \ |
| gnupg \ |
| icu-dev \ |
| libjpeg-turbo-dev \ |
| libpng-dev \ |
| libxslt-dev \ |
| linux-headers \ |
| libressl-dev \ |
| pcre-dev \ |
| tar \ |
| zlib-dev \ |
| ; |
| |
| WORKDIR /usr/src |
| RUN git clone -b ${NGX_PAGESPEED_TAG} \ |
| --recurse-submodules \ |
| --shallow-submodules \ |
| --depth=1 \ |
| -c advice.detachedHead=false \ |
| -j`nproc` \ |
| https://github.com/apache/incubator-pagespeed-ngx.git \ |
| ngxpagespeed \ |
| ; |
| |
| RUN wget https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz \ |
| https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz.asc && \ |
| (gpg --keyserver ha.pool.sks-keyservers.net --keyserver-options timeout=10 --recv-keys ${NGINX_PGPKEY} || \ |
| gpg --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-options timeout=10 --recv-keys ${NGINX_PGPKEY} || \ |
| gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --keyserver-options timeout=10 --recv-keys $NGINX_PGPKEY} ) && \ |
| gpg --trusted-key ${NGINX_PGPKEY} --verify nginx-${NGINX_VERSION}.tar.gz.asc |
| |
| COPY --from=pagespeed /usr/src/ngxpagespeed /usr/src/ngxpagespeed/ |
| |
| WORKDIR /usr/src/nginx |
| |
| RUN tar zxf ../nginx-${NGINX_VERSION}.tar.gz --strip-components=1 -C . && \ |
| ./configure \ |
| ${NGINX_BUILD_CONFIG} \ |
| --add-module=/usr/src/ngxpagespeed \ |
| --with-ld-opt="-Wl,-z,relro,--start-group -lapr-1 -laprutil-1 -licudata -licuuc -lpng -lturbojpeg -ljpeg" \ |
| && \ |
| make install -j`nproc` |
| |
| RUN rm -rf /etc/nginx/html/ && \ |
| mkdir /etc/nginx/conf.d/ && \ |
| mkdir -p /usr/share/nginx/html/ && \ |
| sed -i 's|^</body>|<p><a href="https://www.ngxpagespeed.com/"><img src="pagespeed.png" title="Nginx module for rewriting web pages to reduce latency and bandwidth" /></a></p>\n</body>|' html/index.html && \ |
| install -m644 html/index.html /usr/share/nginx/html/ && \ |
| install -m644 html/50x.html /usr/share/nginx/html/ && \ |
| ln -s ../../usr/lib/nginx/modules /etc/nginx/modules && \ |
| strip /usr/sbin/nginx* \ |
| /usr/lib/nginx/modules/*.so \ |
| ; |
| |
| COPY conf/nginx.conf /etc/nginx/nginx.conf |
| COPY conf/nginx.vh.default.conf /etc/nginx/conf.d/default.conf |
| COPY pagespeed.png /usr/share/nginx/html/ |
| |
| |
| ########################################## |
| # Combine everything with minimal layers # |
| ########################################## |
| FROM alpine:$ALPINE_VERSION |
| LABEL maintainer="Nico Berlee <nico.berlee@on2it.net>" \ |
| version.mod-pagespeed="1.13.35.2" \ |
| version.nginx="1.14.1" \ |
| version.ngx-pagespeed="1.13.35.2" |
| |
| COPY --from=pagespeed /usr/bin/envsubst /usr/local/bin |
| COPY --from=nginx /usr/sbin/nginx /usr/sbin/nginx |
| COPY --from=nginx /usr/lib/nginx/modules/ /usr/lib/nginx/modules/ |
| COPY --from=nginx /etc/nginx /etc/nginx |
| COPY --from=nginx /usr/share/nginx/html/ /usr/share/nginx/html/ |
| |
| RUN apk --no-cache upgrade && \ |
| scanelf --needed --nobanner --format '%n#p' /usr/sbin/nginx /usr/lib/nginx/modules/*.so /usr/local/bin/envsubst \ |
| | tr ',' '\n' \ |
| | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ |
| | xargs apk add --no-cache \ |
| && \ |
| apk add --no-cache tzdata |
| |
| RUN addgroup -S nginx && \ |
| adduser -D -S -h /var/cache/nginx -s /sbin/nologin -G nginx nginx && \ |
| install -g nginx -o nginx -d /var/cache/ngx_pagespeed && \ |
| mkdir -p /var/log/nginx && \ |
| ln -sf /dev/stdout /var/log/nginx/access.log && \ |
| ln -sf /dev/stderr /var/log/nginx/error.log |
| |
| EXPOSE 80 |
| |
| STOPSIGNAL SIGTERM |
| |
| CMD ["/usr/sbin/nginx", "-g", "daemon off;"] |
| |