vagrantでNginx+PHP+php-fpmの環境を立ち上げたので、手順を書きました
CentOS7のインストール
CentOS7をダウンロードします。
$vagrant box add CentOS7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
CentOS7のVMを起動
boxの作成が成功したら以下の手順でVagrantfileを作成します。
今回は「sample」というディレクトリを作り、その中に展開していきます。
また、この後、ホスト側(自分のパソコン)で作成したphpファイルやhtmlファイルを、ゲストOS(今回で言う所のvagrantで立ち上げたcentos)に同期させる(マウント)ための設定をするのですが、それらのphpファイルやhtmlファイルを格納するフォルダ「sync」をsampleの下に作成しておきます。
$ mkdir sync
sampleディレクトリに移動し、以下のコマンドを打ちます。
$vagrant init CentOS7
これでcentos7のosでvagrantが立ち上がり、vagrantfileが作成されます。
現在のディレクトリ構成は以下のようになっています。
sample ┠ sync/
┠ Vagrantfile
作成されたVagrantfileを以下のように編集します。
Vagrant.configure("2") do |config|
config.vm.box = "CentOS7"
#ローカルでアクセスするときのIPアドレス。初期設定は192.168.33.10のはず。
config.vm.network "private_network", ip: "192.168.33.10"
#同期先を指定。「カレントディレクトリ(.)を/vagrant以下に同期」と、「syncディレクトリを/var/www/」以下に同期する。
config.vm.synced_folder ".", "/vagrant"
config.vm.synced_folder "sync", "/var/www/"
end
そのあとにvagrantを立ち上げ、sshで中に入る。
$ vagrant up
$ vagrant ssh
vagrantの中での操作
vagrantの中に入ったら、ifconfigで先ほど指定した192.168.33.10にアクセスできているか確認する。
$ ifconfig
~~~略~~~~~
inet 192.168.33.10
~~~略~~~~~
のような表記があればOK。なければor違うIPになっていたら、一度vagrantから抜けて、reloadし、再度接続する。
(以下はない人だけね)
[vagrant@localhost]$ exit
$vagrant reload
$vagrant ssh
もう一度確認し、ifconfigで192.168.33.10にアクセスできているかを確認。
EPELリポジトリと、remiリポジトリ
アップデートし、EPELリポジトリと、remiリポジトリを追加しています。
$sudo yum update
$sudo yum -y install epel-release
$sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Nginx
/etc/yum.repos.d/nginx.repoを作成
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
enabled=0
gpgcheck=0
Nginxをインストールしていきます。
$sudo yum -y --enablerepo=nginx install nginx
$nginx -v
# バージョンが表示されればOK
nginxを起動します。
$sudo systemctl start nginx
$sudo systemctl enable nginx
nginxが起動できているかの確認をします。
$sudo systemctl status nginx
# ここで、「Active: active (running)」になっていればOK。こんな感じ
#Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
# Active: active (running) since 木 2019-04-18 15:27:49 CEST; 1h 46min ago
ファイアーウォール
このままではファイアーウォールによって阻まれアクセスできないため、80番ポート(httpのポート)を解放します。
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --reload
nginxの起動、ファイアーウォールの設定が終わったので、ブラウザにアクセスしてみます。
nginxのウェルカムページが表示されればOKです。
nginxの設定を編集
ここから、nginxの設定をいじっていきます。/etc/nginx/conf.d/default.confの設定ファイルを編集し、以下のようにします。
server {
listen 80;
server_name localhost;
#ここは「sync」フォルダ以下にあるファイルを参照してほしいので、「sync」の同期先であるvar/wwwを指定。
root /var/www;
charset UTF-8;
access_log /var/log/nginx/www.example.com.access.log main;
error_log /var/log/nginx/www.example.com.error.log;
location / {
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
nginxの設定ファイルをいじった後はrestartしなければいけないので、以下で再起動します。
$ systemctl restart nginx
php,php-fpmのインストール
$ yum -y install --enablerepo=epel,remi,remi-php72 php php-mbstring php-pdo php-mysqlnd php-fpm php-gd
新しいphpと、php-fpmが入っているか確認。
$ php -v
$ php-fpm -v
次に、/etc/php-fpm.d/www.conf にあるphp-fpmの設定ファイルを編集します。
この5つの記述をコメントアウト(;)もしくは削除して、(それぞれ離れたところにあるので探しずらいかも)
;listen = 127.0.0.1:9000
;user = apache
;group = apache
;listen.owner = nobody
;listen.group = nobody
以下を追加。
user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.group = nginx
listen.owner = nginx
設定を反映させるために、php-fpmを再起動します。
$ sudo systemctl restart php-fpm
ngixと同様、起動できているか確認します。「Active: active (running)」になっていればOK
$systemctl status php-fpm
/var/www/にindex.phpを作成して、phpの起動を確認したいのですが、「/var/www/以下に移動して、viでindex.phpを作成して・・・」とかはしなくておk。
最初にしたVagrantfileの設定で「sync」に作成したものは「var/www」に同期されるから、自分のパソコンのエディタで作成して大丈夫。
<?php phpinfo(); ?>
ここで、192.168.33.10にアクセスして、以下のようになっていればOKです!!!

もしエラー出た場合はnginxのエラーログ(/var/log/nginx/error.log)などを見るといいでしょう。