代码之家  ›  专栏  ›  技术社区  ›  Akshay

如何在docker apache httpd中安装mod_pagespeed

  •  0
  • Akshay  · 技术社区  · 5 年前

    我有一个基于docker的apache httpd服务器。我需要安装 mod_pagespeed 对那件事很感兴趣。

    由于某些原因,我现在使用的是debian,而不是alpine。

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

    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 .

    我想我需要从源代码进行定制构建,有没有简单的方法?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Michael BOUVY    5 年前

    你可以使用以下方法 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 .

    希望这有帮助!

        2
  •  1
  •   Akshay    4 年前

    大多数情况下@Michael的答案是正确的,但是对于那些使用默认docker的apache模块的人(比如我),下面的答案就足够了。

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

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

    Dockerfile

    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