Nao000のぶろぐ

蝶を追っている少年になりたい

DockerでCentOS7,php7.3(ソースインストール),apache2.4(yumでインストール) の環境構築に苦戦したので記録

目次

  1. なぜやろうと思ったのか
  2. apacheのvirtualhostの設定で躓いてた
  3. Dockerfile,docker-compose.yml,vhost.confの設定とか
  4. 終わり
  5. 参考資料

なぜやろうと思ったのか

ざっくり2つの理由があります。

  • PHPを「ソースからインストール」というものをやってみたかった
  • 個人で考えたサービスを開発するのにPHP使うおうと思った

PHPは業務でも使っているのでElixirより慣れています。「Gigalixir使えるElixirのほうがよくね?」と思ったのは別の話です。

apacheのvirtualhostの設定で躓いてた

「DocumentRootとServerName設定すれば使えるっしょ」と思ってました。実際にはそれだけでは使えません。Directoryの設定、FilesMatchの設定、IfModuleの設定が必要でした。XAMPPでVirtualhostが素直に設定できたのは環境の恩恵を受けていたからでした。

Dockerfile,docker-compose.yml,vhost.confの設定とか

せっかく作ったので記載。vhost.confのディレクティブ全然詳しくないです。都度調べて都度忘れています。

dockerfile

    FROM centos:centos7

    RUN yum update -y
    RUN yum install 
        tar 
        gcc 
        openssl openssl-devel
        make 
        libxml2-devel 
        curl-devel 
        libpng libpng-devel 
        httpd httpd-devel 
        -y

    RUN cd /usr/local/src && 
        curl -Lkvf https://www.php.net/distributions/php-7.3.0.tar.gz -o php-7.3.0.tar.gz && 
        tar -zxf php-7.3.0.tar.gz && 
        cd php-7.3.0 && 
        ./configure 
        --enable-fpm 
        --with-openssl 
        --with-curl 
        --with-mysqli 
        --with-zlib 
        --with-fpm 
        --with-gd 
        --enable-mbstring 
        --with-mysql-sock=/var/lib/mysql/mysql.sock 
        --with-apxs2=/usr/bin/apxs

    RUN cd /usr/local/src/php-7.3.0 && 
        make && 
        make install

    COPY ./vhosts.conf /etc/httpd/conf.d/

    CMD ["/sbin/init"]

docker-compose.yml

    version: '3.2'
    services:
      myphpdocker:
        build: .
        ports:
          - "80:80"
        privileged: true
        command: /sbin/init
        volumes:
          - ./web:/home/mysample/public

vhost.conf

    <VirtualHost *:80>

      <Directory "/home/mysamle">
        AllowOverride None
        Require all granted
      </Directory>

      DocumentRoot /home/mysamle/public
      ServerName local.mysamle.com

      <IfModule dir_module>
        DirectoryIndex index.php
      </IfModule>

      <IfModule mine_module>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
      </IfModule>

      <FilesMatch .php$>
        SetHandler application/x-httpd-php
      </FilesMatch>

    </VirtualHost>

終わり

自分の未熟さを知った土日でした。php.iniって最初から用意されていないことを知りました(php.ini-development, php.ini-productionがありました)。

参考資料