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


PHPで開発環境を構築するぞ

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

インストールするものとその解説

VirtualBox
ローカルマシンの親。複数のローカルマシンを管理します。
コマンドからもアプリからもマシンの起動や停止、マシンの除去もできます。

Vagrant
ローカルマシン1個あたりの種。
後に解説する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と相性がいい。
1つのローカルマシンに対して、ホスト名を設定して複数のアプリケーションを動作させる際に、再起動したりファイルをいじったりと結構お世話になる。

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が生成されるので、

  # 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
でマシンを起動!! 初回は少し時間がかかります。

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.1Apache2.4MySQL5.6phpMyAdminです。

まず、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のバージョンを確認。

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/
もう1度vagrant sshで接続。

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

インストール済みパッケージ
名前                : 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でバージョン確認。

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

● 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

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.〜の番号です。

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


ログイン成功!

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

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

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

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