タイトルのままですが、次のような組み合わせのローカル環境を構築しました。 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 をネットワークインストールします。
次はターミナルで CentOS に接続します。
仮想サーバー上で直接操作することもできますが、僕は使い慣れた Mac のターミナルで操作したいですし、VMware Tools をインストールしなくてもテキストのコピペができるのも嬉しいです。
まずは先ほどの画面から CentOS に root でログインします。
そして、次のコマンドを入力します。ちなみに先頭の「# 」はコメントアウトではなくて、root ユーザーで入力するコマンドって意味です。
# ifconfig
するとずらずらっと文字が出てきますが、この中の「eth0」の「inet addr:xxx.xxx.xxx.xxx」の xxx の部分の数字が接続に必要な IP アドレスになります。
この IP アドレスを使って、ターミナルで次のコマンドで仮想サーバーに接続します。
# ssh root@xxx.xxx.xxx.xxx
英語で、接続を続けたいですか?みたいに聞かれるので yes と入力してエンター → パスワード入力 → エンターで接続します。
ここからサーバーをいろいろと構築していきますが、ローカルな仮想サーバーということで、セキュリティとかはあまり意識してません。VPS とかに応用するときは、SSH のポートを変更したり、SSH キーを登録したり、作業ユーザーを作って sudo でやったりしないとまずいと思うのでご注意を。
ちなみに、僕もサーバーには詳しくないです。以下のサイトをいつも参考にさせていただいております。本当にありがとうございます!
では始めましょう。
忘れないうちに、SELinuxを無効にしておきます。
# vi /etc/selinux/config
この中の「SELINUX」の値を「disabled」にします。
SELINUX=disabled
ちなみに vi エディタは esc → : → wq で保存して閉じます。
設定を変えたらサーバーを再起動します。
# shutdown -r now
再起動したら 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 を 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 のリポジトリを追加します。
# 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 をインストールします。
# 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 もインストールしておきましょう。
yum --enablerepo=remi,epel,rpmforge install nginx
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 をインストールします。
# 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 にリダイレクトされるので、それへの対応のようです。
(参考: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
# cpanm starman
# 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 からログアウト)
# 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
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 もインストールしておきます。
# yum --enablerepo=remi install git
ここまでで、仮想マシンのだいたいの設定は終了しました。そこで、現在の状態を保存しておき、いつでもこの状態へ戻れたり、この状態から他の環境を作れるようにしたいと思います。
仮想マシンのスナップショットをとります。こうすることで、今後この仮想サーバーでごにょごにょやって失敗しても、この状態に簡単に戻せます。
仮想マシンを複製しておけば、この状態からの仮想マシンを簡単に作れます。
まず、一度 CentOS をシャットダウンします。
現在の仮想マシンを複製します。
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で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
以上です。