今更ながらPHPの開発環境構築をする【LAMP】

#PHPで開発環境を構築するぞ
ここでは、PHPの開発環境を構築するための方法を書きます。
VirtualBoxを使ったテンプレな手法で環境構築をしていきます。
初学者向けの記事になります。
（Macで構築します）

##インストールするものとその解説
**VirtualBox**
ローカルマシンの親。複数のローカルマシンを管理します。
コマンドからもアプリからもマシンの起動や停止、マシンの除去もできます。

**Vagrant**
ローカルマシン１個あたりの種。
後に解説するVagrantfileがおいてある場所がローカルマシンの置き場。
1ローカルマシンにつき、1Vagrantfileがある。

**CentOS7.2**
Linuxの一種。ローカルマシンに入れるOSは新しめのほうがいいよね〜
ということで7.2。

**PHP7.1**
「え、新しめのほうがいいならなんでPHP7.2じゃないの？」
なぜなら、MySQLインストール時に入れるphpMyAdminというサービスがあって、
それは開発中のDBの管理にとても便利なので使いたい。
通常phpMyAdminは、インストール時にapacheの.confファイルが作成されてブラウザからアクセスして使用可能になるのだが、PHP7.2から.confファイルが生成されなくなったので、phpMyAdminが使えて且つPHP最新版ということでPHP7.1を選択。

**Apache2.4**
Webサーバーソフトウェア。LAMPと言われるように、PHPやCentOSと相性がいい。
１つのローカルマシンに対して、ホスト名を設定して複数のアプリケーションを動作させる際に、再起動したりファイルをいじったりと結構お世話になる。

**MySQL5.6**
RDB（リレーショナルデータベース）の管理システム。
ついでにphpMyAdminも入れます。

##VirtualBox・Vagrantのインストール、ローカルマシンの起動
###VirtualBoxのインストール
*ここからインストール↓*
https://www.virtualbox.org/

※セキュリティで止められた場合は、「システム環境設定」の「セキュリティとプライバシー」で許可してあげましょう

###Vagrantのインストール
*ここからインストール↓*
https://www.vagrantup.com/

###ローカルマシンの作成

**以降、ターミナルでの作業**
VirtualBox・Vagrantをインストールできたら、
PC内でローカルマシンを立ち上げる土壌はできました。
VirtualBoxでは、ローカルマシンをBoxという単位で管理しています。
なので、Boxを追加（add）してあげましょう。

ローカルマシンを追加したいフォルダに移動して、

http://www.vagrantbox.es
からCentOS7.2のBoxのURLを探し、
```vagrant box add {お好きなBox名} {CentOS7.2のURL｝　```

完了したら
```vagrant box list ```
で存在するローカルマシンのリストが出てくるので、
先程追加したBoxの名前が出てくるかチェックします。

確認できたら、
```vagrant init {Box名}```

Vagrantfileが生成されるので、

```Vagrantfile
  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network "private_network", ip: "192.168.33.10"
```
ip: "192.168.33.10"の先頭のコメントアウトを外します。
※複数のローカルマシンを立ち上げる場合はip: 192.168.33.1*の数字がマシン同士でかぶらないようにしたほうがいいです。うまく動作しない原因になります。

コメントアウトを外したら、Vagrantfileがあるフォルダ内で
```vagrant up```
でマシンを起動！！　初回は少し時間がかかります。

```Vagrantfile
default: /vagrant => {vagrant upしたフォルダのパス}
....
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
```
上のような表示が出たら、問題なく起動していると思います。
ローカルマシンの現在の状態を確かめるには、
```vagrant status```
のコマンドを打ちます。

##必要なアプリケーションをインストールする
ここまで、VirtualBoxとVagrantを使って、CentOS7.2のローカルマシンを起動することに成功しました。

次は、CentOS7.2の中に、必要なアプリケーションをインストールしていきます。
インストールするのは、
*PHP7.1*、*Apache2.4*、*MySQL5.6*、*phpMyAdmin*です。

 まず、```vagrant ssh```でCentOSにsshで接続します。
ユーザー名がvagrant@localhostになれば接続オッケー。
早速やっていきましょう。

###PHP7.1のインストール
参考記事：https://webbibouroku.com/Blog/Article/centos-php7
まずはパッケージ管理のシステムをインストールします

**EPELリポジトリの追加**
```yum install epel-release```

**Remiリポジトリの追加**
```rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm```

きちんと追加されているか確認します。
```ls -l /etc/yum.repos.d```
epel.repo、remi.repoなどに加え、**remi-php71.repo**が追加されているのが見えると思います。

このremi-php71.repoを使ってPHP7.1と、その他拡張機能をインストールします。以下コマンドを実行します。

```yum -y install --enablerepo=remi,remi-php71 php php-mysql php-mbstring php-gd```
※今後このyum installコマンドを実行しますが、-yをつけるとyes/noを聞かれることなく、自動的にyesが選択されます。

処理が終了したら、
```php -v```でPHPのバージョンを確認。

```&nbsp;
PHP 7.1.25 (cli) (built: Dec  8 2018 13:52:58) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
```
ちゃんとバージョンがPHP7.1になっているかと思います。

**php.iniの編集**
参考記事：https://qiita.com/ozawan/items/caf6e7ddec7c6b31f01e

次はPHPの設定ファイルをいじっていこうと思います。
PHPの設定は/etc/php.iniに書かれています。

参考記事のように、

```php.ini
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_charset = none
```
てな感じで編集してあげればいいと思います。

PHPの設定ファイルをいじったら、一旦```exit```して、
```vagrant reload```でローカルマシンを再起動してあげましょう。

###Apache2.4をインストールする
参考記事：https://weblabo.oscasierra.net/apache-installing-apache24-yum-centos7-1/
もう１度```vagrant ssh```で接続。

**提供されているパッケージの確認とインストール**
```yum info httpd```とコマンドを打つと、

```&nbsp;
インストール済みパッケージ
名前                : httpd
アーキテクチャー    : x86_64
バージョン          : 2.4.6
リリース            : 88.el7.centos
容量                : 9.4 M
リポジトリー        : installed
提供元リポジトリー  : base
要約                : Apache HTTP Server
URL                 : http://httpd.apache.org/
ライセンス          : ASL 2.0
説明                : The Apache HTTP Server is a powerful, efficient, and extensible
                    : web server.
```
という感じで、Apache2.4が提供されていることが確認できると思います。

確認できたら、
```yum -y install httpd```
　でインストール！
処理が終わったら、```httpd -version```でバージョン確認。

```&nbsp;
Server version: Apache/2.4.6 (CentOS)
Server built:   Nov  5 2018 01:47:09
```
しっかりインストールされています。

**Apacheの起動と自動起動設定**
インストールが終わったので、Apacheを起動します。

```sudo systemctl start httpd.service```
起動したか確認します。
```systemctl status httpd.service```

```$nbsp;
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2018-12-22 15:48:19 GMT; 49min ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 909 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─ 909 /usr/sbin/httpd -DFOREGROUND
           ├─1606 /usr/sbin/httpd -DFOREGROUND
           ├─1607 /usr/sbin/httpd -DFOREGROUND
           ├─1608 /usr/sbin/httpd -DFOREGROUND
           ├─1609 /usr/sbin/httpd -DFOREGROUND
           └─1611 /usr/sbin/httpd -DFOREGROUND
```
active(running)と出ているのでオッケーです。
では、自動起動設定もやってしまいます。

```sudo systemctl enable httpd.service```

```&nbsp;
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
```
と出ていれば設定はオッケー。

###MySQL5.6のインストール
ではMySQLもインストールしてしまいましょう。

**MySQL5.6のインストール**
基本的には、以下の記事の手順のとおりです。
記事が激長になりそうなので、この記事に全てを委ねます。
https://weblabo.oscasierra.net/installing-mysql56-centos7-yum/
（確認コマンドもきちんと載っているので良記事）

**rootユーザーのパスワード設定**
ローカルサーバーに開発するアプリケーションを乗せるのに、DB接続はほぼ必須なので、ここでrootのパスワードを設定しましょう。

```mysqladmin -u root password '好きなパスワード'```
警告が出ると思いますが、きちんと変更されていると思います。
ローカルマシンなので、簡単なパスワードでも大丈夫じゃないでしょうか。

**phpMyAdminのインストール**
参考記事：https://qiita.com/kenichiro-yamato/items/1a8efbfd738b85369e46

そもそもphpMyAdmin入れるのってセキュリティ的にどうなの？って話ですが、ローカル環境ですし手動でデータをいじくりたいときもあるかと思うので入れています。

以下のコマンドを打ちます。
```yum -y install --enablerepo=remi,remi-php71 phpMyAdmin```
これだけでインストールが完了。

**phpMyAdmin.confの編集**
apacheのアクセスのセキュリティをゆるくするために、phpMyAdmin.confを編集します。
```sudo vi /etc/httpd/conf.d/phpMyAdmin.conf```
とコマンドを打って、

```phpMyAdmin.conf
<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>
```
上の「Require local」を「Require all granted」に変えます。

Apacheを再起動します。
```sudo systemctl restart httpd.service```

もし再起動できない場合は、
```sudo service httpd configtest```
と打つと、エラー文が出てきます。

ブラウザからアクセスしてみましょう
```http://ローカルマシンのIPアドレス/phpMyAdmin```
※ローカルマシンのIPアドレスはVagrantファイルでコメントアウトを外した、
192.168.33.〜の番号です。

<img width="675" alt="phpMyAdmin.png" src="https://qiita-image-store.s3.amazonaws.com/0/303474/ef555956-83a2-20ba-3ebf-10f0ed17345a.png">

こんな感じのログイン画面が出てくると思います。
ユーザー名はroot
パスワードは先程MySQLで設定したパスワードを打ってください。

<img width="977" alt="loginsuzess.png" src="https://qiita-image-store.s3.amazonaws.com/0/303474/54714fd0-2dfd-4126-7f5f-a14c5a5b9973.png">
ログイン成功！


ーーーーーーーーーーーーーーーーー
/etc/httpd/conf.d/phpMyAdmin.confって何よ？という方のために解説します。
先程Apache2.4をインストールした際に、httpdという文言が出てきたと思うのですが、/etc/httpd/以下はApacheの設定ファイル群です。
/etc/httpd/以下を見てみると、

```&nbsp;
drwxr-xr-x 2 root root   35 12月 18 12:22 conf
drwxr-xr-x 2 root root  138 12月 22 17:13 conf.d
drwxr-xr-x 2 root root 4096 12月 18 12:25 conf.modules.d
lrwxrwxrwx 1 root root   19 12月 18 12:22 logs -> ../../var/log/httpd
lrwxrwxrwx 1 root root   29 12月 18 12:22 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx 1 root root   10 12月 18 12:22 run -> /run/httpd
```
こんな感じになっていると思います。
conf以下はApache自身の設定、
logsはApache自身のログが置いてあります。

conf/以下のhttpd.confを見てみると、ファイルの最後に

```httpd.conf
#EnableMMAP off
EnableSendfile on

# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
```
「IncludeOptional conf.d/*.conf」と書いてあります。つまり、「オプションの設定はconf.d/以下の〜.confファイルに書いてね」ということなので、ApacheのphpMyAdminの設定を変更するためにphpMyAdmin.confをいじる、ということになります。

##環境構築終了〜あとがき〜
ローカル環境自身はこれで一旦できました。
ここにWordPressをのせたり、CakePHPをのせたり色々できると思います。
それぞれアプリケーションののせ方は、他の記事で書きます。

この記事を書こうと思ったのは、環境構築にあたりいつもブラウザの履歴をたどっているのがめんどくさくなって、一回参考記事をまとめたいなと思ったことがきっかけです。

LAMPっていう言葉ももう古いのかしら…時代遅れだっていうマサカリが飛んできそうで若干怯えていますが、「プログラミング初心者が何か言ってるわ〜」と寛大な心で受け流してくだされば幸いです。

最後に参考記事に載せた、今までお世話になってきた良記事の筆者の皆さまに感謝を申し上げます。

ありがとうございました。