LoginSignup
8
7

More than 3 years have passed since last update.

DockerでPHP7.3(モジュール版)環境作ろうとしてハマった記録

Last updated at Posted at 2019-12-31

※ハマった記録のわりにエラーログとってないので一切エラーログが出てきません:stuck_out_tongue_winking_eye:

動かしたい環境

CentOSにApacheいれてPHP7.3をモジュール版で動かしたい。←ここ!
MySQL5.7もいれたい←ここは今回は触れてません

事始め

約1年前ぐらいに作ってたdocker-composeをビルドしようとしたらエラー出た(たしか)

で、当時のDockerfile。

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がよろしくない

多分当時

Dockerfile
FROM centos:latest

で7がはいってたところ8になった模様。
そして引っ張られて

Dockerfile
RUN yum -y install epel-release

がこれも7だったのが8になった。
epelが8でremiが7をいれてて駄目な感じがする。

Remi's repoの8はdevelopment release(2019/12/31現在)

スクリーンショット 2019-12-31 18.59.00.png

This is a development release.

This is a development release.

開発バージョン使うのも、、、なぁ、、、?

ならepelを7にすりゃよくね?(迷走)

Dockerfile
# 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にしよう

Dockerfile
# 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

うご、、、かん!!!!!!!!!!!!!!

Dockerfile
RUN rpm -Uvh remi-release-8*.rpm

でエラーになった(たしか)

wgetやめてdnf installしたれ。

Dockerfile
#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

うご、、、かん!!!!!!!

Dockerfile
RUN dnf-config-manager --enable remi-php73

今度はここでエラー。
あっそ。いいよいいよphpインストールするときにenablerepoするから。

Dockerfile
#yum -y install php
dnf -y install --enablerepo=remi,remi-php73 php

※拡張は端折ってます

Error: Unknown repo: 'remi-php73'

remi-php73がないって言い出した。
んなわけあるかい。

$ dnf repolist all | grep remi

スクリーンショット 2019-12-31 19.22.42.png

ほんまや!!!!おらん!!!!!!!!

Remi's Repo入れたけどremi-php73がいない

php73はそもそもいるのだろうかという疑問が湧いたので確認。


$ dnf search php73

スクリーンショット 2019-12-31 19.26.33.png

いる。

Dockerfile
#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が動くようにシンボリックリンク足しとけばいいですね。

Dockerfile

RUN ln -s /bin/php73 /bin/php

httpdが動かない

Dockerfile

CMD /usr/sbin/httpd -DFOREGROUND

ここで/usr/sbinがないとかなんとかってエラーがでる。


$ httpd -v

ない!!!!!!

Dockerfileよくみたらたしかにhttpdは読んでない。
当時動いたんだけどなんだったのかなぁ、、、という疑問はさておき。

Dockerfile

RUN dnf -y install httpd httpd-tools

追記。
無事 docker-compose buildにdocker-compose runが動く。
htmlもアクセスできる。
よしよし。

ENBHTDTUYAAZ0V_.png

なんで!!!!!!!!!!!

PHPが認識してない

Apacheのconfigにmodule読んだ記憶はたしかにない。
けどしなくてもphpいれたときに自動で入ってたような、、、?という記憶をたどってもう1度search php73。


$ dnf search php73

スクリーンショット 2019-12-31 21.54.24.png

もしかしてphp73じゃなくてphp73-phpをインストールしたらいいのでは?

Dockerfile
#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

コピーして

httpd.conf

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

のコメントを解除。

httpd.conf

LoadModule mpm_event_module modules/mod_mpm_event.so

をコメントアウト。

したものを

docker/web/conf.modules.d/00-mpm.conf

に設置。

Dockerfile

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

元のファイル置いとかなくてもいいかなと思いながらも追記。

スクリーンショット 2019-12-31 21.56.57.png

動いた!!!!!!!!!!!!!!!!:clap::clap::clap:

最終的に出来上がったDockerfile

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
    ├
8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7