※ハマった記録のわりにエラーログとってないので一切エラーログが出てきません
動かしたい環境
CentOSにApacheいれてPHP7.3をモジュール版で動かしたい。←ここ!
MySQL5.7もいれたい←ここは今回は触れてません
事始め
約1年前ぐらいに作ってたdocker-composeをビルドしようとしたらエラー出た(たしか)
で、当時のDockerfile。
FROM centos:latest
MAINTAINER docker-web
# update yum
RUN yum -y update
RUN yum -y install yum-utils
RUN yum clean all
RUN yum -y install epel-release
RUN yum -y groupinstall "Development Tools"
RUN yum -y install wget git vim zsh curl
# install remi repo
RUN wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN rpm -Uvh remi-release-7*.rpm
RUN yum-config-manager --enable remi-php73
# install php73
RUN \
yum -y install \
php-devel \
php php-common \
php-mbstring \
php-mcrypt \
php-xml \
php-mysqlnd \
php-pdo \
php-gd \
php-cli \
php-intl \
php-opcache --nogpgcheck \
php-xdebug
# clear yum cache
RUN yum clean all
# install composer
RUN curl -sS https://getcomposer.org/installer | php && \
mv composer.phar /usr/local/bin/composer
# timezone setting
RUN cp /etc/localtime /etc/localtime.org
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# for web
EXPOSE 80
COPY ./conf.d/vhosts.conf /etc/httpd/conf.d/vhosts.conf
CMD /usr/sbin/httpd -DFOREGROUND
COPY ./start-develop.sh /start-develop.sh
RUN chmod 755 /start-develop.sh
ついでに当時のファイル構成。
├ apps
├
├ docker-compose.yml
└ docker
├ web
├ Dockerfile : centos, php, apatch install
├ start-develop.sh : apps directory symbolic link web/data directory
├ conf.d
├ vhosts.conf
├ data : Document root
├
├ db
├ data : mysql data
├
├ Dockerfile : mysql install
├ my.cnf
├ logs : server & sql log
├
php-mcryptがPHP7.2からdeprecated
oh...とりあえず。はずそう。
そもそもcentos:latestがよろしくない
多分当時
FROM centos:latest
で7がはいってたところ8になった模様。
そして引っ張られて
RUN yum -y install epel-release
がこれも7だったのが8になった。
epelが8でremiが7をいれてて駄目な感じがする。
Remi's repoの8はdevelopment release(2019/12/31現在)
This is a development release.
This is a development release.
開発バージョン使うのも、、、なぁ、、、?
ならepelを7にすりゃよくね?(迷走)
# RUN dnf -y install epel-release
RUN dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
※yumがdnfになったと見かけたのでコマンド変えました
今度はremiリポジトリ入れるところでepelのなんたらファイルがないと怒られたので素直にremiを8にすることに。
Remi's Repoを8にしよう
# install remi repo
#RUN wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
#RUN rpm -Uvh remi-release-7*.rpm
RUN wget http://rpms.famillecollet.com/enterprise/remi-release-8.rpm
RUN rpm -Uvh remi-release-8*.rpm
RUN yum-config-manager --enable remi-php73
うご、、、かん!!!!!!!!!!!!!!
RUN rpm -Uvh remi-release-8*.rpm
でエラーになった(たしか)
wgetやめてdnf installしたれ。
#RUN wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
#RUN rpm -Uvh remi-release-7*.rpm
#RUN wget http://rpms.famillecollet.com/enterprise/remi-release-8.rpm
#RUN rpm -Uvh remi-release-8*.rpm
RUN dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
RUN dnf-config-manager --enable remi-php73
うご、、、かん!!!!!!!
RUN dnf-config-manager --enable remi-php73
今度はここでエラー。
あっそ。いいよいいよphpインストールするときにenablerepoするから。
#yum -y install php
dnf -y install --enablerepo=remi,remi-php73 php
※拡張は端折ってます
Error: Unknown repo: 'remi-php73'
remi-php73がないって言い出した。
んなわけあるかい。
$ dnf repolist all | grep remi
ほんまや!!!!おらん!!!!!!!!
Remi's Repo入れたけどremi-php73がいない
php73はそもそもいるのだろうかという疑問が湧いたので確認。
$ dnf search php73
いる。
#yum -y install php
#dnf -y install --enablerepo=remi,remi-php73 php
dnf -y install php73
はいった。
$ php -v
bash: php: command not found
ぐぬぬ。
$ php73 -v
PHP 7.3.13 (cli) (built: Dec 17 2019 10:29:15) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.13, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.13, Copyright (c) 1999-2018, by Zend Technologies
with Xdebug v2.9.0, Copyright (c) 2002-2019, by Derick Rethans
でた。
そしたらphpでphp73が動くようにシンボリックリンク足しとけばいいですね。
RUN ln -s /bin/php73 /bin/php
httpdが動かない
CMD /usr/sbin/httpd -DFOREGROUND
ここで/usr/sbinがないとかなんとかってエラーがでる。
$ httpd -v
ない!!!!!!
Dockerfileよくみたらたしかにhttpdは読んでない。
当時動いたんだけどなんだったのかなぁ、、、という疑問はさておき。
RUN dnf -y install httpd httpd-tools
追記。
無事 docker-compose buildにdocker-compose runが動く。
htmlもアクセスできる。
よしよし。
なんで!!!!!!!!!!!
PHPが認識してない
Apacheのconfigにmodule読んだ記憶はたしかにない。
けどしなくてもphpいれたときに自動で入ってたような、、、?という記憶をたどってもう1度search php73。
$ dnf search php73
もしかしてphp73じゃなくてphp73-phpをインストールしたらいいのでは?
#yum -y install php
#dnf -y install --enablerepo=remi,remi-php73 php
#dnf -y install php73
dnf -y install php73-php
503エラー!!!!!!!!
PHP-FPMはお呼びでないです
[proxy:error] [pid 10:tid 140512262579968] (2)No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /var/opt/remi/php73/run/php-fpm/www.sock (*) failed
[proxy_fcgi:error] [pid 10:tid 140512262579968] [client 192.168.202.1:36754] AH01079: failed to make connection to backend: httpd-UDS
頼んでもないのにphp-fpmがどうたら言ってる。
許すまじ。
調べるとEvent MPMだとモジュール版のPHPは動かないとかなんとか。
ふーん?
$ httpd -V | grep 'MPM'
Server MPM: event
eventってしっかり出てきて草。
/etc/httpd/conf.modules.d/00-mpm.conf
として設定ファイルができてるのを発見。
$ docker cp [コンテナID]:/etc/httpd/conf.modules.d/00-mpm.conf 00-mpm.conf
コピーして
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
のコメントを解除。
LoadModule mpm_event_module modules/mod_mpm_event.so
をコメントアウト。
したものを
docker/web/conf.modules.d/00-mpm.conf
に設置。
RUN mv /etc/httpd/conf.modules.d/00-mpm.conf /etc/httpd/conf.modules.d/00-mpm.conf.origin
COPY ./conf.modules.d/00-mpm.conf /etc/httpd/conf.modules.d/00-mpm.conf
元のファイル置いとかなくてもいいかなと思いながらも追記。
動いた!!!!!!!!!!!!!!!!
最終的に出来上がったDockerfile
FROM centos:centos8
MAINTAINER docker-web
# update dnf
RUN dnf -y update
RUN dnf -y install dnf-utils
RUN dnf clean all
# install epel-release
RUN dnf -y install epel-release
# install dev tool
RUN dnf -y groupinstall "Development Tools"
RUN dnf -y install git vim zsh curl
# install remi repo
RUN dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# inatall httpd
RUN dnf -y install httpd httpd-tools
# install php73
RUN \
dnf -y install \
php73-php \
php73-php-mbstring \
php73-php-common \
php73-php-xml \
php73-php-mysqlnd \
php73-php-pdo \
php73-php-gd \
php73-php-cli \
php73-php-intl \
php73-php-opcache --nogpgcheck \
php73-php-json \
php73-php-pecl-xdebug
RUN ln -s /bin/php73 /bin/php
# clear dnf cache
RUN dnf clean all
# install composer
RUN curl -sS https://getcomposer.org/installer | php && \
mv composer.phar /usr/local/bin/composer
# timezone setting
RUN cp /etc/localtime /etc/localtime.org
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# for web
EXPOSE 80
COPY ./conf.d/vhosts.conf /etc/httpd/conf.d/vhosts.conf
RUN mv /etc/httpd/conf.modules.d/00-mpm.conf /etc/httpd/conf.modules.d/00-mpm.conf.origin
COPY ./conf.modules.d/00-mpm.conf /etc/httpd/conf.modules.d/00-mpm.conf
CMD /usr/sbin/httpd -DFOREGROUND
COPY ./start-develop.sh /start-develop.sh
RUN chmod 755 /start-develop.sh
構成はこう。
├ apps
├
├ docker-compose.yml
└ docker
├ web
├ Dockerfile : centos, php, apatch install
├ start-develop.sh : apps directory symbolic link web/data directory
├ conf.d
├ vhosts.conf
├ conf.modules.d
├ 00-mpm.conf
├ data : Document root
├
├ db
├ data : mysql data
├
├ Dockerfile : mysql install
├ my.cnf
├ logs : server & sql log
├