ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

Apache&Cakephpを連携させたときにハマってワロタ

スポンサードリンク

http://www.flickr.com/photos/23211051@N05/2426907677
photo by betacontinua


以前、maccakephpをインストールしたことがありますが、今回はcentos7とapacheでの連携でした。


vagrantを使って、開発環境を構築していましたが、ハマってしまいワロリッシュ(´・ω・)


その時の流れをメモ

環境について


ちなみに、vagrantで起動した仮想環境です。

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


ほとんどyumで入れました。

# apacheインストール
$ yum install httpd

# phpインストール&必要パッケージ
yum install php php-mbstring php-mysql


mysqlは、一度yumリポジトリを更新する作業があります。

$ wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
$ rpm -Uvh mysql-community-release-el7-5.noarch.rpm


リポジトリ入れたら、"/etc/yum.repos.d/mysql-community.repo"ファイルを修正します。

$ vim /etc/yum.repos.d/mysql-community.repo

################
[mysql-connectors-community]
- enabled=1
+ enabled=0

[mysql-tools-community]
- enabled=1
+ enabled=0

[mysql56-community]
- enabled=1
+ enabled=0

################


yumでインストール

$ yum --enablerepo=mysql56-community install mysql-community-server


ちなみに、mysqlについてはここを参考にしています。(めっちゃ助かりました^^)
CentOS7 64bitのyumリポジトリにMySQLを追加し、最新バージョンをインストール | kakiro-web カキローウェブ


apacheの設定

httpd.confを開き、修正します。

$ vim /etc/httpd/conf/httpd.conf

###################
146: - Options Indexes FollowSymLinks
146: + Options FollowSymLinks

153: - AllowOverride none
153: + AllowOverride All
###################


設定ファイル"/etc/httpd/conf.d/php.conf"も修正します。
下記内容を追加します。

追記

下記設定だと、"/"ディレクトリ以外でリダイレクトループが発生しました。

$ vim /etc/httpd/conf.d/php.conf
###################

# リダイレクトループの設定。これだけではNG
+ RewriteEngine on
+ RewriteRule    ^$ /app/webroot/    [L]
+ RewriteRule    (.*) /app/webroot/$1 [L]

###################


上記はミスなので、下記設定を使ってください。

$ vim /etc/httpd/conf.d/php.conf
###################

# 正しい設定
RewriteEngine on
RewriteRule    ^$ /app/webroot/    [L]
+ RewriteRule ^/app/webroot/ - [L]
RewriteRule    (.*) /app/webroot/$1 [L]

###################

問題ないか確認

$ apachectl -t
Syntax OK


うむ(´・ω・)


ちなみに、rewriteの設定部分はコピペしていたので

# 頭の"/"がなかった
RewriteRule    ^$ app/webroot/    [L]
RewriteRule    (.*) app/webroot/$1 [L]


って、設定したところ、「Bad Request 400」が発生しましたとさ(´・ω・)


修正の手法としては、cakephpのディレクトリがApacheのDocumentRootから見て、どの位置にあるのかを確認しなければいけません。環境に合わせて内容を修正してください。
※私は今回「/var/www/html/」以下に用意したので、DocumentRootからみると「/」以下になります。ので、この修正で治りました。

mysqlの設定


mysqlでは、ユーザーの修正とcakephp用のデータベースを作成します。


まずは起動からログイン

$ systemctl start mysqld.service
$ mysql


ユーザー削除、追加、データベースを作成します。

# ユーザー削除
mysql> DROP USER ''@'localhost';

# ユーザー追加(パスワードはちゃんとメモしておくこと)
# 今回は"root"ってユーザー名で、"password"っつー、パスワードを設定します。(めちゃめちゃ弱いパスワードなのでマネはしないでね)
mysql> grant all on *.* to root identified by 'password' with grant option;

# 作成したユーザーの確認
mysql> select host,user from mysql.user;

# データベース作成
mysql> create database cakephp;

# 作成したデータベースの確認
mysql> show databases;


設定は終了なので、一旦"quit"して、最後にログインできるかテスト

mysql> quit;

$ mysql -u root -p
Enter password:


〜(略)〜
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


ログインすることができましとさ

phpの設定


phpの設定箇所は"/etc/php.ini"という設定ファイルが存在します。

$ vim /etc/php.ini

###################
# 692行目付近
default_charset = "UTF-8"

# 878行目付近
date.timezone = "Asia/Tokyo"

###################


に、修正しましょう

cakephpをダウンロード


最後にcakephpをダウンロード&設定します。


まず、公式からダウンロードしてください。
CakePHP: 高速開発 php フレームワーク。 Home


ちなみに私は、gitから落としてきました。

$ git clone https://github.com/cakephp/cakephp.git
$ cd cakephp/
$ ls
CONTRIBUTING.md  README.md  app  build.properties  build.xml  composer.json  index.php  lib  plugins  vendors


ダウンロードしたcakephpApacheのDocumentRoot以下に配置します。

$ cd cakephp/
$ cp -rf * /var/www/html/
$ ls /var/www/html/
CONTRIBUTING.md  README.md  app  build.properties  build.xml  composer.json  index.php  lib  plugins  vendors


配置が完了したら、後に聞かれることを先に修正します。

$ vim app/config/core.php

###################
# 225行目を修正
# xxxxxが初期文字列だとNGなので、的当な文字列に修正します。
Configure::write('Security.salt', 'xxxxx');

# 230行目を修正
# xxxxxが初期数字列なので、的当な数字列に修正します。
Configure::write('Security.cipherSeed', 'xxxxxx');

# 270行目を修正
# コメントを外して、下記のように修正すればおk(日本であれば)
date_default_timezone_set('Asia/Tokyo');

###################


次にapp/tmpディレクトリのパーミッションを変更します。

$ chmod 755 -R app/tmp


次にデータベースとの連携の設定を行います。

database.phpを作成します。

$ cp app/Config/database.php.default app/Config/database.php


んで、修正

$ vim app/Config/database.php

###################

# "public default"の箇所を修正
class DATABASE_CONFIG {

        public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                # localhost -> 127.0.0.1
                'host' => '127.0.0.1',
                # user -> root
                'login' => 'root',
                # password -> password
                'password' => 'password',
                # database -> cakephp
                'database' => 'cakephp',
                'prefix' => '',
                'encoding' => 'utf8',
        );

# user -> mysqlで設定したユーザー名
# password -> mysqlで設定したユーザーのパスワード
# database -> mysqlで作成したデータベース
###################


以上が設定でした。

ブラウザからアクセス

すべてが完了しましたら、ブラウザからアクセスしましょう。
赤色の帯がでていなければほぼ完了です。


phpが動かないとか、そもそも404エラーで閲覧できないとかの場合は、どこか設定が間違っているはずなので、再度確認してみましょう。あとは環境の問題かな。

まとめ&感想


以前やったことではあるけど、アプリケーションが違うとかだと、当たり前だが設定はもちろん変わってくるので、思ったより時間がかかった(´・ω・)


趣味であればいいけど、やっぱり仕事上でこの時間消費のダメージはデカイ!


なので、今度は最近触り始めたDockerで試してみようと思う。


それでは。

CakePHPで学ぶ継続的インテグレーション

CakePHPで学ぶ継続的インテグレーション

CakePHP2 実践入門 (WEB+DB PRESS plus)

CakePHP2 実践入門 (WEB+DB PRESS plus)