2017年10月19日木曜日

CakePHP3のインストール

最初にすること


私はVagrant+virtual box環境にCakephp3をインストールしました。
なのでここではその前提で話を進めていきます。

必要なPHPのパッケージをインストール


まず必要なパッケージをインストールします。
$ sudo yum -y install php-intl php-mbstring php-xml

IUSレポジトリを使っている場合は以下のように書かないとインストールできません。その場合は以下のようにバージョンを指定してインストールします。
$ sudo yum -y install php71u-intl php71u-mbstring php71u-xml


必要なパッケージがインストールできたらApacheの再起動をします。
CentOS 7でのコマンド
$ sudo systemctl restart httpd.service
CentOS 6でのコマンド
$ sudo service httpd restart 
できたら共有フォルダに行きます。
$ cd /vagrant

composerのインストール


composerをインストールします。インストールしたcomposerをさらにどこからでもコマンドとして使えるようにbinの中に入れます。
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

以下のコマンドを実行して画像のようなComposerが表示されれば成功です。
$ composer

「composer」コマンドを実行してこれが表示されればインストール成功です。

無事インストールできたら一応composerのバージョンを最新にします。
$ composer self-update

CakePHP3のインストール


cakephp3のインストールは次のようにcomposer経由でします。
$ composer create-project --prefer-dist cakephp/app cake
赤字の「cake」はcakephp3アプリで使用する名前です。自由に決められます。好きな名前を入力してください。今回は無難に「cake」という名前にします。

もしcomposerのインストールに失敗するなら以下のように管理者権限でインストールしましょう。管理者権限でcomposerのインストールは本来はあまり良くないです。
$ su
# composer create-project --prefer-dist cakephp/app cake

cakephp3のインストールが終わるとこういうふうに質問されます。
Created `config/app.php` file
Set Folder Permissions ? (Default to Y) [Y,n]?
これはフォルダのパーミッションをいい感じに書き換えてもいい?という質問です。特にフォルダのパーミッションにこだわりがなければyを入力・エンターで自動でパーミッションの設定をします。

まずはビルトインサーバーを使用してcakephp3がちゃんと動いている確認します。
以下のコマンドで共有フォルダからcakeのフォルダに移動します。
$ cd /vagrant/cake

以下のコマンドでサーバーを動かします。-Hオプションはホストの指定をするオプションです。vagrant内で動かしホスト側のブラウザからアクセスしたい場合は0.0.0.0を指定します。。
$ bin/cake server -H 0.0.0.0

するとサーバーが動きます。
Welcome to CakePHP v3.4.9 Console
---------------------------------------------------------------
App : src
Path: /vagrant/cake/src/
DocumentRoot: /vagrant/cake/webroot
---------------------------------------------------------------
built-in server is running in http://0.0.0.0:8765/
You can exit with `CTRL-C`

Ctrl + cでビルトインサーバーを終了します。

もしvagrantのプライベートネットワークを使っている場合、ipは192.168.33.10なはずです。その場合、http://192.168.33.10:8765/とポート指定したURLを使ってホストのブラウザからcakephp3のindexにアクセスします。

私の場合はパブリックネットワークを使っているので、URLはこんな感じです。→ http://192.168.11.100:8765/
(vagrantを使っていない場合、普通にhttp://localhost:8765/からアクセスできるはず)

すべて問題なくできている場合、以下のように表示されます。



うまく表示できました。

今度はApacheの設定を変えます。以下のコマンドでApacheの設定ファイルを編集します。
$ sudo vi /etc/httpd/conf/httpd.conf

vi (あるいはvim) の操作法
「a」を押すと編集モードになります。エスケープキー(esc)を押すと編集モードを終了、コマンドモードに戻ります。「?aaa」と入力すると「aaa」という文字列でそのファイルの中を検索し、最初のヒット内容に移動します。「n」を押すことで次のヒット内容に移動します。
何もせずにファイルを閉じるにはコマンドモードで「:q!」を入力します。編集内容を保存してファイルを閉じるには「:wq」を入力します。

さてApacheの設定ファイルを開き、.htaccess overrideが許可されていることを確認します。さらにAllowOverrideがAllになっていることを確認します。Requireはデフォルトでall grantedだったのでそのままにしました。

<Directory "/var/www/html" />
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

気をつけてほしいのは同じような設定が書かれた設定が複数あることです。必ず編集しようとしている設定のディレクトリが「<Directory "/var/www/html" />」であることを確認したうえで編集してください。


できたら :wq を入力してファイルを保存して閉じます。

Apacheの再起動をします。
CentOS7の場合
$ sudo systemctl restart httpd.service
CentOS6以前の場合
$ sudo service httpd restart

今度はポート番号なしでcakephp3のURLにアクセスします。
プライベートネットワーク → http://192.168.33.10/cake/
パブリックネットワーク → http://(自分で設定したIP)/cake/

以下のようにうまく表示されれば成功です。
うまく行きました

--- 表示できたけどエラーが出てる場合 ---
Vagrantでcakephp3を使用している場合キャッシュに書き込めないとかいうエラーがでることがあります。その場合はフォルダのownerをapacheに変えます。
$ sudo chown -R apache:apache /vagrant/cake
Vagrantのバージョンが古いのかよくわかりませんが共有フォルダ内のownerが変更できないことがあります。その場合は一旦仮想マシンを終了、Vagrantfileに以下をそのまま書き加えます。環境に応じて書き換えたりする必要はありません。
config.vm.synced_folder "./", "/vagrant", owner: 'vagrant', group: 'apache', mount_options: ['dmode=777', 'fmode=777']
それで仮想マシンをもういちど起動します。
なおファルダ・ファイルの権限はls -lコマンドで確認できます。

それでも治らない場合はSE Linuxが悪さをしている可能性があります。
以下のようにSE Linuxをオフにします。
$ sudo getenforce
Enforcing
$ sudo setenforce 0
$ sudo getenforce
Permissive
それで仮想マシンを再起動します。
-----------------------------------------------------

cakephp3のindexの表示までうまくいったら、今度はcakephp3用のデータベースの設定をします。mysqlのユーザー名をroot、パスワードもrootとすると以下のコマンドでtestという名前のデータベースを作成します。
$ mysql -u root -proot
mysql> CREATE DATABASE test;
mysql> exit

今度はcakephp3のapp.phpを書き換えます。
$ sudo vi /vagrant/cake/config/app.php

Datasourcesのusername, password, databaseの値を書き換えます。
「?Datasources」で検索するとすぐ見つかると思います。
'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost',
        /**
         * CakePHP will use the default DB port based on the driver selected
         * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
         * the following line and set the port accordingly
         */
        //'port' => 'nonstandard_port_number',
        'username' => 'root',
        'password' => 'root',
        'database' => 'test',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,

できたら再度cakephp3のindexにアクセスします。
以前はデータベースの部分にエラーがありました。

設定後はエラーが消えているはずです。

これでcakephp3のインストール終了!


リンク:
1. vagrantとvirtual box
2. アパッチのインストール
3. MySQLのインストール
4. PHPのインストール
5. CakePHP3のインストール
6. MigrationとBake