我正在尝试将一个码头化的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
阿尔卑斯山建造失败:
mv: can't rename '/etc/apache2/mods-available/rewrite.load': No such file or directory
原来阿尔卑斯集装箱:
- 没有
/etc/apache2/mods-*
目录和*.load
文件 - 在
/usr/lib/apache2
中只有*.so
文件(类似于Debian上/usr/lib/apache2/modules
中的*.so
文件列表(
问题:
- 为什么Alpine容器中没有
*.load files
- 为什么我在Alpine容器中没有
/etc/apache2/mods-*
目录 *.so
文件是否等同于*.load
文件- 如果前面的是真的,那么我该如何使用
*.so
文件
PS:如果可能的话,我不想更改httpd.conf。
我试着逐一回答您的问题:
- 为什么Alpine容器中没有*.load文件
加载文件通常只包含一行用于加载特定模块,并且可以被视为使用shell脚本(a2enmod(切换模块的一种方便方法
- 为什么Alpine容器中没有/etc/apache2/mods-*目录
Alpine尝试极简主义。这也意味着您不应该安装不需要的模块。因此,安装不需要的模块(例如,仅在可用的MOD中(是一种糟糕的做法。
- *.so文件等同于*.load文件吗
so文件也存在于debian中,并且是模块本身。加载文件是用于加载这些.so文件的配置片段。
- 如果前面的是真的,那么我该如何使用*.so文件
只需查看加载文件即可。例如,您可以使用以下配置行加载重写模块:
LoadModule rewrite_module modules/mod_rewrite.so
您不应该更改httpd.conf
,您的偏好就在这里。但是您可以将自定义配置放入/etc/apache2/conf.d
中,并在那里加载所有模块。只需确保您的配置文件以.conf
结尾即可