php仮想環境構築(php7 + Nginx + MariaDB)


PHP7の環境構築手順

事前準備

vagrantとvirtualboxをインストール

Vagrantの公式サイトからインストーラをダウンロードする
https://www.vagrantup.com/downloads.html

VirtualBoxの公式サイトからインストーラをダウンロードする
https://www.virtualbox.org/wiki/Downloads

VirtualBoxへBoxの追加

まずは、使用したいOSを選択する。
http://www.vagrantbox.es/
または
https://app.vagrantup.com/boxes/search
使用するBOXが決まったら、以下のようにする

vagrant box add VM名 boxファイルURL
↓
EX)こんなかんじ
vagrant box add boxes-centos6.4 https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box

本環境は、上記のBOXを使います

vagrant box list でBOXの一覧を表示する
listに追加されていることを確認したら、Vagrantfileの作成を行います。

Vagrantfile作成および編集

vagrant init Box名
EX)↓
vagrant init boxes-centos6.4

これでVagrantfileが作成されるので、編集を行います。
※vagrantとLocalを同期させたいときは:
vagrantとlocalを同期させる方法

vim Vagrantfile
※ vimが入っていなければ、viでもエディタ編集でも可です。
※ エディタでも可です。

開いたら、
:set nu
で行番号を表示します。

29行目にある

Vagrantfile.
#config.vm.network "private_network", ip: "192.168.33.10"

#のコメントアウトをはずします。
xキーで削除できます。

できたら、Shiftを押しながらZキーを2回押す。

これができたら、
vagrant up
とコマンドを叩き、仮想環境を起動させます。

ここまでできたら、
windowsは、teratermなどでsshする
MACは、ターミナルからvagrant sshする
※ユーザは、vagrant
 パスフレーズも、vagrant

仮想環境内に入ったら、
sudo suを実行して、rootユーザに変更する
[vagrant@localhost ~]$ sudo su
SELINUXをdisabledに変更しておく
[root@localhost vagrant]# vi /etc/selinux/config
以下の記述に変更する
SELINUXを無効にしておく

config.
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted

CentOSの日本語化を行う

以下のコマンドを叩く
[root@localhost vagrant]# yum -y groupinstall "Japanese Support"
スクリーンとキーボードの日本語化
[root@localhost vagrant]# vi /etc/sysconfig/i18n
以下のように変更を行う

LANG="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"

日本語キーボードを利用している場合は、続いて以下を実施します
[root@localhost vagrant]# vi /etc/sysconfig/keyboard

KEYTABLE="jp106"
MODEL="jp106"
LAYOUT="jp"
KEYBOARDTYPE="pc"

マシンをリブートする
reboot

仮想環境の再起動がかかるので、少し待ってから
SSHで再度ログインする

先に、yumをアプデを行う。(ちょっと長い)
yum -y update

いよいよLNMP環境の構築

rootユーザに変更する。
パスワードは、vagrant
sudo suでも可

MariaDBインストール

MariaDBのPGP keyをインストール

[root@localhost vagrant]# rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

その後、yum.repos.dの配下にmariadb.repoを作成する

[root@localhost vagrant]# vi /etc/yum.repos.d/mariadb.repo

以下を記載

mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

※baseurlは、たまに参照先が404のことがあるので、その場合は、ほかのリポジトリを参照させる

MariaDBをインスコする前に綺麗にしておく
[root@localhost vagrant]# rpm -e --nodeps mysql-libs
MariaDBをyumでインストール
[root@localhost vagrant]# yum install -y MariaDB-devel MariaDB-client MariaDB-server

MariaDBを起動させてみる
[root@localhost vagrant]# /etc/init.d/mysql start
Starting MySQL. SUCCESS!

サクセスがでたらOK

できたら、rootパスワードを設定します
/usr/bin/mysqladmin -u root password 'new-password'

EX)
/usr/bin/mysqladmin -u root password 'root'

設定したらさっそくrootユーザでログインする
mysql -u root -p
次にパスワード聞かれる
root
今回は、rootユーザのパスワードをrootに設定
これでOK

自動起動を設定しておく
chkconfig mysql on

ユーザ作成や権限付与はこちら:
ローカル環境のMariaDBにユーザ作成と権限を付与する時

仮想環境にあるmariadbにダンプファイルをインポートしたい場合は、こちら:
仮想環境(vagrant + virtualbox)にあるmariadbにダンプファイルをインポートする

Nginxのインストール

以下を叩く
[root@localhost vagrant]# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

コピーしておく
[root@localhost vagrant]# cp -p /etc/yum.repos.d/nginx.repo /etc/yum.repos.d/nginx.repo.org

設定編集
[root@localhost vagrant]# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/nginx.repo

nginxをインストール
[root@localhost vagrant]# yum -y --enablerepo=nginx install nginx

バージョン確認
[root@localhost vagrant]# nginx -v

Nginxのconfファイル
/etc/nginx/nginx.confの31行目に以下をインクルードする記述があるので、環境ごとに読み込ませる必要がある場合は、
/etc/nginx/conf.dの配下にデプロイする(v.conf)

v.confは、後に具体例を記載します(TODO)

php7をインストール

[root@localhost vagrant]# rpm --import http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6

[root@localhost vagrant]# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

[root@localhost vagrant]# yum -y update epel-release

[root@localhost vagrant]# cp -p /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.org

[root@localhost vagrant]# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo

[root@localhost vagrant]# rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi

[root@localhost vagrant]# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

[root@localhost vagrant]# yum -y update remi-release

例えば、以下とか(適当)
[root@localhost vagrant]# yum -y --enablerepo=remi-php70,epel install php-fpm php-gd php-devel php-gmp php-mbstring php-mcrypt php-opcache php-pdo php-pear-MDB2-Driver-mysqli php-pecl-memcached php-pecl-msgpack php-xml php-phpunit-PHPUnit php-pecl-xdebug

その会社の開発標準であわせる(偉い人に聞く)

BC-MATHを入れる場合は、以下も実行しておく
[root@localhost vagrant]# rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@localhost vagrant]# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
[root@localhost vagrant]# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
[root@localhost vagrant]# yum -y install --enablerepo=remi,remi-php70 php-bcmath

[root@localhost vagrant]# php -v
PHP 7.0.17 (cli) (built: Mar 14 2017 15:23:16) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Xdebug v2.5.1, Copyright (c) 2002-2017, by Derick Rethans
with Zend OPcache v7.0.17, Copyright (c) 1999-2017, by Zend Technologies

php-fpmとnginxの設定を行う

socketで接続

念のため、コピーしておく
[root@localhost vagrant]# cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.org
[root@localhost vagrant]# vi /etc/php-fpm.d/www.conf

今回は、nginxとphp-fpmとの接続に、UNIX socketを指定してみる

以下、6行を見つけて書き換える

user = nginx
group = adm
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

再起動
[root@localhost vagrant]# /etc/rc.d/init.d/php-fpm restart

再起動を行うと初回の場合、
Stopping php-fpm:[FAILED]となるが、もともと動いてないものを
ストップするわけなので、気にしない

再起動することにより、
/var/run/php-fpmのディレクトリにphp-fpm.sockが作成される

所有者を変更しておく
[root@localhost vagrant]# chown nginx:nginx /var/run/php-fpm/php-fpm.sock

(別途入れる方)xdebugのインストール

[root@localhost vagrant]# yum -y install --enablerepo=remi-php70 php-devel php-pear
(動かなかったら --disableplugin=priorities これもinstallと--enablerepoの間に追加してみる)
--enablerepo=remi-php70ここが大事こいつを入れないとphp5.6のやつを見に行こうとしてエラーになるはず

sudo pecl install xdebug
〜(略)〜
Build process completed successfully
Installing '/usr/lib64/php/modules/xdebug.so'
install ok: channel://pecl.php.net/xdebug-2.3.2
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=xdebug.so" to php.ini

xdebugは、インストール完了後に、エクステンションのパスが出力されるので
必ずメモしておく

※今回の場合は、/usr/lib64/php/modules/xdebug.soこれである

次は、インストールしたXdebugを有効化します。

[root@localhost vagrant]# vi /etc/php.ini

以下を追記する。(一例です,記載する箇所は、お好きなところで)
[xdebug]
zend_extension="/usr/lib64/php/modules/xdebug.so"
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.remote_host=10.0.2.2
xdebug.remote_port=9000

php.iniでXdebugのエントリが表示されれば有効化完了です。
[root@localhost vagrant]# php -i | grep xdebug
xdebug
xdebug support => enabled
〜(略)〜

vagrantとeclipseの設定方法は、こちら:
vagrantのXdebugでEclipseからデバッグする

自動起動設定

nginxの自動起動設定
chkconfig --add nginx
chkconfig nginx on

php-fpmの自動起動設定
chkconfig php-fpm on

以上が環境設定です。