如何在 docker apache httpd 中安装 mod_pagespeed

How to install mod_pagespeed in docker apache httpd

我有一个基于 docker 的 apache httpd 服务器。我需要在其中安装 mod_pagespeed

出于某些原因,我目前使用的风格是基于 debian 的,而不是基于 alpine 的。

以下是在 debian/ubuntu dist 中安装模块所需的命令列表 - 来自官方网站

wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb
sudo dpkg -i mod-pagespeed-*.deb
sudo apt-get -f install

这是错误

dpkg: dependency problems prevent configuration of mod-pagespeed-stable:
 mod-pagespeed-stable depends on apache2; however:
  Package apache2 is not installed.

这很明显,因为没有安装 apache2 服务,只有 httpd 命令有效。

甚至文件夹结构也与常规 debian/ubuntu 安装不同。

我在任何地方都找不到任何 .so 文件,否则我可以将它放在某个目录中并执行 LoadModule.

我想我需要从源代码进行自定义构建,有什么简单的方法吗?

您可以使用以下 Dockerfile 作为基础:

FROM debian:stretch

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_PID_FILE /var/run/apache2/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV LANG C

RUN apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 wget \
    && wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb -O /tmp/modpagespeed.deb \
    && dpkg -i /tmp/modpagespeed.deb

RUN mkdir -p /var/log/apache2 /var/run/apache2 /var/lock/apache2 \
    && chown www-data:www-data /var/log/apache2 /var/run/apache2 /var/lock/apache2

CMD ["apache2", "-DFOREGROUND"]

EXPOSE 80

构建映像并启动容器,您将收到类似于 X-Mod-Pagespeed: 1.13.35.2-0 的响应 header。

希望对您有所帮助!

@Michael 的大部分回答是正确的,但是对于那些使用默认 docker 的 apache 模块(比如我)的人来说,下面的回答就足够了。

因为 debian 的 apache 安装与 docker apache 的安装不同。 (如果您已经 setup/customised 所有配置并且不能重新定制为 debian 的结构)

我根据该答案构建了 pagespeed 模块,然后将该模块复制到我的安装中。

Docker 文件

FROM debian:stretch as pagespeed

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_PID_FILE /var/run/apache2/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV LANG C

RUN apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 wget \
    && wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb -O /tmp/modpagespeed.deb \
    && dpkg -i /tmp/modpagespeed.deb

FROM httpd:2.4.43

# all these things are my custom configuration. You probably don't need these
COPY --chown=root:www-data ./docker-assets/httpd-custom.conf $HTTPD_PREFIX/conf/httpd.conf
COPY --chown=root:www-data ./docker-assets/httpd-default.conf $HTTPD_PREFIX/conf/extra/httpd-default.conf
COPY --chown=root:www-data ./docker-assets/httpd-vhosts-custom.conf $HTTPD_PREFIX/conf/extra/httpd-vhosts.conf
COPY --chown=root:www-data ./docker-assets/httpd-ssl.conf $HTTPD_PREFIX/conf/extra/httpd-ssl.conf
COPY --chown=root:www-data ./docker-assets/httpd-mpm.conf $HTTPD_PREFIX/conf/extra/httpd-mpm.conf

# pagespeed module adding as custom build here. You may need to change some paths in .load file
COPY --chown=root:www-data ./docker-assets/pagespeed.load $HTTPD_PREFIX/conf/extra/
COPY --chown=root:www-data ./docker-assets/pagespeed.conf $HTTPD_PREFIX/conf/extra/
COPY --chown=root:www-data ./docker-assets/pagespeed_libraries.conf $HTTPD_PREFIX/conf/extra/
# Or directly copy from build stage
# COPY --from=pagespeed --chown=root:www-data /etc/apache2/mods-available/pagespeed.conf $HTTPD_PREFIX/conf/extra/
# COPY --from=pagespeed --chown=root:www-data /etc/apache2/conf-available/pagespeed_libraries.conf $HTTPD_PREFIX/conf/extra/
COPY --from=pagespeed --chown=root:www-data /usr/lib/apache2/modules/mod_pagespeed.so $HTTPD_PREFIX/modules/
COPY --from=pagespeed --chown=root:www-data /usr/lib/apache2/modules/mod_pagespeed_ap24.so $HTTPD_PREFIX/modules/
# pagespeed end