CakePHP3とMAMPとバーチャルホスト設定。
コツコツと余暇時間を使って作っている某Webサービスですが、何となくある程度できました。
とは言っても、特にデータもありませんし画像もありません。
中に処理は書いているものの、見た目はモックです。
とりあえずクライアント側は置いといて、管理画面を作ることにしました。
個人的な意見なんですが、管理画面を疎かにするサービスは高確率でポシャります。
「データ修正すればできるんだから、管理画面は後回しでいいじゃん」というのはよろしくありません。
サービスの管理画面は超大事です。
で。
ローカルでしか開発していないこのサービスですが、管理画面のプロジェクトも作っておこうかと。
というわけなので、今回はMac + MAMP + CakePHP3でのバーチャルホスト設定です。
まずはMAMPでバーチャルホストを有効にしましょう。
これは以下のディレクトリにあります。
/MAMPインストールディレクトリ/conf/httpd.conf
この中にこんな箇所があります。
# Virtual hosts #Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf ←このコメントをはずす
コメントをはずすと「httpd.confを読み込んだ時に、このパスのファイルも読み込みますよ」ということになります。
このコメントをはずしたhttpd-vhosts.confにはバーチャルホスト設定のテンプレートが書いてあります。
「バーチャルホスト設定はここに書くと都合がよろしいですよ」ということなんでしょう、多分。
それでは次にコメントをはずしたhttpd-vhosts.confファイルの修正です。
このファイルは以下のディレクトリにあります。
/MAMPインストールディレクトリ/conf/apache/extra/httpd-vhosts.conf
コメントはずしたファイルパスですね。
これをとりあえず開きましょう。
ローカル環境なので細かい説明はしませんが、ここでバーチャルホストが設定できます。
とりあえず以下の設定を書けばOKです。
NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot "/Applications/MAMP/htdocs/sample-site-1/webroot/" ServerName localhost.sample-site-1 </VirtualHost> <VirtualHost *:80> DocumentRoot "/Applications/MAMP/htdocs/sample-site-2/webroot/" ServerName localhost.sample-site-2 </VirtualHost>
面倒なのでバーチャルホストは80番ポートのままにします。
sample-site-1というプロジェクトと、sample-site-2というプロジェクトを動かす設定です。
DocumentRootはそのプロジェクトのwebrootが存在するディレクトリ。
CakePHP3の場合はwebroot/index.phpですので、このようなパスを設定しています。
ダブルクォーテーションで囲むのを忘れないようにして下さい。
今回の件とは別なんですが、このバーチャルホスト設定に環境変数を入れることもできます。
.htaccessなんかに書く方もいらっしゃいますが、個人的にはこっちに書いた方が好きです。
設定する時はこんな風に書きます。
<VirtualHost *:80> DocumentRoot "/Applications/MAMP/htdocs/sample-site-3/webroot/" ServerName localhost.sample-site-3 #SetEnv 環境変数名 値 の形で以下のように書く SetEnv EnvType test </VirtualHost>
設定した環境変数はPHP側で参照できます。
ので、これを使ってプロジェクトのデプロイに応じてDB接続先の変更なんかもできますね。
脱線してますが、ここまで書いたので書いておきます。
編集するのはbootstrap.phpです。
configファイルの読み込み部分がありますので、その下辺りにでも追加するといいです。
try { Configure::config('default', new PhpConfig()); Configure::load('app', 'default', false); // 環境変数で使用するconfigファイルを切り替え switch (getenv('EnvType')) { case "test": Configure::load('env/app-test-config', 'default'); break; case "production": Configure::load('env/app-production-config', 'default'); break } // 環境に関わらず別のconfigファイルを使いたい時は以下を追加(configディレクトリ直下にファイルを作成する) Configure::load('app-common', 'default'); } catch (\Exception $e) { die($e->getMessage() . "\n"); }
上の例だと、まずconfigディレクトリの直下に「env」ファイルを作成。
CakePHP3をインストールした時にできている「app.php」をコピーして、
envディレクトリに貼り付けつつ、ファイル名を変更。
あとは各ファイルの中身を編集すればOKです。
脱線しましたが、ここまででとりあえず設定の大部分が終わったので、次はMac自体の設定をします。
Windowsにもありますが、hosts設定というやつですね。
Macのhostsファイルは以下のディレクトリにありますので、rootユーザで編集します。
rootユーザのパスワードが何かわかりませんという方もあまり気にせず。
Macを起動する時にパスワード入力しますよね? アレです。
sudo vim /private/etc/hosts
viでもvimでも構いませんが、自分はvim派です。
これを開くと既に何か書いてあると思います。
ここのlocalhostにバーチャルホストで設定したServerNameを追加してあげます。
簡単に言うと「このURLにアクセスしたらローカルホスト!」という設定です。
追加する時は横にスペースを入れて記載すればOKです。
こんな風になると思います。
127.0.0.1 localhost sample-site-1 sample-site-2
127.0.0.1というのは使っているPC自体のことです。
「このPCのアドレスは127.0.0.1です」というような意味です。
ここまで設定が終わったらMAMPを再起動しましょう。
再起動したら以下のURLにアクセスすると、きっとサイトがそれぞれ表示されると思います。
http://localhost.sample-site-1/
http://localhost.sample-site-2/
余談なんですが。
以前バーチャルホストの設定をした際に、以下の設定をしてハマったことがあります。
http://localhost/sample-site-1/
何故かCakeさんがしきりにエラーを出してきます。
よく見たら「sample-site-1」部分をコントローラと判断されて、そんなコントローラないから作りやがれと怒っていました。
言われたら確かにその通りなんですが、しばらく頭を抱えてました。
お気づきかもしれませんが、インフラ周りも苦手です。