PHP
CentOS
vagrant
VirtualBox

Vagrantでphp開発環境を構築(CentOS7.2)

1. 事前準備(インストール系)

1.1. xcode のインストール

※ Macのみ

xcode とは,iPhone アプリなどを製作する際に必要な強力な開発ツールです.
今回は,後述するHomebrew のインストールに必要なので,インストールします.

  • AppStoreからインストールしてください.
  • インストール後に初回起動は済ませておく必要があります(初回起動後は終了させてしまってよい).
  • ターミナルで下記コマンドを実行してください(xcode のコマンドラインツールをインストールします).
ターミナル
$ xcode-select --install

1.2. Homebrew のインストール

※ Macのみ

Homebrew は,Mac でのみ使用が可能な,パッケージのインストールや管理が簡単にできるパッケージ管理ツールです.
(Linux でいうAPT やRPM ,YUM のようなものです)

  • ターミナルで下記のコマンドを実行してください(Homebrew をインストールします).
ターミナル
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew doctor    # 確認

参考:https://brew.sh (Homebrew の公式サイト)
参考:備忘録_最低限必要なbrewコマンド一覧 (Qiita)

1.3. Homebrew Cask のインストール

※ Macのみ

Homebrew Cask はHomebrewの拡張で,Homebrew ではインストール出来ないものもインストールして管理できる代物です.
GoogleChrome やAtom ,VSCode などのGUIアプリケーションをインストールすることができます.

今回は,後述するVirtualbox とVagrant をインストールするためにHomebrew Cask を使用します.

  • ターミナルで下記のコマンドを実行してください(Homebrew Cask をインストールします).
ターミナル
$ brew tap cask room/cask

参考:みんなhomebrew-caskって知ってるか? (Qiita)

1.4. Virtualboxのインストール

Virtualbox は,仮想環境を作成するためのソフトウェアです.

  • Windows の場合 公式サイト からダウンロードしてインストールしてください.
  • Mac の場合下記コマンドを実行してください(Virtualbox をインストールします).
ターミナル
$ brew cask install virtualbox
$ brew cask list    # 確認

1.5. Vagrantのインストール

Vagrant は,仮想環境の構築や共有を簡単に行うことができるツールです.
Virtualbox と組み合わせることで,仮想環境の構築を非常に簡単に行うことができます.

  • Windows の場合 公式サイト からダウンロードしてインストールしてください.
  • Mac の場合,下記コマンドを実行してください(Vagrant をインストールします).
ターミナル
$ brew cask install vagrant
$ brew cask list    # 確認
$ vagrant -v    # 確認

2. 仮想環境の構築

2.1. boxの追加

vagrant では,構築する仮想環境のOS のイメージファイル等をまとめた,box を用いて環境を構築していきます.

  • 下記コマンドを実行してください(box をインストールして追加します).
ターミナル
$ vagrant box add <box名> https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box
$ vagrant box list    # 確認

2.2. Vagrant起動

先ほど追加したbox を用いて仮想環境の定義ファイルを作成します.

  • プロジェクトディレクトリに移動して,下記コマンドを実行してください(Vagrantfile 作成します).
ターミナル
$ vagrant init <box名>
$ ls    # 確認

参考:Vagrantの使い方 (Qiita)

2.2.1. Vagrantfile の編集

先ほどのコマンドを実行すると,プロジェクトディレクトリにVagrantfile が生成されています.
これが作成する仮想環境の設定ファイルです.
今回はこのVagrantfile に対して最低限の下記の編集を行います.

Vagrantfile
config.vm.network "private_network", ip: "192.168.33.10" 
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.synced_folder "./", "/var/www"

参考:VagrantコマンドとVagrantfileの設定メモ (Qiita)

2.2.2. 仮想マシンの起動

  • 下記のコマンドを実行してください(仮想マシンを起動します).
  • (仮想マシンを終了させるには,$ vagrant halt です.)
ターミナル
$ vagrant up
$ vagrant status    # 確認

$ vagrant up で仮想マシンを起動するときに下記のエラーメッセージが出て,共有フォルダのマウントに失敗することがある.

エラーメッセージ
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3`,dmode=777,fmode=666 vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant`,dmode=777,fmode=666 vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

これは,VirtualBoxのアップデート後に起きる可能性があり,フォルダ共有機能を提供しているGuest Additionsをvagrant up時に自動的に更新してくれるプラグイン「vagrant-vbguest」をインストールしておくことで解決できます

  • 下記コマンドを実行してください(vagrant-vbguest をインストールします).
ターミナル
$ vagrant plugin install vagrant-vbguest

再び$ vagrant up することで更新がされる

参考:Vagrantで共有フォルダのマウントに失敗するときの対処方法

2.3. ssh接続

仮想環境を起動したら接続しましょう.vagrantの場合は簡単です.

  • 下記コマンドを実行してください(仮想マシンにSSH接続します).
  • (先ほどVagrantfile に設定した $ 192.168.33.10 ssh でも大丈夫です.)
ターミナル
$ vagrant ssh

3. 仮想環境の設定

3.1. yumの更新

CentOS では,パッケージをインストールしたり管理したりするために,yum というパッケージ管理ソフトを利用します.
まず最初に,既にインストールされているyum を最新版にアップデートします.

  • 下記コマンドを実行してください(yum をアップデートします).
ターミナル
$ sudo yum update

yum のアップデートをする際に,下記のエラーが発生する場合があります.

エラーメッセージ
The GPG keys listed for the "Puppet Labs PC1 Repository el 7 - x86_64" repository are already installed but they are not correct for this package. Check that the correct key URLs are configured for this repository.   Failing package is: puppet-agent-1.8.2-1.el7.x86_64 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puppetlabs-PC1

その場合は、

ターミナル
$ curl -L https://yum.puppetlabs.com/RPM-GPG-KEY-puppet -o /tmp/RPM-GPG-KEY-puppet
$ gpg --with-fingerprint "/tmp/RPM-GPG-KEY-puppet"
$ sudo cp /tmp/RPM-GPG-KEY-puppet /etc/pki/rpm-gpg/RPM-GPG-KEY-puppetlabs-PC1

を実行してやり直してください.

参考:http://deblock-technologies.com/centos-7-2-gpg-key-issue/

3.2. firewallの無効化

  • 下記のコマンドを実行してください.
ターミナル
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
$ systemctl status firewalled    # 確認

3.3. SELinux の無効化

  • 以下の設定ファイルを修正してください.
/etc/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 - No SELinux policy is loaded.
### Disalbe SELINUX begin
##SELINUX=enforcing
SELINUX=disabled
### Disalbe SELINUX end
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
  • 以下のコマンドを実行してください(OSを再起動します).
ターミナル
$ sudo shutdown -r now

3.4. git, vimのインストール

  • 下記コマンドを実行してください.
ターミナル
$ sudo yum install git
$ sudo yum install vim
$ sudo yum install zip unzip
  • 下記コマンドを実行してください(gitの初回設定を行います).
ターミナル
# ユーザ名とメールアドレスを設定
$ git config --global user.name "<ユーザ名>"
$ git config --global user.email "<メールアドレス>"

# gitで使用するデフォルトのエディタをvimに変更
$ git config --global core.editor 'vim -c "set fenc=utf-8"'

# gitコマンドの結果に色をつける
$ git config --global color.diff auto
$ git config --global color.status auto
$ git config --global color.branch auto

# push方法を指定する(Git 1.8系以降の場合)
$ git config --global push.default simple

$ git config --list    # 確認

参考:git push時に表示されるwarning: push.default is unset...の意味と解決方法

  • ~/配下に.vimrcを作成してください(これを作成するだけでvim の使い勝手が抜群に良くなります).
.vimrc
"文字コードをUFT-8に設定
set fenc=utf-8
" バックアップファイルを作らない
set nobackup
" スワップファイルを作らない
set noswapfile
" 編集中のファイルが変更されたら自動で読み直す
set autoread
" バッファが編集中でもその他のファイルを開けるように
set hidden
" 入力中のコマンドをステータスに表示する
set showcmd

" 行番号を表示
hi Comment ctermfg=gray
set number
" 現在の行を強調表示
set cursorline
" 行末の1文字先までカーソルを移動できるように
set virtualedit=onemore
" インデントはスマートインデント
set smartindent
" ビープ音を可視化
set visualbell
" 括弧入力時の対応する括弧を表示
set showmatch
" ステータスラインを常に表示
set laststatus=2
" コマンドラインの補完
set wildmode=list:longest
" 折り返し時に表示行単位での移動できるようにする
nnoremap j gj
nnoremap k gk

" 不可視文字を可視化(タブが「▸-」と表示される)
set list listchars=tab:\▸\-
" Tab文字を半角スペースにする
set expandtab
" 行頭以外のTab文字の表示幅(スペースいくつ分)
set tabstop=2
" 行頭でのTab文字の表示幅
set shiftwidth=2

" 検索文字列が小文字の場合は大文字小文字を区別なく検索する
set ignorecase
" 検索文字列に大文字が含まれている場合は区別して検索する
set smartcase
" 検索文字列入力時に順次対象文字列にヒットさせる
set incsearch
" 検索時に最後まで行ったら最初に戻る
set wrapscan
" 検索語をハイライト表示
set hlsearch
" ESC連打でハイライト解除
nmap <Esc><Esc> :nohlsearch<CR><Esc>

参考:何も考えず~/.vimrcにこれを書くんだ! 〜vim初心者によるvim初心者のためのvim入門〜

3.5. 最適化

ターミナル
$ sudo yum clean all
$ sudo dd if=/dev/zero of=/EMPTY bs=1M
$ sudo rm -f /EMPTY

4. PHP 開発環境の整備

4.1. Apacheのインストール

  • 下記コマンドを実行してください(Apacheをインストールします).
ターミナル
$ sudo yum install httpd
$ httpd -v    # 確認
  • /etc/httpd/conf/httpd.conf を下記のように書き換えてください.
httpd.conf
User vagrant    # 66行目
Group vagrant    # 67行目
  • 下記コマンドを実行してください(自動起動設定をします).
ターミナル
$ sudo systemctl start httpd
$ sudo systemctl enable httpd
  • Apacheが起動出来たので http://192.168.33.10/ にアクセスするとApacheのWelcome画面が表示されます.

4.2. phpのインストール

php をインストールするには,EPEL リポジトリ,Remi リポジトリを追加する必要があります.

  • 下記コマンドを実行してください(php をインストールします).
ターミナル
$ sudo yum install opal-release
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-mysqlnd php-xml
$ php -v    # 確認

参考:yumリポジトリ追加リスト 完全版

  • /etc/httpd/conf/httpd.conf を下記のように書き換えます.
httpd.conf
AllowOverride All    # 103行目,125行目,151行目
DirectoryIndex index.php index.html    # 164行目
  • Apache を再起動します.
ターミナル
$ sudo systemctl restart httpd.service
  • /var/www/html 配下にindex.phpを作成します.
index.php
<?php
    echo 'Hello world.';
?>
  • 再び http://192.168.33.10/ にアクセスすると,「 Hello world. 」が出力されていることが確認できます.

4.3. composer のインストール

composer は,依存性管理ツールというもので,フレームワーク等を使って開発するときにもとても役に立つ代物です.

  • 下記コマンドを実行してください(composer をインストールします).
ターミナル
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
$ composer -V    # 確認

参考:PHP開発でComposerを使わないなんてありえない!基礎編

4.4. mariaDBのインストール

参考:mariaDBとは

  • 既にインストール済みのmariaDB を削除します.
ターミナル
$ sudo yum remove mariadb marinadb-libs
  • /etc/yum.repos.d/MariaDB.repoにインストール元を追加する.
MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
  • 下記コマンドを実行してください(mariaDB をインストールします).
ターミナル
$ sudo yum install --enablerepo=mariadb MariaDB-common MariaDB-devel MariaDB-shared MariaDB-compat MariaDB-server MariaDB-client
  • 下記コマンドを実行してください(自動起動設定をします).
ターミナル
$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
  • テスト接続をします.
ターミナル
$ mysql -u root

MarinaDB [(none)]> SHOW DATABASES;
MarinaDB [(none)]> USE test;
MarinaDB [test]> SHOW TABLES;
MariaDB [test]> CREATE TABLE sample (id int auto_increment, name varchar(30), index(id));
MariaDB [test]> insert into sample (name) values ('Yamada Taro');
MariaDB [test]> insert into sample (name) values ('Tanaka Hanako');
MariaDB [test]> exit
  • PHPからも接続してみます.
index.php
<?php
    $dsn = 'mysql:dbname=test';
    $user = 'root';
    $pass = '';

    try
    {
        $db = new PDO($dsn,$user,$pass);
        $sql = "SELECT * FROM sample";
        foreach ($db -> query($sql) as $row)
        {
            echo($row['id'] . ":" . $row['name'] . "<br>");
        }
    }
    catch(PDOException $e)
    {
        die("die");
    }
    $db=null;
?>

参考

ゼロからphp7環境構築 - 0.事前準備 (Qiita)
ゼロからphp7環境構築 - 1.DBサーバー設定 (Qiita)
ゼロからphp7環境構築 - 2.Appサーバー設定 (Qiita)