HALDay 12

VagrantでCentOS7にNGINX+PHP-FPM+PHP7の環境構築

More than 3 years have passed since last update.


はじめに

PHP7の環境を作る時に色んなサイトを参考に進めたのですが度々躓いたので備忘録として残しておきます。

前提としてvagrantが動く環境があるという体で進めます。


1.CentOS7の準備


CentOS7のダウンロード

ターミナルを開き以下のコードを実行し、vagrant boxを作成します。

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を作成します。

cd ~/workspase

mkdir app
cd ./app
vagrant init CentOS7

そしてVagrantfile内のコードを

Vagrant.configure(2) do |config|

# config.ssh.insert_key = false

config.vm.box = "CentOS7"

# ここに設定してある"app"はプロジェクトが変わっても変更する必要なし
config.vm.define "app" do |node|
node.vm.hostname = "app"
node.vm.network "private_network", ip: "192.168.10.10"
node.vm.synced_folder ".", "/vagrant", disabled: "true"
node.vm.synced_folder "sync", "/var/www/", create: false, mount_options: ['dmode=775','fmode=755']
node.vm.provider "virtualbox" do |vb|
vb.cpus = "1"
vb.memory = "1024"
vb.name = "app"
end
end

config.vm.provision "shell", inline: <<-SHELL
sudo yum -y update
SHELL
end

に書き換え

mkdir sync

同期用のフォルダ階層も作っておきます。

そしてここまでが終了したら

vagrant up

# 完了したら
vagrant ssh

を行いVMに接続します。


2.EPELとGitのインストール


EPELのインストール

sudo yum install -y epel-release

完了したら

sudo vi /etc/yum.repos.d/epel.repo

6行目程にあるenabledを1から0へ変更します。


Gitのインストール

sudo yum -y install git


3.Nginxのインストール


リポジトリをクローンし、インストール

sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

sudo yum -y install nginx


nginx起動、ついでにサービス追加

sudo systemctl start nginx

sudo systemctl enable nginx


ファイアーウォールの設定の変更

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

sudo firewall-cmd --reload

ここまで進めるとhttp://appにアクセスするとnginxのTOPページが表示されます。


Nginxの設定

設定ファイルを作成し

sudo vi /etc/nginx/conf.d/app.conf


app.conf

server {

listen 80;
# ドメイン名もしくはipアドレス
server_name app;
# プロジェクトのルートディレクトリ
root /var/www;
index index.php index.html index.htm;

# '/'で始まる全てのURIに一致
location / {
# リクエストURI, /index.phpの順に処理を試みる
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;

include fastcgi_params;
}
}


変更が完了したらNginxを再起動させる

sudo nginx -s reload


設定の確認

ここまで進め、index.phpをルートディレクトリに作成し以下の内容を保存し

<?php phpinfo();

http://app/にアクセスすると 502 Bad Gateway が出てくればOKです


4.PHP7インストール準備


phpenvのインストール

phpenvというのはrubyで言うrubyenvみたいなものでphp-buildと合わせて使用することでPHPのバージョンを複数管理してくれる便利なものらしいです。

まずはphpenv本体のインストール

curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash

php-buildをphpenvのプラグインフォルダ内にクローンする。

git clone git://github.com/php-build/php-build.git ~/.phpenv/plugins/php-build

.bash_profileの設定

vi ~/.bash_profile

PATH=$PATH:$HOME/.phpenv/bin

eval "$(phpenv init -)"

を追記し.bash_profileをリロード

source ~/.bash_profile

そして

phpenv -v

を行いphpenvが入ったことを確認できればインストール完了です。


phpのインストール準備


phpをインストールするために必要な物を諸々インストール

sudo yum -y install gcc libxml2-devel bison bison-devel openssl-devel curl-devel libjpeg-devel libpng-devel readline-devel libxslt-devel autoconf automake patch

sudo yum --enablerepo=epel -y install libmcrypt-devel libtidy-devel


re2cのインストール

yumリポジトリから入れられないので直接

sudo yum -y install https://dperson.net/srpms/re2c-0.13.5-11.fc23.src.rpm


5.php7のインストール


phpenvを利用してphp7をインストール

phpenv install 7.0.0

色々完了すると[Success] Built 7.0.0とメッセージが出ますのでphpenvの更新とバージョン確認

phpenv rehash

phpenv versions

利用するphpのバージョンを設定

phpenv global 7.0.0

# phpのバージョンを確認
php -v


6.php-fpmの設定


php-fpmの設定ファイルを作成

cd ~/.phpenv/versions/7.0.0/etc

cp php-fpm.conf.default php-fpm.conf
vi php-fpm.conf

pid = /var/run/php-fpm.pidを追記しevents.mechanism = epollのコメントを外す

cd ~/.phpenv/versions/7.0.0/etc/php-fpm.d

cp www.conf.default www.conf
vi www.conf

user = nobodygroup = nobodyをコメントアウトし、その真下に以下を追加


www.conf

user = nginx

group = nginx

listen = 127.0.0.1:9000をコメントアウトし、その真下に以下を追加


www.conf

listen = /var/run/php-fpm.sock

listen.owner = nginx
listen.group = nginx


7.php-fpmの起動と自動起動登録

php-fpm起動用スクリプトをソースディレクトリ内から複製して作成

sudo cp /tmp/php-build/source/7.0.0/sapi/fpm/php-fpm.service.in /etc/systemd/system/php-fpm.service

sudo vi /etc/systemd/system/php-fpm.service

[Service]内の項目を全て消し


php-fpm.service

Type=simple

PIDFile=/var/run/php-fpm.pid
ExecStart=/home/vagrant/.phpenv/versions/7.0.0/sbin/php-fpm --nodaemonize --fpm-config /home/vagrant/.phpenv/versions/7.0.0/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

に置き換える


php-fpm 起動

sudo systemctl start php-fpm


自動起動設定

sudo systemctl enable php-fpm

最後にnginxを再起動

sudo nginx -s reload

そしてhttp://app/にアクセスするとphpinfoが実行されたページが表示されていれば完了です。


8.参考

phpenvの導入して複数バージョンのPHPを管理する

http://qiita.com/uchiko/items/5f1843d3d848de619fdf

PHP 7.0をVagrant上のCentOS 7にインストール

http://qiita.com/fujisada/items/f4935032c0961b4c614a