VagrantでCentOS7にnginx, php7を入れてindex.phpを表示させるまで

More than 1 year has passed since last update.


本編の内容

以前の記事でVagrantを使ってMacにCentOS7をインストールしました。

今回はそこにnginxとphp7.1を入れて、index.phpを表示させることをゴールにします。


Vagrantの仮想環境にアクセスする

Home/MyVagrant/CentOS7の中にVagrantFileがあります。


ターミナル

$ cd /MyVagrant/CentOS7

$ vagrant up
$ vagrant ssh

何かと後が面倒なのでルート権限にしておきます。まあしなくても良いけど。

ちなみにパスワードは'vagrant'です。


vagrant

[vagrant@localhost ~]$ su

パスワード:
[root@localhost vagrant]#


PHP7.1をインストール

コマンドだけ書いても面白くないので、順を追ってみましょう。

まずデフォルトの状態で、どのPHPバージョンがインストールされるかをチェックします。

--assumenoオプションをつけると実際にどれがインストールされるかだけ確認して、インストールそのものはされないです。


vagrant

# yum install --assumeno php


すると以下の結果が出て、バージョン5.4.16というかなり古いものが、baseリポジトリからインストールされることになるということがわかります。


実行結果

================================================================================

Package アーキテクチャー
バージョン リポジトリー
容量
================================================================================
インストール中:
php x86_64 5.4.16-45.el7 base 1.4 M
依存性関連でのインストールをします:
apr x86_64 1.4.8-3.el7_4.1 base 103 k
apr-util x86_64 1.5.2-6.el7 base 92 k
httpd x86_64 2.4.6-80.el7.centos base 2.7 M
httpd-tools x86_64 2.4.6-80.el7.centos base 89 k
libzip x86_64 0.10.1-8.el7 base 48 k
mailcap noarch 2.1.41-2.el7 base 31 k
php-cli x86_64 5.4.16-45.el7 base 2.7 M
php-common x86_64 5.4.16-45.el7 base 565 k
依存性関連での更新をします:
openssl x86_64 1:1.0.2k-12.el7 base 492 k
openssl-devel x86_64 1:1.0.2k-12.el7 base 1.5 M
openssl-libs x86_64 1:1.0.2k-12.el7 base 1.2 M

トランザクションの要約
================================================================================
インストール 1 パッケージ (+8 個の依存関係のパッケージ)
更新 ( 3 個の依存関係のパッケージ)

総ダウンロード容量: 11 M


試しに現在のリポジトリ一覧も確認しておきましょう。

# yum repolist

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.0x.sg
* extras: ftp.iij.ad.jp
* updates: mirror.0x.sg
リポジトリー ID リポジトリー名 状態
base/7/x86_64 CentOS-7 - Base 9,911
extras/7/x86_64 CentOS-7 - Extras 305
updates/7/x86_64 CentOS-7 - Updates 632
repolist: 10,848

Base, Extras, Updatesという3つのリポジトリが存在することがわかります。

このリポジトリの中にPHP7.1がないからyum installできないということですね。

ということで、PHP7.1が入っているリポジトリを追加します。

yumでremiリポジトリとそれに関連するリポジトリをインストールします。

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

何が入ったか見てみましょう。

# yum repolist

〜いろいろと省略〜
リポジトリー ID リポジトリー名 状態
base/7/x86_64 CentOS-7 - Base 9,911
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,582
extras/7/x86_64 CentOS-7 - Extras 305
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_ 2,671
updates/7/x86_64 CentOS-7 - Updates 632
repolist: 26,101

このようにepelとremiが新たにインストールされたことが確認できました。

では、PHP7.1と必要そうなモジュールを一式インストールしましょう。

ちなみに--enablerepoは一時的に今回はこっちのリポジトリを使うよっていうオプションです。

設定ファイルでenabled=0になっていてもこのオプションを使うと一時的に有効になります。

# yum install --enablerepo=remi-php71 php php-cli php-common php-devel php-fpm php-gd php-mbstring php-mysqlnd php-pdo php-pear php-pecl-apcu php-soap php-xml php-xmlrpc

成功しました。

php.iniで最低限の設定だけやっておきましょう。


/etc/php.ini

display_errors = On

error_log = "/var/log/php_errors.log"(任意の場所でOK)
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8


nginxをインストール

まずはnginxのパッケージをインストールしないとですね。

# yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

ちゃんとリポジトリにnginxが入っているか念のため確認。

# yum repolist

~いろいろと省略〜

リポジトリー ID リポジトリー名 状態
base/7/x86_64 CentOS-7 - Base 9,911
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,582
extras/7/x86_64 CentOS-7 - Extras 305
nginx/x86_64 nginx repo 102
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 2,671
updates/7/x86_64 CentOS-7 - Updates 632
repolist: 26,203

大丈夫ですね。

早速、先ほどのリポジトリを指定してnginxをゲットしましょう。

# yum -y install --enablerepo=nginx nginx

問題なく終了しました。そしたらnginxを起動&自動起動設定しておきます。

うまくいったかどうかも見てみましょう

# systemctl start nginx

# systemctl enable nginx
# systemctl status nginx

activeと表示されることを確認しました。

次に、ファイアウォールの設定を変更してhttp通信を許可するようにしておきましょう。

# firewall-cmd --add-service=http --permanent

# firewall-cmd --reload

では、ブラウザから192.168.33.10(vagrantfileのprivate_server)にアクセスしてみましょう。


ブラウザ

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.


nginxの初期画面が表示されれば成功です!


自作htmlファイルが読み込まれるかテスト

nginxのドキュメントルートを調べます。

# cat /etc/nginx/conf.d/default.conf

~省略~
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
~省略~

ドキュメントルートがわかったので、/usr/share/nginx/html直下にtestとだけ書いたtest.htmlファイルを作成して、192.168.33.10/test.htmlにアクセスしてみましょう。

ブラウザにtest.htmlの中身が表示されれば成功ですね。


nginxとphpを繋げる

このままだとnginxでphpを実行することはできません。

ということで、php−fpmとnginxを繋げるようにそれぞれ設定を変更します。

まずはphp-fpmから。デフォルトでapacheになっているのでnginxに変えます。


/etc/php-fpm.d/www.conf

- user = apache

+ user = nginx

- group = apache
+ group = nginx


次に、nginxの設定ファイルを変更します。

コメントアウトしたり追加したりした箇所だけ載せます。


/etc/nginx/conf.d/default.conf

〜省略〜

location / {
root /usr/share/nginx/html;
#index index.html index.htm;
index index.php; ←追加
}
〜省略〜
location ~ \.php$ {
# root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name;←追加
include fastcgi_params;
}

これらの設定を再起動して反映させます。


コマンド

# systemctl restart nginx

# systemctl restart php-fpm

あとはドキュメントルートのhtml直下にindex.phpを作成し、

おきまりのphpinfo();あたりを書いてブラウザからアクセスしてみましょう。

192.168.33.10/index.phpにアクセスして正しくphpが実行されていれば成功です!

次はこれにさらにmysqlとlaravelをいれてみたいと思ってます。


参考サイト

https://akamist.com/blog/archives/648