春だし CakePHP 3.0をComposer経由でCentOS6.5にインストール してみた


春ですね。
今回はVagrant上に構成しました。firewallの設定などは割愛します。
vagrant環境は以下の通りです。
OS：CentOS6.5
PHP：5.6.7
MySQL：5.1.73

##PHPをインストールする
###CakePHP3系から、PHPのバージョンが 5.4.16以上が必要になっています。デフォルトのレポジトリだとPHP5.3.3になってしまうので他のレポジトリからインストールしなければなりません。
1. まず、remiのレポジトリを追加します。

	```bash:console
	$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
	```

1. PHPと必要なモジュールをインストールします。

	```bash:console
	$ sudo yum install --enablerepo=remi --enablerepo=remi-php56 php php-intl php-mbstring php-mysqlnd
	```
	
	```bash:console
	$ php -v
	PHP 5.6.7 (cli) (built: Mar 19 2015 15:09:09)
	Copyright (c) 1997-2015 The PHP Group
	Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
	```
	:+1: 

##Composerをインストールする
1. 現在の作業ディレクトリにインストールします。

	```bash:console
	$ curl -sS https://getcomposer.org/installer | php
	```

1. 今回はグローバルにcomposerをインストールしますので、すでにPATHが通っているディレクトリにcomposerを移動させます。

	```bash:console
	$ sudo mv composer.phar /usr/local/bin/composer
	```
	
	```bash:console
	$ composer
		______
  	  / ____/___  ____ ___  ____  ____  ________  _____
 	 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
	/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
	\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
						/_/
	Composer version 1.0-dev (f10c71475167a4661225b14560ca0a400d730829)
	
	```
	:+1: 

##MySQLをインストール
1. MySQLは5.1.10以上ということなので普通にyumでインストールします。

	```bash:console
	$ sudo yum install mysql-server
	```

1. とりあえず、起動

	```bash:console
	$ sudo service mysqld start
	Starting mysqld:                       [  OK  ]
	```

1. バージョンを確認

	```bash:console
	$ mysql -u root
	mysql>
	mysql> \s
	--------------
	mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

	Server version:		5.1.73 Source distribution
	```
	
	```bash:console
	mysql> quit
	Bye
	```
	:+1:
	
##CakePHP3を取得
1. composerでインストール

	```bash:console
	$ composer create-project --prefer-dist cakephp/app [appName]
	Installing cakephp/app (3.0.1)
	  - Installing cakephp/app (3.0.1)
	   	Downloading: 100%

	Created project in test
	Loading composer repositories with package information
	Installing dependencies (including require-dev)
	  - Installing aura/installer-default (1.0.0)
	    Downloading: 100%

	  - Installing cakephp/plugin-installer (0.0.11)
    	Downloading: 100%
	 .
	 .
	 .
	 .
	
	Created `config/app.php` file
	Set Folder Permissions ? (Default to Y) [Y,n]?
	```
	なかなか時間がかかった。
	俺がPermission設定しちゃうけどどうする？ってComposerが聞いてくるのでとりあえず、デフォルトがyesなので何も入力せずEnter
	
	```bash:console
	Permissions set on /home/vagrant/test/tmp/cache
	Permissions set on /home/vagrant/test/tmp/cache/models
	Permissions set on /home/vagrant/test/tmp/cache/persistent
	Permissions set on /home/vagrant/test/tmp/cache/views
	Permissions set on /home/vagrant/test/tmp/sessions
	Permissions set on /home/vagrant/test/tmp/tests
	Permissions set on /home/vagrant/test/tmp
	Permissions set on /home/vagrant/test/logs
	Updated Security.salt value in config/app.php
	```
	でインストール終了。Security.saltの設定は後回し:+1:

##とりあえず、動くか確認
1. ビルトインサーバーがあるらしいので使ってみる。

	```bash:console
	$ cd [appName]
	$ bin/cake server

	Welcome to CakePHP v3.0.1 Console
	---------------------------------------------------------------
	App : src
	Path: /home/vagrant/test/src/
	DocumentRoot: /home/vagrant/test/webroot
	---------------------------------------------------------------
	built-in server is running in http://localhost:8765/
	You can exit with `CTRL-C`

	```
	おお、動いた
	この状態で http://192.168.33.10:8765/ にアクセスする。
	**(仮想マシン上に構成していない場合は http://localhost:8765/ で構いません。これ以降に出てくる192.168.33.10もすべてlocalhostに置き換えてください)**
	

	Chrome 「 **このウェブページにアクセスできません。** 」
	
	![みさわ](http://jigokuno.img.jugem.jp/20090622_1286768.gif)

1. 原因確認

	1. Vagrant上でcurlしてみる。
	
		```bash:console
		$ curl http://localhost:8765/
		<!DOCTYPE html>
		<html>
			<head>
			.
			.
			.
			.
			以下略
		```
		動いてるけどアクセスできない。

	1. Cakeサーバーを起動した状態でssしてみる。
	
		```bash:console
		$ ss -lnput | grep 8765
		tcp    LISTEN     0      128                  ::1:8765                 :::*      users:(("php",10467,10))
		```
		localAddress:Portが::1:8765になってる。これか。
		
	1. cake serverのオプションで起動してみる。
		
		```bash:console
		$ bin/cake server -h
		
		Welcome to CakePHP v3.0.1 Console
		---------------------------------------------------------------
		App : src
		Path: /home/vagrant/test/src/
		DocumentRoot: /home/vagrant/test/webroot/
		---------------------------------------------------------------
		PHP Built-in Server for CakePHP
		[WARN] Do not use this at the production environment

		Usage:
		cake server [-h] [-v] [-q] [-H] [-p] [-d]

		Options:

		--help, -h           Display this help.
		--verbose, -v        Enable verbose output.
		--quiet, -q          Enable quiet output.
		--host, -H           ServerHost
		--port, -p           ListenPort
		--document_root, -d  DocumentRoot
		
		```
		-Hでホストが指定できるようだ。
		
		```bash:console
		$ bin/cake server -H 0.0.0.0
		
		Welcome to CakePHP v3.0.1 Console
		---------------------------------------------------------------
		App : src
		Path: /home/vagrant/test/src/
		DocumentRoot: /home/vagrant/test/webroot
		---------------------------------------------------------------
		built-in server is running in http://0.0.0.0:8765/
		You can exit with `CTRL-C`
		
		```
		こんどこそ http://192.168.33.10:8765/
		
		![Imgur](http://i.imgur.com/nfiKHmD.png)
		
		やったね

##Apacheを動かす
1. 関連モジュールとしてインストールされる記憶があったけど、インストールされていないならインストールする。

	```bash:console
	$ sudo yum install httpd
	```

	```bash:console
	$ sudo service httpd start
	Starting httpd: httpd: apr_sockaddr_info_get() failed for vagrant-centos65.vagrantup.com
	httpd: Could not reliably determine the servers fully qualified domain name, using 127.0.0.1 for ServerName
											[  OK  ]
	```
	起動した
	ServerName変えろよって怒られる。
	
1. 確認
	http://192.168.33.10 アクセス
	
	![Imgur](http://i.imgur.com/ksGkUyw.png)
	
	おーけー
	で、こうやって開いたらCakeのページが出るようにしたい

1. Cakeをドキュメントルートに移動する
	
	```bash:console
	$ cd ..
	$ sudo mv [appName] /var/www/html/
	$ cd /var/www/html/
	$ ls
	[appName]
	```

1. ドキュメントルートを書き換える

	```bash:console
	$ sudo sed -i 's_DocumentRoot \"/var/www/html\"_DocumentRoot \"/var/www/html/[appName]\"_' /etc/httpd/conf/httpd.conf
	```
	**[appName]は各自書き換えてください**

1. Apache起動するたびに怒られるのでServerNameも書き換える

	```bash:console
	sudo sed -i 's/#ServerName www.example.com:80/ServerName 127.0.0.1/' /etc/httpd/conf/httpd.conf
	```
	
1. .htaccessも許可しとく

	```bash:console
	$ sudo sed -i '/<Directory \"\/var\/www\/html\">/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf
	```

	
1. Apache再起動

	```bash:console
	$ sudo service httpd restart
	Stopping httpd:                                        [  OK  ]
	Starting httpd:                                        [  OK  ]
	```

	今度は何も怒られない
	
1. 確認

	もう一度アクセス http://192.168.33.10
	
	![Imgur](http://i.imgur.com/cDaCo4m.png)
	
	めちゃエラー出てる
	どうやらキャッシュが書き込めない感じのPermissionDenied
	
1. [appName]のOwnerとGroupをapacheにする

	```bash:console
	$ sudo chown -R apache:apache [appName]
	```

1. 確認
	http://192.168.33.10 アクセス
	
	![Imgur](http://i.imgur.com/nfiKHmD.png)
	
	さきほどと同じ画面が出れば成功です:+1:

##MySQLに接続する

1. [appName]/config/app.phpを編集する
	
	```bash:console
	$ sudo vi [appName]/config/app.php
	```	

	```php:app.phpの210行目あたりから
	'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' => '',
            'database' => 'test',
            'encoding' => 'utf8',
            'timezone' => 'UTC',
            'cacheMetadata' => true,
	```
	こんな感じに書き換える。
	基本的にはusernameとpasswordとdatabaseしか書き換えなくてよい
	*各自の環境に合わせてください。
	
1. 確認

	![Imgur](http://i.imgur.com/hFMfIha.png)
	
	CakePHP is able to connect to the database.
	つながりました:+1:

##最後に
とりあえず、インストールしてApacheで動作したので今回は満足です。
ありがとうございました。