【问题标题】:Missing dirs and files when migrating PHP-Apache2 from Debian to Alpine将 PHP-Apache2 从 Debian 迁移到 Alpine 时缺少目录和文件
【发布时间】:2020-11-19 10:05:10
【问题描述】:

我正在尝试将 dockerized PHP-Apache2 服务器从 Debian 迁移到 Alpine。

Debian dockerfile:

FROM php:7.3.24-apache-buster

COPY conf/php.ini /usr/local/etc/php

RUN apt-get update && apt-get upgrade -y && apt-get install -y \
        curl git \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libxml2-dev \
        libpng-dev \
        python-setuptools python-dev build-essential python-pip \
        libzip-dev

RUN pecl install mcrypt-1.0.2 \
    && docker-php-ext-enable mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install zip \
    && docker-php-ext-install soap

RUN  pip install --upgrade virtualenv && pip install xhtml2pdf

WORKDIR /var/www/app

COPY ./ /var/www/app

RUN cd /var/www/app && \
    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
    php composer-setup.php && \
    php -r "unlink('composer-setup.php');" && \
    php composer.phar install --ignore-platform-reqs --prefer-dist

COPY ./conf/default.conf /etc/apache2/sites-enabled/000-default.conf
COPY ./conf/cert /etc/apache2/cert

RUN mkdir /var/log/gts && chmod 777 -R /var/log/gts

RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
RUN mv /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load

COPY conf/apache2.conf /etc/apache2/apache2.conf
RUN mv /etc/apache2/mods-available/remoteip.load /etc/apache2/mods-enabled/remoteip.load

EXPOSE 443

阿尔卑斯码头文件:

FROM webdevops/php-apache:7.3-alpine

COPY conf/php.ini /usr/local/etc/php

RUN apk update && apk upgrade && apk add \
    git \
    curl \
    autoconf \
    freetype-dev \
    libjpeg-turbo-dev \
    libmcrypt-dev \
    libxml2-dev \
    libpng-dev \
    libzip-dev \
    py-setuptools \
    python3-dev \
    build-base \
    py-pip \
    libzip-dev \
    apache2-dev

RUN PHP_AUTOCONF="/usr/bin/autoconf" \
    && pecl install mcrypt-1.0.2 \
    && docker-php-ext-enable mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/

RUN  pip install --upgrade --ignore-installed virtualenv && pip install xhtml2pdf

WORKDIR /var/www/app
COPY ./ /var/www/app

RUN cd /var/www/app && \
    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
    php composer-setup.php && \
    php -r "unlink('composer-setup.php');" && \
    php composer.phar install --ignore-platform-reqs --prefer-dist

COPY ./conf/default.conf /etc/apache2/sites-enabled/000-default.conf
COPY ./conf/cert /etc/apache2/cert

RUN mkdir /var/log/gts && chmod 777 -R /var/log/gts

RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load \
    && mv /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load

COPY conf/apache2.conf /etc/apache2/apache2.conf
RUN mv /etc/apache2/mods-available/remoteip.load /etc/apache2/mods-enabled/remoteip.load

EXPOSE 443

Alpine 构建失败:

mv: can't rename '/etc/apache2/mods-available/rewrite.load': No such file or directory

原来是 Alpine 容器:

  1. 没有/etc/apache2/mods-* 目录和*.load 文件
  2. /usr/lib/apache2 中只有*.so 文件(类似于Debian 上/usr/lib/apache2/modules 中的*.so 文件列表)。

问题:

  1. 为什么我的 Alpine 容器中没有 *.load files
  2. 为什么我的 Alpine 容器中没有 /etc/apache2/mods-* 目录?
  3. *.so 文件是否等同于 *.load 文件?
  4. 如果前面是真的,那我该如何使用*.so文件呢?

PS:如果可能,我宁愿不要更改 httpd.conf。

【问题讨论】:

    标签: dockerfile debian apache2 alpine


    【解决方案1】:

    我试着一一回答你的问题:

    1. 为什么我的 Alpine 容器中没有 *.load 文件?

    加载文件通常只包含一行来加载特定模块,可以看作是使用 shell 脚本 (a2enmod) 切换模块的便捷方法

    1. 为什么我在 Alpine 容器中没有 /etc/apache2/mods-* 目录?

    Alpine 力求简约。这也意味着您不应该安装不需要的模块。因此,安装不需要的模块(例如,仅在可用的模块中)是不好的做法。

    1. *.so 文件是否等同于 *.load 文件?

    so-files 也存在于 debian 中并且是模块本身。加载文件是加载这些 .so 文件的配置片段。

    1. 如果前面是真的,那么如何使用 *.so 文件?

    只需查看加载文件。例如,您可以使用以下配置行加载重写模块:

    LoadModule rewrite_module modules/mod_rewrite.so
    

    你不应该改变httpd.conf,你的偏好就在这里。但是您可以将自定义配置放入/etc/apache2/conf.d 并在那里加载所有模块。只需确保您的配置文件以 .conf 结尾即可

    【讨论】:

      猜你喜欢
      • 2021-02-05
      • 2021-09-24
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      相关资源
      最近更新 更多