Cakephp3 + CentOS7 + Vagrant + Apache + MySQL 環境セットアップ


目次と概要

Cakephpを起動、DBと接続、Cakephpの開発開始できるまでを目標にします。
1. Vagrantのインストールと初期設定を実施します。
2. Vagrantの設定ファイル(provision.sh)に各プログラムのインストールと設定を記述していきます。こうすることで、Vagrant初期起動時に必要なプログラムがインストールされ、次の開発環境セットアップも楽になる。(Anaibleはまだ導入できていません(´;ω;`))
3. Vagrant起動後にCakephpのインストール、設定を行います。
4. MySQLの設定を行います。
5. ハマりポイント解説
6. 結びに

本編

1. Vagrantのインストールと初期設定

Vagrantのインストールと初期設定は下記サイトを参考に実施しました。
(私はCentOS Linux release 7.3.1611 を使用しました。)
https://qiita.com/Esfahan/items/41c4469f28f6011ab33b

Vagrantfile設定

Vagrantfile内の以下内容を編集します。

# provision.shファイルの起動設定
config.vm.box = "bento/centos-7.3"

config.vm.provision :shell, :path => "provision.sh" //足す
# VMのIPアドレスを設定
config.vm.network "private_network", ip: "192.168.33.111"
# パーミッションの設定 <超ハマりポイント>
# パーミッション設定しないと、Cakephp画面が表示されません。”777”ではなく、”755”でもOK。
config.vm.synced_folder "./", "/vagrant", :mount_options => ["dmode=777", "fmode=777"]

2. "provision.sh"ファイルに、各プログラムのインストール、設定を記述

Vagrantfileと同じフォルダに"provision.sh"を作成。
各プログラムのインストール、設定を"provision.sh"内に記述し、Vagrant起動と合わせて行います。

# Apache、git、unzipのインストール
sudo yum -y install httpd unzip git

# PHPのインストール。Epel, Remiリポジトリから行います。
sudo yum -y install epel-release
sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum -y install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-intl php-mysql php-xml

# MySQLのインストール
sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
sudo yum -y install mysql-community-server

# Cakephpコンポーザーのダウンロートとコンポーザーを/bin下に移動
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

# ApcheをVagrant起動時に起動するように設定と起動
sudo systemctl enable httpd.service
sudo systemctl start httpd.service

# Vagrantの共有フォルダにパスを設定
sudo rm -rf /var/www/html
sudo ln -fs /vagrant /var/www/html

#MySQLをVagrant起動時に起動するように設定と起動
sudo systemctl enable mysqld.service
sudo systemctl start mysqld.service

できましたら、Vagrantを起動してください。

vagrant up

ssh起動後、各プログラムが正しくインストールされているかは下記コマンドで確認してください。

vagrant ssh
php -v
httpd -version
mysql --version

3. Vagrant起動後に必要な設定を行なっていきます。

# ApacheのDocumentRootに移動
cd /var/www/html/
# Composerを用いて展開
composer create-project --prefer-dist cakephp/app myapp 

myappフォルダが作成され、Cakephpファイルがインストールされます。
2.にてVagrant共有フォルダにパスを設定しているため、Vagrantfileprovision.shと同じフォルダからも確認できます。
それでは、1.にて設定したVMのIPアドレスにブラウザからアクセスしましょう。
http://192.168.33.111/myapp/

なんか味気ない画像が表示されるかと思いますが、こちらはCSSファイルが適用されていません。
CSSファイル設定のためにApacheコンフィグの設定を行います。
ssh起動後、下記の設定を行なってください。

# コンフィグファイルの設定編集します。
sudo vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
   ~
    Options FollowSymLinks
    ~
    AllowOverride All ←NoneからAllにする
</Directory>
# 設定を反映させるために、Apcheの再起動を行います。
sudo systemctl restart httpd

もう一度アクセスすると、

このようにいい感じのページが表示されます。

4. MySQLの設定を行います。

MySQLのデータベース、ユーザー設定を行なった上で下記設定を行なってください。
~config/app.phpを開き、SQLのユーザー名、パスワード、データベース名を記述します。

'Datasources' => [
  'default' => [
     ~
     'username' => 'my_app',  //編集する
     'password' => 'secret', //編集する
     'database' => 'my_app', //編集する
     'encoding' => 'utf8',
     'timezone' => 'UTC',
     'flags' => [],
      'cacheMetadata' => true,
      'log' => false,

DBへのアクセスが成功すれば、Cakephpのトップ画面がこう変わります。

   ↓

5. ハマりポイント解説

パーミッション設定

この環境の場合、パーミッションの設定は通常のCakephpと同様にはできず、これがハマる原因になります。通常は、パーミッションの設定はCakephpのコンフィグファイルapp.phpで下記のようにできるですが…

'Cache' => [
  'default' => [
    'className' => 'File',
    'path' => CACHE,
  ],

  '_cake_core_' => [
    'className' => 'File',
    'prefix' => 'myapp_cake_core_',
    'path' => CACHE . 'persistent/',
    'serialize' => true,
    'duration' => '+2 minutes',
    'mask' => 0666,//666にする or 777
  ],

  '_cake_model_' => [
    'className' => 'File',
    'prefix' => 'myapp_cake_model_',
    'path' => CACHE . 'models/',
    'serialize' => true,
    'duration' => '+2 minutes',
    'mask' => 0666,//666にする or 777
  ],
],

今回の環境では、Vagrantのため、この設定はできません。VagrantではVagrant上での設定を優先するため、書き換えたとしても、すぐにVagrantの設定にて自動で書き換えられてしまうようです。
そのため、Vagrantfileにてパーミッションの設定を行う必要があります。

MySQLの選定

今回はバージョン5.6を採用しています。現在(2018/2)最新版は5.7ですが、こちらはルートパスワードの設定やら、初期設定がめんどいの人つ古いバージョンを使用しています。

6. 結びに

全部を書ききれてはないとは思いますが、私はこれだけあれば来月もセットアップできると思います。つまり、大体みんなできるだろうと。そもそもVagrantに手を出すなら、大体わかるんじゃないだろうか。私はVagrantとかは使ってたのに、SQLをほとんど触ったことがなく、SQL周りで苦労しました。この記事が、後から来る者の道を整えることができることを祈ります。