Mac OS X Mountain Lion + VMware Fusion 5 + CentOS 6.3 + Apache + mod_proxy + PSGI + Movable Type 5.2 のローカル環境を構築した

タイトルのままですが、次のような組み合わせのローカル環境を構築しました。

  • Mac OS X Mountain Lion
  • VMware Fusion 5
  • CentOS 6.3
  • Apache
  • mod_proxy
  • PSGI
  • Movable Type 5.2

この環境を構築したときの作業手順を、備忘録として残しておこうと思います。

※スクリーンショットは乗せるとページの表示が重くなりそうですし、無くても十分分かると思いますのでテキストリンクにしました。

VMware Fusion 5 に CentOS 6.3 をインストール

はじめに、VMware Fusion 5 に CentOS 6.3 をネットワークインストールします。

  1. まずは CentOS のネットワークインストール用の ISO イメージ「CentOS-6.3-x86_64-netinstall.iso」をダウンロードして Mac に保存します。
  2. VMware Fusion 5 を起動して、「ファイル > 新規」メニューから「新規仮想マシン アシスタント」を起動します。
  3. 「ディスクを使用せずに続行」をクリック(画像
  4. 「オペレーティングシステムのインストールディスクまたはイメージを使用」にチェックを入れ、「ディスクまたはディスクイメージを選択」から先ほどダウンロードした「CentOS-6.3-x86_64-netinstall.iso」を選択し、「続ける」をクリック(画像
  5. 「オペレーションシステム」と「バージョン」を選択して「続ける」をクリック(画像
  6. 「終了」をクリック(画像
  7. 名前を付けて「保存」をクリックしてインストールを開始(画像
  8. 「Install or upgrade an existing system」が選択された状態でエンター(画像
  9. 「Skip」(画像
  10. 「Japanese」を選択して「OK」(画像
  11. 「OK」(画像
  12. キーボードタイプを「jp106」を選んで「OK」(画像
  13. 「URL」を選んで「OK」(画像)
  14. カーソルで「Enable IPv6 support」の米印に合わせスペースキーで米印を外して「OK」(画像
  15. 「http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.3/os/x86_64/」と入力して他の欄は無視して「OK」(キャプチャ取り忘れた)
  16. しばらく待つ(画像
  17. 「次」(画像
  18. 「基本ストレージデバイス」を選択したまま「次」(画像
  19. よく読んで「はい。含まれていません。どのようなデータであっても破棄してください」をクリック(画像
  20. ホスト名を指定して(ここではデフォルトのまま)「次」(画像
  21. 「アジア/東京」が選択されていることを確認し「システムクロックで UTC を使用」のチェックを外して「次」(画像
  22. root のパスワードを2回入力して「次」(画像
  23. 「すべての領域を使用する」を選んで「次」(画像
  24. よく読んで「変更をディスクに書き込む」をクリック(画像
  25. 「Minimal」「CentOS」「後でカスタマイズ」が選択された状態で「次」。インストールが始まります。(画像
  26. 「おめでとうございます。CentOS のインストールが完了しました。」と表示されたら「再起動」(画像
  27. 再起動してログイン画面になったら完了(画像

仮想サーバーにターミナルで接続する

次はターミナルで CentOS に接続します。

仮想サーバー上で直接操作することもできますが、僕は使い慣れた Mac のターミナルで操作したいですし、VMware Tools をインストールしなくてもテキストのコピペができるのも嬉しいです。

仮想サーバーの IP アドレスを確認する

まずは先ほどの画面から CentOS に root でログインします。

そして、次のコマンドを入力します。ちなみに先頭の「# 」はコメントアウトではなくて、root ユーザーで入力するコマンドって意味です。

# ifconfig

するとずらずらっと文字が出てきますが、この中の「eth0」の「inet addr:xxx.xxx.xxx.xxx」の xxx の部分の数字が接続に必要な IP アドレスになります。

ターミナルから SSH で接続する

この IP アドレスを使って、ターミナルで次のコマンドで仮想サーバーに接続します。

# ssh root@xxx.xxx.xxx.xxx

英語で、接続を続けたいですか?みたいに聞かれるので yes と入力してエンター → パスワード入力 → エンターで接続します。

サーバーを設定する

ここからサーバーをいろいろと構築していきますが、ローカルな仮想サーバーということで、セキュリティとかはあまり意識してません。VPS とかに応用するときは、SSH のポートを変更したり、SSH キーを登録したり、作業ユーザーを作って sudo でやったりしないとまずいと思うのでご注意を。

ちなみに、僕もサーバーには詳しくないです。以下のサイトをいつも参考にさせていただいております。本当にありがとうございます!

では始めましょう。

SELinuxを無効にする

忘れないうちに、SELinuxを無効にしておきます。

# vi /etc/selinux/config

この中の「SELINUX」の値を「disabled」にします。

SELINUX=disabled

ちなみに vi エディタは esc → : → wq で保存して閉じます。

設定を変えたらサーバーを再起動します。

# shutdown -r now

yum update

再起動したら yum をアップデートしておきます。

# yum update

途中で y/N (yes か no か)と聞かれますが、y で OK です。今後のパッケージのインストールでもそうですが、yum の後に -y オプションをつければ y/N と聞かれなくなります。

しかし、僕のような素人は、サーバーで何が行われているのか全く分からなくなってしまうので、初めのうちは -y は付けないで「あー今度これがインストールされるのかー」と思ってから y エンターした方が良いと思います。

必要なコマンドのインストール

CentOSを最小構成でインストールすると、今後の構築作業に必要なコマンドも使えない状態なので、ここで wget、unzip、make、gcc を使えるようにしておきます。

make と gcc は直接自分では打たないけど、後で cpanm で Perl のモジュールをインストールするときに必要なようです。

# yum install wget
# yum install make
# yum install gcc
# yum install unzip

iptablesの設定

iptables を設定します。デフォルトの iptables をコピーしてから、iptables を vi エディタで開きます。

# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.org
# vi /etc/sysconfig/iptables

既存の内容をすべて選択(gg v G $)して削除(x)します。そして、以下の内容をペーストして保存(esc : wq)します。SSH は 22 番、HTTP は 80 番、FTP は 20 と 21 番、MySQL は 3306 番を使用します。

*filter

:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP, FTP1, FTP2, MySQL
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT

保存したら、iptablesを再起動します。

# /etc/rc.d/init.d/iptables restart
iptables: ファイアウォールルールを消去中: [ OK ]
iptables: チェインをポリシー ACCEPT へ設定中filter [ OK ]
iptables: モジュールを取り外し中: [ OK ]
iptables: ファイアウォールルールを適用中: [ OK ]

yumのリポジトリの追加

yum のリポジトリを追加します。

# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
# rpm -Uvh epel-release-6-7.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh remi-release-6.rpm
# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
# rpm -Uvh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

epel と rpmforge の enabled=0 にします。

# vi /etc/yum.repos.d/epel.repo
# vi /etc/yum.repos.d/rpmforge.repo

Apacheのインストールと初期設定

Apache をインストールします。

# yum install httpd

Apache の設定ファイルのバックアップしてから設定ファイルを編集します。

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
# vi /etc/httpd/conf/httpd.conf

44行目(vi エディタで指定行への移動は:44、行番号の表示は:set number)

ServerTokens Prod

276行目(xxx は最初に調べた IP アドレス)

ServerName xxx.xxx.xxx.xxx

331行目

Options -Indexes FollowSymLinks

536行目

ServerSignature Off

viを終了して、文法チェックしてApacheを起動し、自動起動設定をします。

# apachectl configtest
Syntax OK
# service httpd start
httpd を起動中: [ OK ]
# chkconfig httpd on
# chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Nginxのインストール

Nginx もインストールしておきましょう。

yum --enablerepo=remi,epel,rpmforge install nginx

PerlモジュールとImageMagickのインストール

Movable Type を動かすのに必須の Perl モジュールやオプションモジュールをインストールします。

# yum --enablerepo=rpmforge install perl-Crypt-DSA perl-Archive-Zip perl-HTML-Parser perl-GD perl-Archive-Tar perl-IO-Compress-Zlib perl-Digest-SHA1 perl-Mail-Sendmail perl-Crypt-SSLeay perl-Cache perl-Imager perl-IPC-Run perl-MIME-tools

perl-XML-Atom と perl-XML-Parser は普通に入れるとエラー発生しました。

Transaction Check Error: file /usr/share/man/man3/XML::SAX::Base.3pm.gz conflicts between attempted installs of perl-XML-SAX-0.96-7.el6.noarch and perl-XML-SAX-Base-1.04-1.el6.rf.noarch
file /usr/share/man/man3/XML::SAX::Exception.3pm.gz conflicts between attempted installs of perl-XML-SAX-0.96-7.el6.noarch and perl-XML-SAX-Base-1.04-1.el6.rf.noarch

そこで、次のような順番でやったらうまくいきました(けっこうハマった)。

# yum --enablerepo=rpmforge install perl-XML-SAX
# yum --enablerepo=rpmforge install perl-XML-Atom perl-XML-Parser

ImageMagick をインストールします。

# yum --enablerepo=rpmforge install ImageMagick
# yum --enablerepo=rpmforge install ImageMagick-perl

cpanmのインストール

cpanm をインストールします。

# cd
# mkdir bin
# cd bin
# curl -LO http://xrl.us/cpanm
# chmod +x cpanm

-L オプションは、URLのリダイレクト対応するためで、ここでは、http://cpanmin.us にアクセスすると、https://raw.github.com/miyagawa/cpanminus/master/cpanm にリダイレクトされるので、それへの対応のようです。

Plack関連モジュールを一括でインストール

(参考:FastCGIと比べて約1.4倍のスピード! 開発中のmt.psgiを使ってみた - スカイアークエンジニアブログ - スカイアークシステム

cpanm install Task::Plack だとうまくいかなかったので、上記ブログ記事のように1つずつ入れます。

# cpanm Plack
# cpanm CGI::PSGI
# cpanm CGI::Emulate::PSGI
# cpanm CGI::Compile
# cpanm SOAP::Transport::HTTP::Plack

Starmanのインストール

# cpanm starman

MySQLのインストールと設定

# yum --enablerepo=remi,epel,rpmforge install mysql-server
# cp /etc/my.cnf /etc/my.cnf.org
# vi /etc/my.cnf

[mysqld] の末尾に以下の3行を追加

# character-set
character-set-server=utf8
skip-character-set-client-handshake

[mysqld_safe] の末尾に以下の6行を追加

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8

MySQL の起動設定

# chkconfig mysqld on
# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off

MySQL を起動します。

# service mysqld start

MySQL の root のパスワードを設定してからログインします。

# mysqladmin -u root password xxxxxx(←パスワード)
# mysql -u root -p mysql
Enter password:

不要なユーザーを削除します。

mysql> SELECT user, password, host FROM user;(確認)
mysql> DELETE FROM user WHERE user = '';(匿名ユーザーを削除)
mysql> DELETE FROM user WHERE host != 'localhost';(パスワードが設定されてない root を削除)
mysql> SELECT user, password, host FROM user;(確認)

不要なテーブルを削除します。

mysql> SHOW DATABASES;(確認)
mysql> DROP DATABASE test;(testテーブルを削除)
mysql> SHOW DATABASES;(確認)
mysql> Bye(control + D で MySQL からログアウト)

PHP 関連のインストール

# yum --enablerepo=remi,epel,rpmforge install php php-mbstring php-mysql php-gd

PHPのタイムゾーンを設定します。

# vi /etc/php.ini

date.timezone で検索( /date.timezone )して、行頭の ; を削除し、"Asia/Tokyo" を設定します。

date.timezone = "Asia/Tokyo"

Apacheを再起動します。

# service httpd restart

phpMyAdminのインストール

phpのバージョンの確認します。

# php -v

mysqlのバージョンを確認します。

# mysql --version

このコマンドで表示されたメッセージの Distrib の右の番号がバージョンです。

バージョンを確認したら、phpMyAdmin - Download から最適なバージョンを選んでインストールして設定します。以下の wget の URL は最適なバージョンのものに適宜変更してください。

# cd
# wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/3.5.2.2/phpMyAdmin-3.5.2.2-all-languages.tar.gz
# tar zxvf phpMyAdmin-3.5.2.2-all-languages.tar.gz
# rm -rf phpMyAdmin-3.5.2.2-all-languages.tar.gz
# mv phpMyAdmin-3.5.2.2-all-languages/ /var/lib/phpmyadmin

設定します。

# cd /var/lib/phpmyadmin
# cp config.sample.inc.php config.inc.php
# vi config.inc.php

以下の部分強調部分を編集します。

$cfg['Servers'][$i]['auth_type'] = 'http';
$cfg['UploadDir'] = './upload';

以下を追記します。

$cfg['Lang'] = 'ja-utf-8';

シンボリックリンクを作成します。これで、http://IPアドレス/phpmyadmin/ でアクセスできます。

# ln -s /var/lib/phpmyadmin/ /var/www/html/phpmyadmin

phpMyAdmin にアクセスしたら「mcrypt 拡張がありません。」と出たので、足りないPHPモジュールのインストールします。

# yum --enablerepo=epel install libmcrypt.x86_64
# yum --enablerepo=remi install php-mcrypt.x86_64

Apache を再起動します。

# service httpd restart

エラーが消えました。

Gitのインストール

すごいついでですが、Git もインストールしておきます。

# yum --enablerepo=remi install git

現在の仮想マシンの状態を保存する

ここまでで、仮想マシンのだいたいの設定は終了しました。そこで、現在の状態を保存しておき、いつでもこの状態へ戻れたり、この状態から他の環境を作れるようにしたいと思います。

仮想マシンのスナップショットをとる

仮想マシンのスナップショットをとります。こうすることで、今後この仮想サーバーでごにょごにょやって失敗しても、この状態に簡単に戻せます。

  • 仮想マシン > スナップショット... > スナップショットをとる

仮想マシンを複製しておく

仮想マシンを複製しておけば、この状態からの仮想マシンを簡単に作れます。

まず、一度 CentOS をシャットダウンします。

  • 仮想マシン > シャットダウン

現在の仮想マシンを複製します。

  1. ファイル > 新規
  2. 「ディスクを使用せずに続行」をクリック
  3. 「既存の仮想ディスクを使用」をチェック
  4. 「仮想ディスクの個別のコピーを作成する」をチェック
  5. 現在の仮想マシンの「仮想ディスク.vmdk」を選択
  6. 「続ける」をクリック
  7. オペレーティングシステムとバージョンを確認して「続ける」をクリック
  8. 「終了」をクリック
  9. 名前を変更して「保存」(ここでは「CentOS(64ビット基本構成)」とした)
  10. ディスクをコピーしています...
  11. 仮想マシンが起動する
  12. 現在の仮想マシンで設定していた root のパスワードでログインできることを確認

Movable Type 5.2 のインストール

Movable Type をインストールします。ここの説明はさらっと。

ターミナルで新規タブを開いて、ダウンロードした MT-5.2.zip をサーバーにアップロードします。

scp /パス/MT-5.2.zip root@xxx.xxx.xxx.xxx:

サーバーにログイン

ssh root@172.16.0.129

MT-5.2.zip を cgi-bin に移動して展開したり、いろいろ。その前に、phpMyAdmin でデータベースを作っておくのを忘れずに。

# mv MT-5.2.zip /var/www/cgi-bin/.
# cd /var/www/cgi-bin/
# unzip MT-5.2.zip
# rm -f MT-5.2.zip
# chown -R apache:apache MT-5.2/
# mkdir /var/www/html/MT-5.2
# chown -R apache:apache /var/www/html/
# mv MT-5.2/mt-static/ /var/www/html/MT-5.2/.

ブラウザで「http://xxx.xxx.xxx.xxx/cgi-bin/MT-5.2/mt.cgi」にアクセスしてウィザードに従ってインストールします。ここでは「First Website」というウェブサイトを作りました。

さっそくウェブサイトを再構築してみましょう。ここでは「3秒」でした。

そして、「システム > ツール > システム情報」を表示して「サーバーモデル: CGI」になっていることを確認してみましょう。

Apache + mod_proxy + PSGI で動かす設定

(参考:Apache+mod_proxy+PSGIでMovable Type 5.2を動かす - The blog of H.Fujimoto

Apache の設定を変更します。

# vi /etc/httpd/conf/httpd.conf

947行目付近を以下のように編集します。

<Proxy *>
Order deny,allow
Deny from all
Allow from all
</Proxy>

httpd.conf の末尾に以下を追記します。パスは適宜変えてください。

<IfModule proxy_module>
ProxyPass /MT-5.2/mt-static/ !
ProxyPass /cgi-bin/MT-5.2/ http://localhost:5000/cgi-bin/MT-5.2/
ProxyPassReverse /cgi-bin/MT-5.2/ http://localhost:5000/cgi-bin/MT-5.2/
</IfModule>

Apache を再起動します。

# service httpd restart

この時点で、先ほどのシステム情報のページをリロードすると、表示されなくなっているはずです。

MT のインストールディレクトリに移動します。

# cd /var/www/cgi-bin/MT-5.2/

starman を起動します。

# starman --pid /var/run/mt.pid ./mt.psgi

これで、先ほど表示されなくなっていたシステム情報のページをもう一度リロードすると、「サーバーモデル: PSGI」となっているはずです。

最後にウェブサイトを再構築すると「2秒」でした。まあ、これだけだと PSGI の威力が分からないかも知れませんがw

以上です。

  • このエントリーをはてなブックマークに追加
Just a second...