Mac OS X はクライアント OS として充実している一方で、ちゃんとした UNIX OS であることから、Windows のような変な OS と違って、OSS の Web スタックが普通に動作します。ですから、仮想マシンで Linux を動かしてテストをするなどというまだるっこしいことをせずに、直接実行すれば良いのんです。とはいえ、初期設定の流儀は Linux 等とはいろいろと異なりますので、それらをまとめて行きます。ところで、LAPP, LAMP ではなく、MAPP, MAMP とか言うそうな。 以下で想定している OS X のバージョンは 10.7 (Lion) です。 インストール済み Apache の管理「システム環境設定」→「共有」(当該ホストを、他のホストから共有)で、「Web 共有」にチェックを入れることで、Apache が起動します。
各ユーザごとの ~ でのアクセスには、/etc/apache2/users/$(ユーザ名).conf の設定を。 主設定ファイルは /etc/apache2/httpd.conf にあり、初期 DocumentRoot は /Library/WebServer/Documents/ です。 このダイアログで言う「パーソナル Web サイトフォルダ」は ~/Sites/ に相当し、http://127.0.0.1/~<User ID>/ でアクセスできます。 バージョンは下記で確認できますので、設定については、右記より該当するバージョンの項目を参照してください ∥Documentation: Apache HTTP Server - The Apache HTTP Server Project $ httpd -v Server version: Apache/2.2.21 (Unix) Server built: Nov 15 2011 15:12:57 PHP はデフォルトでオフですので、必要ならば /etc/apache2/httpd.conf の下記の行のコメントを外してから再起動してください。 #LoadModule php5_module libexec/apache2/libphp5.so 再起動は、「共有」でチェックの外し付けをしても良いのですが、コマンドラインであれば、以下のように。 $ sudo /usr/sbin/apachectl restart Homebrew による追加パッケージ管理これ以降で、PostgreSQL と MySQL のインストールの際に Homebrew を利用しますので、右記よりインストールしてください。Homebrew は、いわゆる BSD で言うところの ports システムですが、OS X で最初から /usr/ の下 (/usr/local/ を除く) にインストールされているプログラム群を尊重する点で、MacPorts に比べて優れています ∥Homebrew — MacPorts driving you to drink? Try Homebrew! 文書にも書かれていますが、JDK (javac のため) と Xcode (gcc のため) も入れておくことを忘れないでください。 ご参考までに、前職在籍中に書いた記事も ∥ SIOS "OSSよろず" ブログ出張所: ソースの入手と再ビルド & デバッグ ~ Mac OS X Homebrew 編 PostgreSQL の管理OS X 10.7 (Lion) には、元々 PostgreSQL 9.0.5 が入っているようなのですが、使い方がよく分かりません。postmaster(1) や psql(1) はあるのですが、/System/Library/LaunchDaemons/ にもそれらしい設定ファイルはなく、そもそも initdb(1) が無いため、DB クラスタを新規に作ることができません。OS X Server を作りかけて入れてあるとか? しかたがないので、Homebrew でインストールします(EnterpriseDB 社のワンクリック・インストーラを使ってもいいと思います。Mac OS X 版は触ったことありませんが、インストーラは Java だったので問題なく動くでしょう)。 なお、OS X に依存しない内容については、「日本 PostgreSQL ユーザ会: PostgreSQL 付属ドキュメント」や、「ホーム — Let's Postgres」にある読み物等を参照してください。 インストール特に問題が起こらなければ、簡単です。 $ brew install postgersql こうなると、元から入っている PostgreSQL 関連のバイナリが邪魔ですので、脇へどけておきます(まずは、ドメインソケットファイルを作成するパスが DB サーバと異なるのでハマると思います)。 # mv /usr/bin/psql /usr/bin/psql.orig インストール後は、下記のようにして、バージョンや利用方法を参照することができます。 $ brew info postgresql DB クラスタの作成PostgreSQL は、本来は一般ユーザでも稼働させることのできる RDBMS なのですが、ポートの重複や、ドメインソケットの作成権限を考えると、上記の "info" の instruction の通りに動かした方が無難だと思われます。 まず、DB クラスタ (複数データベースが収められた、PostgreSQL のデータベース領域ディレクトリ) を作成します。クラスタのディレクトリのパスは、後述する launchd のための設定ファイル (org.postgresql.postgres.plist) の内容に合わせておきます。上記 "info" には "initdb /usr/local/var/postgres" とありますが、これではあまりに寂しいので、下記のようにしてみます。 $ initdb -D /usr/local/var/postgres --encoding=UTF-8 \ --no-locale --username=admin --pwprompt --auth=md5 各オプションの意味合いとしては、以下のようになります(ロケールについては「文字列処理と日本語全文検索 — Let's Postgres」等を、認証については「認証方式 - PostgreSQL 文書」等を参照してください)。
自動起動・終了デーモンを、launchd 配下で自動的に起動されるように設定します。詳しくは launchctl(1) を参照してください("brew --prefix postgresql" の実行結果が間違っているの。イヤン)。 $ mkdir -p ~/Library/LaunchAgents/ $ pgver=$(postgres --version | sed -e 's/.* //') $ cp /usr/local/Cellar/postgresql/$pgver/org.postgresql.postgres.plist \ ~/Library/LaunchAgents/ $ launchctl load -w ~/Library/LaunchAgents/org.postgresql.postgres.plist アクセスしてみます。 $ PGHOST=localhost PGPORT=5432 PGUSER=admin PGPASSWORD=hogepass psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-------+----------+---------+-------+------------------- postgres | admin | UTF8 | C | C | template0 | admin | UTF8 | C | C | =c/admin + | | | | | admin=CTc/admin template1 | admin | UTF8 | C | C | =c/admin + | | | | | admin=CTc/admin (3 rows) $ 再起動をするには、下記のようにします。設定ファイルの変更の後で再起動が必要な場合などに実行します。plist ファイルの "KeepAlive" に "true" が設定されているので、"launchctl stop" で停止後、launchd はすぐに再度の起動を行います。 $ launchctl stop org.postgresql.postgres launchd 配下から外すには、以下のようにします。その後、削除します(launchctl は、管理ファイルが有ること即 launchctl の管理下にあること、なので)。 $ launchctl unload -w ~/Library/LaunchAgents/org.postgresql.postgres.plist DB クラスタの作り直しテスト用ですので、一旦データを全てチャラにしたい場合には、launchd 配下から外した(停止もされた)後で、DB クラスタを作成しなおし、改めてサービスの登録を行います。 $ launchctl unload -w ~/Library/LaunchAgents/org.postgresql.postgres.plist $ rm -fr /usr/local/var/postgres/* $ initdb -D /usr/local/var/postgres --encoding=UTF-8 \ --no-locale --username=admin --pwprompt --auth=md5 $ launchctl load -w ~/Library/LaunchAgents/org.postgresql.postgres.plist MySQL の管理どうも以前の OS X では PostgreSQL ではなく MySQL が入っていたらしいのですが、まあいいか。 インストール特に問題が起こらなければ、簡単です。 $ brew install mysql インストール後は、下記のようにして、バージョンや利用方法を参照することができます。 $ brew info mysql データディレクトリの作成下記の通りです。MySQL はビルド時の $TMPDIR を覚えてしまうのですが、Mac OS X の $TMPDIR は、セッションごとに変わるようですので注意します。右記参照 ∥ MySQL :: MySQL 5.5 Reference Manual :: 4.4.3 mysql_install_db — Initialize MySQL Data Directory $ TMPDIR=/tmp/ mysql_install_db --basedir="$(brew --prefix mysql)" \ --datadir=/usr/local/var/mysql/ 自動起動・終了デーモンを、launchd 配下で自動的に起動されるように設定します。詳しくは launchctl(1) を参照してください。 $ mkdir -p ~/Library/LaunchAgents/ $ cp $(brew --prefix mysql)/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/ $ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist DB ユーザ "root" の初期パスワードは空です。対話的に、アクセスコントロールを設定します。 $ mysql_secure_installation 試しにアクセスしてみます。 $ mysql -u root -p -e "SELECT version()" mysql Enter password: +-----------+ | version() | +-----------+ | 5.5.20 | +-----------+ $ launchd 配下から外すには、以下のようにします。 $ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist 再起動をするには、下記のようにします。設定ファイルの変更の後で再起動が必要な場合などに実行します。plist ファイルの "KeepAlive" に "true" が設定されているので、"launchctl stop" で停止後、launchd はすぐに再度の起動を行います。 $ launchctl stop ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist なお、ここまでで、お馴染みの my.cnf ファイルを設置していません。my.cnf を設置しない場合に使われるデフォルトパラメータと、設置した場合に優先されるパスの順序については、以下で確認できます。 $ mysqld --help --verbose データディレクトリの作り直しテスト用ですので、一旦データを全てチャラにしたい場合には、launchd 配下から外した(停止もされた)後で、DB クラスタを作成しなおし、改めてサービスの登録を行います。 $ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist $ rm -fr /usr/local/var/mysql/* $ TMPDIR=/tmp/ mysql_install_db --basedir="$(brew --prefix mysql)" \ --datadir=/usr/local/var/mysql/ $ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist $ mysql_secure_installation nginx の管理最近流行りの、非同期実装のウェブサーバでござる ∥ nginx news インストール。 $ brew install nginx 自動起動。 $ mkdir -p ~/Library/LaunchAgents/ $ cp $(brew --prefix nginx)/homebrew.mxcl.nginx.plist ~/Library/LaunchAgents/ $ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist http://localhost:8080/ へ。 ビルドオプションは "-V" で表示されます。設定ファイルの位置もここで指定されています。"root" に指定した相対パスは、prefix からの位置ですね、 $(brew --prefix nginx)/html/ 。 $ nginx -V nginx version: nginx/1.2.0 TLS SNI support enabled configure arguments: --prefix=/usr/local/Cellar/nginx/1.2.0 --with-http_ssl_module --with-pcre --with-cc-opt='-I/usr/local/include' --with-ld-opt='-L/usr/local/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --pid-path=/usr/local/var/run/nginx.pid --lock-path=/usr/local/var/nginx/nginx.lock8080 が取り合いなので、ポートを変えます。 $ diff -uNr /usr/local/etc/nginx/nginx.conf.default /usr/local/etc/nginx/nginx.conf --- /usr/local/etc/nginx/nginx.conf.default +++ /usr/local/etc/nginx/nginx.conf @@ -33,7 +33,7 @@ #gzip on; server { - listen 8080; + listen 8081; server_name localhost; #charset koi8-r; 再起動します。 $ launchctl stop homebrew.mxcl.nginx 後でちゃんとやろう。 Ruby on Rails の管理断然 ”–user-install” です。 $ gem install --user-install rails $ export PATH=$PATH:$(ruby -r rubygems -e "puts(File.join(ENV['HOME'], \ '.gem', 'ruby', Gem::ConfigMap[:ruby_version], 'bin' ))") Node.js$ brew install nodejs $ node <<EOF var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/'); EOF |