CakePHPをハッスルサーバーで公開する設定(独自ドメインなし)

CakePHPPHPで動作するWebフレームワークとして人気がある。
僕は、PHPをちょっと触り始めた去年くらいにCakePHPを始めてみたんだけど、CakePHPは複合主キーを基本的にサポートしない。データベースの知識がやや適当だった僕は、複合主キーを使っての正規化しかやったことがなかった。クエリを投げる等でなんとかCakePHPを動かす方法がないわけではないけど、巷で知られるTipsが適用しにくかったり、コードをガリガリ書きまくるのがCakePHPのポリシーに反しているような気がしてきて、僕はCakePHPを諦めた。
それからかれこれ一年。最近になり、なんとなくCakePHPの公式サイトを見てみたら、1.3系がリリースされていて、ちょうどレンタルサーバのアカウントもとっていたので、いっちょやってみるかと一から再開してみました。
長い前振りだったけど、ここに書き残しておきたいのは、レンタルサーバで公開するにあたっての設定方法のこと。ディレクトリ構成や各種ファイルの書き換えなど、やるべきことがいくつかあることは分かっていたけど、うまくいくまでにかなり時間がかかってしまった。

前提としては以下の通り

  • ハッスルサーバー (収容サーバは「rs15.naid.jp 」)
  • CakePHPはバージョン 1.3.3 を使用
  • 独自ドメインは設定していない

ディレクトリ・ファイル構成

ハッスルサーバでのディレクトリ構成は次のようになっている。

home
└─{アカウント名}
    └─public
        ├─log
        ├─ml
        ├─webalizer
        └─www ← Document Root

FTPでログインする場合、ルートディレクトリは「public」になる。ドキュメントルートは「www」。だからwドキュメントルートまでのフルパスはこうなる。

/home/{アカウント名}/public/www

どういう風に設置するかについては人それぞれ、ポリシーによると思うけど、僕の場合はCook BookにもあったようにCakeのコアとアプリケーション部分はドキュメントルートには置かないほうがよいと判断し、次のように配置することにした。

home
└─{アカウント名}
    └─public
        ├─cakephp ← これがコア!
        ├─app ← ここにアプリケーション
        ├─log
        ├─ml
        ├─webalizer
        └─www
            └─webroot ← appのなかにあるフォルダ「webroot」

この配置でファイルをアップロードする。アップロード時にはアクセス権限(パーミッション)や文字コードなど、気にする必要があることはいくつかあるけど、僕自身がFFFTPに入れてる設定で動いてしまっているので、ここで触れる予定はない。あと、「app」と「webroot」は任意の名前に変えている。

ファイル書き換え

想定のアクセス先URLはこれ。下の文字列はURL相当のフルパスになる。ちなみに、「xxxx.xx」はハッスルサーバ申し込み時に選んだサブドメイン

http://{アカウント名}.xxxx.xx/webroot
/home/{アカウント名}/public/www/webroot

Bakeで焼いたプロジェクトをほとんどそのままと、テスト用に作ったコントローラだけをアップロードしているので、このURLで「Sweet, "XXXXX" got Baked by CakePHP!」が表示されるはずだが、このままではエラーがでる。多分出るのは、includeに失敗しているといった内容のエラー。
そこで環境や設置に応じてファイルの書き換えが必要になる。多くのサイトやブログで紹介されていたのはwebrootにあるindex.phpといくつかの.htaccessだった。

結論からいうと、前に挙げた前提――ハッスルサーバーで独自ドメイン設定なし、上記の通りディレクトリ構成――であれば、webroot下のindex.phpのみの書き換えで動作した。

webroot\index.php

/**
 * The full path to the directory which holds "app", WITHOUT a trailing DS.
 *
 */
	if (!defined('ROOT')) {
		define('ROOT', DS . 'home' . DS . '{アカウント名}' . DS . 'public');
	}
/**
 * The actual directory name for the "app".
 *
 */
	if (!defined('APP_DIR')) {
		define('APP_DIR', '{Appのフォルダ名}');
	}
/**
 * The absolute path to the "cake" directory, WITHOUT a trailing DS.
 *
 */
	if (!defined('CAKE_CORE_INCLUDE_PATH')) {
		define('CAKE_CORE_INCLUDE_PATH', 
DS . 'home' . DS . '{アカウント名}' . DS . 'public' . DS . '{cakephpのコアのフォルダ名}');
	}

動作確認

Bakeによる「焼きあがりましたよ」の画面と、動作確認用に作ったコントローラが動いたところまで確認している。動作確認としてはかなり不足があると思う。
使っていない取得済みドメインもあるので、近々、CakePHP+ハッスルサーバー・独自ドメイン設定でも試す予定。
さんざんあっちこっちのサイトやブログを見ながらいろいろ試したけど、最終的にはこの記事を読んで、書いてあるとおりにしたらうまくいった。レンタルサーバで運用しようとしている人はかなり苦労があるみたいだね。

特に僕はApacheのサーバ側の運用に関する知識が乏しいので、見よう見まねでしか.htaccessをいじったりできないのがちょっとシンドイ。