LionでApache+PHP+MySQLを動かしましょう、そうしましょう

WordCamp Tokyoも無事に終わり、そろそろWordPressを試してみたくなった人に向けて…、というわけではないのですが、Mac OS X Lionの環境で比較的簡単に自由度の高いある意味LAMP環境(Lion + Apache + MySQL + PHP)を作るまでを備忘録がてら、初心者の方でもできるように解説してみようかな、と。

LionAMP-01

OS XでWebサイトのテスト環境を作る方法はいくつかあります。お手軽なのはシステム環境設定から「パーソナルファイル共有」を有効にする方法ですが、これだとHTTPサーバである「Apache」が有効になるだけ。

じゃあということで、「MAMP」とかを使うと簡単に「Apache+PHP+MySQL」な環境は用意できるものの、あらかじめパッケージングされた内容になってしまう。環境をゼロから作ることを考えたら圧倒的に簡単ですが、サイト開発とか実行環境に必要なものを適宜導入しようと考えたらちょっと役不足。

ならばと、公開されているソースを必要に応じてコンパイルして…でもいいけどそれは面倒というかわかる人しかできません(わかっていても本業じゃないと面倒くさい 笑)。となると、「Fink」や「MacPorts」といったパッケージ管理ソフトを使って、システムに極力影響を与えないようにして別のUNIX環境を作る方法は割と一般的。

とは言うものの、既にOS Xで動いてるのも再度入れることになったり、OS自体をアップグレードしたら動かなくなったりもします。そうなったら、もいっかい環境を再構築したりと面倒なことこのうえないんですよね…。というわけで、今回はWordPressぐらいならすぐ動かせるように、できるだけシステムに手を入れることなく、でも比較的自由度の高いApache + PHP + MySQLな環境を作ってみたいと思います。

やさしめに書いてたら異常に長くなってきたので、まずは第1回目として「Apache編」として公開します。

ApacheとPHPは、システムに入ってるのでやっちゃうよ

apache-001

OS自体は既にLionなボクのMacBook Pro。テスト環境をどうしようかと考えていたら、西の方から「MacPortsじゃなくて、Homebrew 使ってみたら?」という神の声が。「Homebrew」は、OS Xにインストールされていないソフトウェアをパッケージで管理するFinkやMacPortsと同じようなもの。それらとの違いは「システムにないものだけを入れる」というスタンスになっているとこでしょうか。

そこで今回は、「システムにあらかじめ入ってるものはそのまま使う。ないものはHomebrewで個別にパッケージを追加する」という形で構築することに。これなら同じソフトウェアの複数のバージョンが混在することもないし、何よりもHomebrew自体が簡単でわかりやすい。

で、今回の構成は以下のようにしました。

  • Apache: OS Xの中に入ってるもの
  • PHP: OS Xの中に入ってるもの
  • MySQL: Homebrewで追加

段階的にやっていくので、自分が必要なとこで止めてください(笑)。ちなみに真っ新のLionを使ってますから、システムを上書きアップグレードしたようなその他の環境での動作を保証するものではありません。ご注意ください。

OS XのApacheを有効にする

OS Xには、世界的に圧倒的なシェアを誇るHTTPサーバの「Apache」が入っています。入ってますが、動いてません(笑)。Apacheを起動時に立ち上げるには、システム環境設定の「共有」にある「パーソナルファイル共有」を有効にします。チェックボックスをオンにするだけなので簡単です。

apache-002

起動したら、適当にブラウザを起動してそこに書いてあるIPアドレスを入力すればサイトが表示されるはずです。上にある「パーソナルWebサイトフォルダを開く」を押した場所を今回は使っていきます。普通に起動したら「自分のホームフォルダ→サイト(もしくはSites)」が初期設定になってるはずです。まぁ、場所も名前も後からどうにでもできるので何でもいいです。

apache-003

とりあえず、起動しといてください。

バーチャルホストを使えるようにする

次のステップです。初期設定では自分のホームフォルダの「サイト」フォルダ以下が、俗にホスティングサーバなどで言うところの「サイトルート(ドキュメントルート)」にあたるわけです。通常のホスティングサービスの「public_html」とか「htdocs」にあたるものだと思ってください。

静的なWebサイトを作るぐらいだったらサイトフォルダを使って相対パスでゴチャゴチャやっても問題ありません。ただ、「ドメインベースでテストサイトを作ってサクッと移行したい」って時には、ファイルのパスとかを書き換えたりするのは面倒ですよね。CMSのようにDB内にシステム情報が書き込まれる場合とか(置換すりゃいいだけとはいえ)。

だったら、プロジェクト毎に作ったフォルダ自体を仮想のホスト(Webサーバ)と見立てて、適当なローカルドメインや実際に稼働するドメインとかでアクセスできた方が都合が良い。そこで登場するのが「バーチャルホスト」。ホスティングサービスでもマルチサイトを管理できるところでは普通に使っている機能です。

Apacheの設定ファイル

apache-004

はい、ここからは黒い画面(ターミナル)を使います。いかんせんシステムの中のファイルをいじったりするので、時にはスーパーユーザー(root)にならないと編集・保存ができないファイルもあります。今回は、直接OS Xの中に入ってるApacheとかの設定ファイルには極力変更を加えないようにしていますが、それでもこの先は黒い画面での入力が必須です。ターミナルを起動しましょう。

その前に、OS XのApacheの設定ファイルのこと。

  • /etc/apache2
  • /etc/apache2/httpd.conf
  • /etc/apache2/other
  • /etc/apache2/他いくつか

Apacheの設定は「/etc/apache2」にあります。「apache2」の中にはいくつかのファイルやフォルダが入っています。設定ファイルはその中の「httpd.conf」というテキストファイルです。ただ、この設定ファイル、1文字でも間違えようものならApacheが起動しなくなります(それだけは覚えておきましょう 笑)。「other」というフォルダは、そこに設定ファイルを書いて放り込めば内容を起動時に反映する仕組みになっています。

黒い画面になれてみる

じゃ、そろそろ黒い画面になれてみましょうか。ターミナルの黒い画面に「マシン名:~ ユーザ名$ 」ってのが見えていて、入力を促す長方形のキャレットがチカチカしてるかと思います。まずはそこに以下のテキストを入れてみます。

open /etc/apache2(リターン)

コマンドラインなので何か1行入力したらリターンを押すと(実行すれば)、そのコマンドを実行した結果が現れます。どうなりましたか?「/etc/apache2」のフォルダがFinderで開きますね。そこに先ほどの設定ファイルなどが並んでいるのがわかるでしょう。適当に「httpd.conf」とか普通のテキストエディタで開いてみてください。英語が一杯書いてありますね。じゃ、黙って閉じましょうか(笑)。

せっかくなので他のコマンドも試しましょう。

ls /etc/apache2

これを実行すれば、今見ている「/etc/apache2」に含まれるファイルが黒い画面の中に一覧表示されます。ただ、それだとファイルなのかフォルダなのかも分かりません。

ls -l /etc/apache2

「ls」に続けて半角スペースと「-l」を入れてまた実行してみましょう。今度はリスト表示されますね。「r–r–r–」とか「rwx-r-x-r-x」はファイルやディレクトリのパーミッション、「root」「wheel」はそれぞれ「所有者」「グループ」をあらわしています。「httpd.conf」などは「444」なので、実はそのままだと書き込み権限すらありません。こんな感じでコマンドには「-」で始まるオプションを指定することで、コマンドの実行結果が変わるということを覚えておきましょう。

困った時は、「コマンド名 –help」「man コマンド名」などを実行すれば何かヒントが出てきます。

バーチャルホストの設定をする

さて、初歩的な話はそれぐらいにして本題に。あやうく忘れるところでした、バーチャルホストの設定するんでした(笑)。実はバーチャルホストの設定のテンプレートは、「/etc/apache2/extra」の中にある「httpd-vhosts.conf」というファイルで、それを編集したりコピーしてもいいんですが今回はこれは使いません。

先ほど確認した自分のホームディレクトリの中のサイトフォルダに、新しく真っ新な設定ファイルを作って入れてしまいましょう。ローカルで作業するだけで外からのアクセスがないでしょうから、その方がバーチャルホストの管理がしやすいでしょうしね(※ホスティングとかではできませんし、決して同じようにしないでくださいね 笑)。ターミナルから次のコマンドを入力します。

touch ~/Sites/httpd-vhosts.conf

このコマンドを実行すると、サイトフォルダに「httpd-vhosts.conf」ができます。touchはファイルを作るコマンドです。「~(チルダ)」はホームディレクトリを意味しますので、「ホームディレクトリのサイトフォルダにhttpd-vhosts.confを作る」って意味です。ついでに新規でフォルダも作ってみましょう。

mkdir ~/Sites/logs(リターン)

「mkdir フォルダ名」は指定した名前でディレクトリ(フォルダ)を作ります。Finderでいうところの「Cmd+Shift+N」のこと。ファイルやフォルダを消す時は「rm 消したいファイル名」を実行しますが、フォルダは中にファイルがあるとそのままでは消せません。中身がある場合は「rm -r フォルダ名」とかで。ただし、ゴミ箱に移動するとかではなく、即削除されるのでくれぐれも注意しましょう。

これでサイトの中に「logs」というフォルダができました。ログが入るディレクトリなので、念のためパーミッションを「777」に変更しておきます。「chmod」というコマンドはファイルのパーミッションの変更です。「777」は「rwxrwxrwx」と同じ意味、読み書き実行のすべての権限を全てのユーザに与えた状態です。

chmod 777 ~/Sites/logs(リターン)

(追記)これでサイトフォルダの中に「httpd-vhosts.conf」と「logs/」のディレクトリができたのですが、先ほども書いてるようにあくまでローカル環境での構築、他の第三者のアクセスは想定していません。通常はこのように同じネットワークに繋がってれば閲覧できる「公開ディレクトリ」内にこういったファイルを置くことはしません。通常のホスティング同様、他からアクセスすることのできない「非公開ディレクトリ」に入れておく方が安全です。なので、ここでは説明を簡潔にするためにこうしていますが、「~/Sites/」以外のディレクトリにファイルは置いておきましょう(Thanks @sada_h)。

せっかくだから、viで編集してみよう

ではこれも有効に活用しつつ、以下の内容を空の「httpd-vhosts.conf」にコピペしましょう。「#」で始まる行はコメント行です。ところどころにある「/Users/name/Sites」の「name」は自分のユーザー名に置き換えてくださいね。コードが読みにくい方は、こちらのテキストファイルを使ってくださいな。


# ここから---
NameVirtualHost *:80

# Set up permissions for VirtualHosts in ~/Sites
# 「サイト」フォルダの中のパーミッション設定
<Directory "/Users/name/Sites">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>

# For http://localhost in the OS X default location
# http://localhost でアクセスした際に表示される、
# システムデフォルトのドキュメントルートの場所
<VirtualHost _default_:80>
ServerName localhost
DocumentRoot /Library/WebServer/Documents
</VirtualHost>

# VirtualHosts settings
# ここから下が自分でカスタマイズする場合のテンプレート。
# 追加する場合は、以下の内容をコピーして書き換えるだけ。

#<VirtualHost *:80>
# ServerName domain.local
# DocumentRoot "/Users/name/Sites/domain.local"
# DirectoryIndex index.html index.php
# CustomLog "/Users/name/Sites/logs/domain.local-access_log" combined
# ErrorLog "/Users/name/Sites/logs/domain.local-error_log"
#</VirtualHost>

# ---ここまで


apache-005

普通のテキストエディタで「httpd-vhosts.conf」開いてペーストして編集して保存でも構いませんが、せっかくだから黒い画面でやるならこうです。

cd ~/Sites(リターン)
vi httpd-vhosts.conf(リターン)

「cd」は作業ディレクトリの変更、「vi httpd-vhosts.conf」はviというエディタで「httpd-vhosts.conf」を開きます。vi(vim)のマニュアルというかコマンドの詳細は多く公開されていますので、そちらを検索してご覧いただくとして。

一度「i」のキーを押すとキャレットのある位置で「入力モード」に切り替わります(「a」を押すとキャレットの次から)。入力モードになったら「Cmd+V」で先ほどコピーした内容をペーストします。「esc」を一回押せば「コマンドモード」に戻ります。編集作業はマウスが使えません。キャレットの移動もすべてキーボード操作です。上下左右の移動は矢印キーでも大丈夫。

「:(コロン)」を押すとコマンドが入力できるので、それを開いたまま一旦保存するなら「:w」を入力してリターン。保存して終了するなら「:wq」か「ZZ」を。保存しないで閉じるなら「:q!」をそれぞれ入力してリターンです。キャレットの位置の文字を消す時はコマンドモードで「x」、1行消すなら「dd」、3行消すなら「3dd」という風に操作します。

下の方の「<VirtualHost *:80>〜</VirtualHost>」の部分がバーチャルホストの設定です。「#」のコメントを取って、内容を書き換えましょう。

コマンドモードで「/」を入力すれば文書内でキーワードを検索できます。この場合は「domain」と入力してリターンキーを押せば、その文字列部分にジャンプできます。

「ServeName」はサーバ名(ホスト名)、「DocumentRoot」にはバーチャルホストのドキュメントルートを絶対パスで指定します(この場合は、test01.local というディレクトリ)。あと、「DirectoryIndex」がインデックスファイル名。左から順番にファイルが探索されます。このあたりを書き換えるとこんな感じです。


<VirtualHost *:80>
ServerName test01.local
DocumentRoot "/Users/cipher/Sites/test01.local"
DirectoryIndex index.html index.php index.phtml
CustomLog "/Users/cipher/Sites/logs/test01.local-access_log" combined
ErrorLog "/Users/cipher/Sites/logs/test01.local-error_log"
</VirtualHost>


このように、バーチャルホストの設定はパスさえちゃんと書いてあれば、自分が置きたい場所を適当に指定して大丈夫です。今回は単に管理をしやすくするために「~/Sites/」以下にして、同じ記述でコピペで楽をしているだけです。

デスクトップが良ければ、「/Users/自分のユーザー名/Desktop/example.com」とかでも構わない、と。ログは「CustomeLog」と「ErrorLog」のそれぞれに先ほどの「logs」が指定されていますので適当に置き換えましょう。「CustomLog」の最後にある「combined」はログの記録モード指定です。

このひとつの塊がバーチャルホスト設定になります。同じ記述を繰り返してサーバ名やドキュメントルートを変更すればいくらでもバーチャルホストが作れます。ここは最低限のサーバ設定しか入っていませんが、普段ホスティングの「.htaccess」に書くような内容もココに書いてしまうこともできます。

詳しいことはApacheのマニュアルでご確認を。

バーチャルホストの設定を読み込む

バーチャルホストの設定は「/etc/apache2/httpd.conf」に直接書いても構いません。一般的には、バーチャルホストの設定は外部に書いておいて、httpd.confから読み込むという形にしているところが多いかな? なので、今回のローカル環境も同じようにしています。直接システムのhttpd.confをいじくりまわすよりは楽だし安全です。

前述したように「/etc/apache2/other」の中に設定ファイルを放り込めば、Apacheの起動時にそれらが読み込まれるようになっています。先ほど作った「httpd-vhosts.conf」を読み込ませるためには、ファイルが「/etc/apache2/other」の中になければいけませんが、残念ながらそこにはありません(笑)。

では、どうするかっていうとそこにエイリアスを作ってあげます。「シンボリックリンク」を作ってあげるというのが正しい言い方ですね。ファイルの実体はサイトフォルダ、otherフォルダの中にはそのファイルへの参照を入れておくわけです。そうすれば、Apacheさんが起動時に勝手にそのファイルを読み込んでくれる、という流れ。

sudo ln -s ~/Sites/httpd-vhosts.conf /etc/apache2/other

「sudo」という新しいコマンドが出てきました。これは「su」コマンドが使えない場合に、許可されたコマンドだけ一時的にスーパーユーザー(root)として実行するためのおまじない。「/etc/apache2」の中身はスーパーユーザーでないといじれないのです。

あなたは自分がそのマシンの管理人だと思ってるかもしれませんが、実のところはシステムに雇われた管理人でしかありません。システムの中まで触ることは許されてないのです(笑)。続く「ln -s」はシンボリックリンクの作成です。

「sudo」でコマンドを実行する場合は、「Password:」と出てきてパスワードの入力を求められます。黙って、管理者アカウントのパスワードを入力しましょう。いちいち面倒ですが、言われるがままに従いましょう。いちいちうざったい場合は「sudo -s」とオプションを付けてあげると、ターミナルを閉じるまでは再度聞かれなくなります。ただ、セキュリティ上は宜しくないと思われますので、外部のサーバなどではやらないでおきましょう。

最後に「/etc/hosts」を編集する

バーチャルホストに指定した任意のドメイン名や特定のドメイン名をブラウザのアドレスバーに入力して、強制的にローカルの環境(127.0.0.1)で開けるようにします。通常、外部のドメイン名はDNSに問い合わせして行き先のIPアドレスを探しますが、「/etc/hosts」にドメインを指定すればそっちが優先されます。まぁ、そういう仕様なのです。

sudo vi /etc/hosts

ファイルを開いて、「127.0.0.1」の「localhost」の後に半角スペース区切りでもタブ区切りでもいいのでドメイン名を並べていきます。

127.0.0.1 localhost test01.local example.com

「httpd-vhosts.conf」のサーバ名(ServerName)に指定した名前にします。ここまでできたらほぼ終わり。後はファイルを保存して、Apacheを再起動して設定ファイルを読み込みなおしましょう。Apacheの起動・終了・再起動とかは「apachectl」ってのでできます。

sudo apachectl restart

以上です。ブラウザで指定したドメイン名を入力してアクセスできたらオッケイ。

といった感じで、Apache編終わり

本当ならWikiとか使って書いた方が読みやすいし、操作的な図版も一杯入れた方がいいのですが、さすがにそこまで時間が取れないのでこんな感じの第1回でした。

次回は、PHPを動かせるように変更してHomebrewまでいけたらいいなぁ…。

   

Comments are closed.


Performance Optimization WordPress Plugins by W3 EDGE