またどこかのCTOになった人のブログ

またどこかのCTOになった人が書いてます。最近はCakePHP3とConoHaのネタが多いです。

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」部分をコントローラと判断されて、そんなコントローラないから作りやがれと怒っていました。
言われたら確かにその通りなんですが、しばらく頭を抱えてました。

お気づきかもしれませんが、インフラ周りも苦手です。