AmazonLinux2にphp7.2+Apacheの環境を作る & Docker

# はじめに
AmazonLinuxからAmazonLinux2に移行する機会があったのではまったところや注意点などを記述します。
AmazonLinux2にはExtrasLibrary(amazon-linux-extras)を使ってphp7をインストールすることは可能なのですが、使用できるパッケージが限られるためRemiリポジトリを使用してインストールしました。
Dockerでも開発を行いたいのでその都度記述していきます。

# 必要なものをインストール
```
sudo yum -y update
sudo yum install -y \
		curl \
		git \
		libxml2 \
		libxml2-devel \
		httpd \
		mysql \
		gcc \
		vim \
		mod_ssl
```
インストールしたものについては社内のシステムで必要なものを入れたので全て必要と言う訳ではありません。

# Remiリポジトリの追加
```
sudo wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -ivh epel-release-latest-7.noarch.rpm
sudo yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum-config-manager --enable remi-php72
```

* `sudo yum install -y php`でphpを入れるとphp5が入ってしまうので注意
* `sudo yum-config-manager --enable remi-php72`でリポジトリの有効化
* リポジトリを確認したいのであれば`ll /etc/yum.repos.d/`で一覧を確認

```
$ ll /etc/yum.repos.d/
合計 56
-rw-r--r-- 1 root root  982  6月 26 09:04 amzn2-core.repo
-rw-r--r-- 1 root root  763  6月 23 07:46 amzn2-extras.repo
-rw-r--r-- 1 root root 1050 10月  3  2017 epel-testing.repo
-rw-r--r-- 1 root root  951 10月  3  2017 epel.repo
-rw-r--r-- 1 root root  446  6月 19 17:28 remi-glpi91.repo
-rw-r--r-- 1 root root  446  6月 19 17:28 remi-glpi92.repo
-rw-r--r-- 1 root root  446  6月 19 17:28 remi-glpi93.repo
-rw-r--r-- 1 root root  456  6月 19 17:28 remi-php54.repo
-rw-r--r-- 1 root root 1314  6月 19 17:28 remi-php70.repo
-rw-r--r-- 1 root root 1314  6月 19 17:28 remi-php71.repo
-rw-r--r-- 1 root root 1314  7月 24 10:15 remi-php72.repo
-rw-r--r-- 1 root root 1314  6月 19 17:28 remi-php73.repo
-rw-r--r-- 1 root root  750  6月 19 17:28 remi-safe.repo
-rw-r--r-- 1 root root 2605  6月 19 17:28 remi.repo
```
こんな感じになってればokです。

# phpとそのパッケージをインストール
```
sudo yum install -y php72 php72-php
```
php72-phpがないと起動しないので注意！
`php`コマンドではなく`php72`コマンドになっているので注意(`python3`のようだ)。
`sudo ln -s /usr/bin/php72 /usr/bin/php`で`php`でも起動できるようにしました。

```
$ php -v
PHP 7.2.8 (cli) (built: Jul 17 2018 08:41:40) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.8, Copyright (c) 1999-2018, by Zend Technologies
```

# Apache(httpd)の設定
執筆日(2018/07/24)時点ではyumでインストールしたhttpdのバージョンは2.4.33です。

```
$ httpd -v
Server version: Apache/2.4.33 ()
Server built:   Jun 15 2018 20:38:53
```
Apache httpd 2.4.27以降から、Preforkを使っている場合は、mod_http2 が無効になるためhttp2ができなくなっています。[参考](https://blog.apar.jp/linux/7873/)
しかし、AmazonLinux2がhttp2で通信をしようとしてきます。 Dockerで行う際、http2で通信をする必要がないので`/etc/httpd/conf/httpd.conf`の`IfModule mod_http2.c`のブロックを全てコメントアウトしましょう。

```
#<IfModule mod_http2.c>
#    Protocols h2 h2c http/1.1
#</IfModule>
```

# Dockerfile
上記で行ったことをDockerfileに記述します

```dockerfile
FROM amazonlinux:2
RUN yum update -y \
    && yum upgrade -y \
    && yum install -y  \
      curl \
      git \
      libxml2 \
      libxml2-devel \
      httpd \
      mysql \
      gcc \
      vim \
      make \
      mod_ssl \
      wget

RUN yum -y install yum-utils

RUN wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

RUN rpm -ivh epel-release-latest-7.noarch.rpm

RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

RUN yum-config-manager --enable remi-php72

RUN yum install -y php72 php72-php

RUN yum clean all

RUN echo "<?php phpinfo();" > /var/www/html/info.php # とりあえずphpが起動するかテスト

RUN sed -ie '354,356d' /etc/httpd/conf/httpd.conf # httpsをするのを阻止

RUN mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.confdisable # httpsをするのを阻止

RUN ln -s /usr/bin/php72 /usr/bin/php

EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
```

build


```
docker build -t amzn-linux2-php7 .    
```
run

```
docker run -it -d --name test-1 -p 8080:80 amzn-linux2-php7           
```
Apacheの起動しているか確認しましょう。
http://localhost:8080/ にアクセスしましょう。
<img width="1675" alt="スクリーンショット 2018-07-24 18.09.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/166626/d239f2ff-8fc4-df34-3e1d-63597bd43e7a.png">
次はphp
http://localhost:8080/info.php で確認。
<img width="1147" alt="スクリーンショット 2018-07-24 18.11.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/166626/99e0dea7-937f-74a3-061d-83518da51ebf.png">



# 番外(amazon-linux-extrasでphpを入れる)
```
$ amazon-linux-extras
  0  ansible2                 available  [ =2.4.2 ]
  1  emacs                    available  [ =25.3 ]
  2  memcached1.5             available  [ =1.5.1 ]
  3  nginx1.12                available  [ =1.12.2 ]
  4  postgresql9.6            available  [ =9.6.6  =9.6.8 ]
  5  python3                  available  [ =3.6.2 ]
  6  redis4.0                 available  [ =4.0.5 ]
  7  R3.4                     available  [ =3.4.3 ]
  8  rust1                    available  [ =1.22.1  =1.26.0 ]
  9  vim                      available  [ =8.0 ]
 10  golang1.9                available  [ =1.9.2 ]
 11  ruby2.4                  available  [ =2.4.2  =2.4.4 ]
 12  nano                     available  [ =2.9.1 ]
 13  php7.2                   available  [ =7.2.0  =7.2.4  =7.2.5 ]
 14  lamp-mariadb10.2-php7.2  available  \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5 ]
 15  libreoffice              available  [ =5.0.6.2_15 ]
 16  gimp                     available  [ =2.8.22 ]
 17  docker=latest            enabled    [ =17.12.1  =18.03.1 ]
 18  mate-desktop1.x          available  [ =1.19.0  =1.20.0 ]
 19  GraphicsMagick1.3        available  [ =1.3.29 ]
 20  tomcat8.5                available  [ =8.5.31 ]
```
インストール可能なパッケージ一覧が表示される。

```
sudo amazon-linux-extras install php7.2
```
AmazonLinux2で　phpをyumでインストールするとがバージョン5.4が入り、上記したamazon-linux-extrasでインストールするとバージョンは7.2ですが同時にphp-fpmが入るのでnginx前提のようです。
[Amazon Linux2とAmazon Linuxの違いについて（メモ）](https://qiita.com/akira345/items/2a09c4d06d2e3415bc8d)
しかし今回はApacheを前提としているシステムなのでこの方法は見送りました。