fuelphpで複数サイトを構築する方法

やりたいこと

タイトルでは複数サイトと書きましたが。
実際にやりたかったのはサービス本体と運営などが利用する管理サイトとでドメインやサーバが異なる場合があります。
こういう場合にそれぞれにコアとなるfuelphp本体を持たせるのではなくて共通で使えるところは使いたいという話になります。

ディレクトリ構成

通常の構成

project
├── fuel
└── public

2サイトをのせる構成

project
├── fuel
│   ├── app
│   └── app_admin
├── public
└── public_admin

サービス本体は[app][public]に。管理サイトは[app_admin][public_admin]に置くようにします。
こうすることでfuelphpのcoreの部分を共通で使用することができるので仮にfuelphpのバグ等があった場合でも1カ所に適用することで対応できるなどメリットがあると思います

さらに共通化してみる

あまり複雑化するなという考えもありますが、たとえばmodelなどでは本サービスと管理サイトで処理内容が重複する箇所も増えてくると想像できます。そこでさらに以下の様な構成にしてみます

project
├── fuel
│   ├── app
│   │   ├── config
│   │   ├── lang
│   │   ├── classes
│   │   │  ├── model
│   │   │  ├── ・・・
│   │   ├── ・・・
│   ├── app_admin
│       ├── config  # fuel/app/configへのシンボリックリンク
│       ├── lang   # fuel/app/langへのシンボリックリンク
│       ├── classes
│       │  ├── model # fuel/app/classes/modelへのシンボリックリンク
│       │  ├── ・・・
│       ├── ・・・
├── public
├── public_admin

個人的に処理が重複するであろう箇所は、以下当たりになるのかなと思っています。
config以下の定義系のファイル
lang以下のメッセージ定義ファイル(バリデーションメッセージなど)
model以下のDBインタフェースとなるファイル

実装手順まとめ

それぞれディレクトリとシンボリックリンクを作成します

cd /pathto_project &&
cp -r ./public ./public_admin &&
cp -r ./fuel/app ./fuel/app_admin &&
rm -rf /pathto_project/fuel/app_admin/config &&
rm -rf /pathto_project/fuel/app_admin/lang &&
rm -rf /pathto_project/fuel/app_admin/classes/model &&
ln -s /pathto_project/fuel/app/config /pathto_project/fuel/app_admin/config &&
ln -s /pathto_project/fuel/app/lang /pathto_project/fuel/app_admin/lang &&
ln -s /pathto_project/fuel/app/classes/model /pathto_project/fuel/app_admin/classes/model

entryポイントを修正してapp_adminを参照するように修正します

vi ./public_admin/index.php

修正前:define('APPPATH', realpath(__DIR__.'/../fuel/app/').DIRECTORY_SEPARATOR);
修正後:define('APPPATH', realpath(__DIR__.'/../fuel/app_admin/').DIRECTORY_SEPARATOR);

これで開発の準備が完了しました。public、public_adminへそれぞれアクセス可能になります

まとめ

シンボリックリンクを利用しているため、複数の環境を構築する際にそれぞれシンボリックリンクを作成する必要があるのはデメリットかもしれません。また、こういう構造になっていることを他人に伝えたり資料としなくてはならないというデメリットもあるかもしれません。

しかし過去に、同じサービスなのに全く別の構造になっていたり、もっといくと別のフレームワークを使っていたりというサービスもありました。そういうことがなる前にしっかり方針をきめて土台を決めてしまうのは後々メリットになると信じています

以上です

※追記
単純にfuelphpのセットアップ手順については以下にまとめましたので足りない箇所をみてみてください!
さくらのレンタルサーバでのfuelphpセットアップ手順 - とりあえずphpとか