サーバリテラシ2006 - 第5回 Web アプリケーション
サーバリテラシ2006 - 第5回 Web アプリケーション
Section titled “サーバリテラシ2006 - 第5回 Web アプリケーション”前回は Web サーバである Apache のインストールを行いました。
今回は Apache を使って Blog や Wiki 、BBS といった Web アプリケーションの設置を行っていきます。
CGI とは Web サーバにクライアント (ブラウザなど) からの要求に応じてプログラムを Web サーバ内で実行させるための仕組みのことです。これにより Web サーバに文章やファイルなどを生成、また、クライアントに送信させることが出来るので、今回取り扱う Blog や Wiki 、BBS をはじめ検索サイトやアクセスカウンター、チャットなどを実現することが出来ます。今挙げた物は CGI 以外の技術でも実現することが可能ですが、その中でも比較的簡単な CGI を扱っていきます。
CGI を実行する
Section titled “CGI を実行する”現状の Apache の設定では Apache は CGI プログラムを実行することができません。初めに CGI を実行できるように Apache の設定ファイルを書き換えます。今回の環境では一般ユーザは Apache の設定ファイルを書き換えられないので root になって作業を行います。
$ su -# vi /etc/httpd/conf/httpd.conf- httpd.conf (315行目)
- 詳しくはこちらへ
Apache HTTP サーバ バージョン 2.2 ドキュメント
- 詳しくはこちらへ
#AddHandler cgi-script .cgi ↓ AddHandler cgi-script .cgi .pl .rb また、ディレクトリのインデックスファイルに index.rb を追加します。
- httpd.conf (163行目)
- 詳しくはこちらへ
Apache HTTP サーバ バージョン 2.2 ドキュメント
- 詳しくはこちらへ
DirectoryIndex index.html ↓ DirectoryIndex index.html index.rb
ユーザ領域( public_html 以下の領域)の cgi-bin 以下で CGI プログラムを実行できるようにユーザ領域に関する設定ファイルを書き換えます。変更箇所が多いため一度ファイルを消去して新しく作成します。
# rm /etc/httpd/conf/extra/httpd-userdir.conf# vi /etc/httpd/conf/extra/httpd-userdir.conf- httpd-userdir.conf
UserDir public_html<Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Order allow,deny Allow from all</Directory><Directory /home/*/public_html/cgi-bin> Options ExecCGI</Directory>変更は以上です。設定を反映させるために httpd を再起動します。
# /etc/init.d/httpd restartここからは一般ユーザに戻って作業を行います。
# exit次に、実際に CGI が実行できるか確認します。今回はユーザ領域下の cgi-bin ディレクトリ(public_html/cgi-bin/)以下に配置して実行します。
$ cd ~/public_html$ mkdir -m 755 cgi-bincgi-bin ディレクトリに移動し、test.cgi を作成します。
$ cd cgi-bin$ vi test.cgi- test.cgi
#!/usr/bin/perlprint "Content-type: text/html\n\n";print "<html><body><table border=1>\n";for $key (sort(keys(%ENV))) { print "<tr><td>$key</td><td>$ENV{$key}</td></tr>\n"; }print "</table></body></html>";この「 ¥ 」は Unix 上では「 \ 」で表示されます。
test.cgi をサーバーが実行できるようにパーミッションを変更します。
$ chmod 755 test.cgiブラウザで http://localhost:10080/~ユーザ名/cgi-bin/test.cgi にアクセスし、正しくページが表示されれば成功です。
ここからは実際に CGI プログラムを設置していきます。各自好きな順番で作業を進めてください。
Blog を開設する
Section titled “Blog を開設する”Blog とは、ネット上の日記のようなもので、書き込んだ日記に、離れたところにいる友達や、見知らぬ誰かがツッコミを入れたりできるシステムです。今回は、オープンソースかつフリーな Blog プログラムである tDiary の設置方法を紹介します。
tDiary のダウンロードと設置
Section titled “tDiary のダウンロードと設置”tDiary は、tDiary.org より配布されているので、ここから tdiary-full-2.0.4.tar.gz をダウンロードします。
$ cd ~/public_html/cgi-bin$ wget http://www.tdiary.org/download/tdiary-full-2.0.4.tar.gzダウンロードしたファイルを解凍します。
$ tar zxf tdiary-full-2.0.4.tar.gztdiary-2.0.4 というディレクトリができれば成功です。
$ ls -ltotal 2084drwxr-xr-x 9 hoge hoge 4096 Dec 10 2006 tdiary-2.0.4-rw-rw-r-- 1 hoge hoge 2128834 Dec 10 2006 tdiary-full-2.0.4.tar.gzブラウザで URL を入力する際、バージョン番号が入っていると邪魔なのでディレクトリを tdiary に変更します。
$ mv tdiary-2.0.4 tdiaryパーミッションを変更します。
$ chmod 755 tdiarytDiary の実行ファイルである index.rb と update.rb をサーバが実行できるようにパーミッションを変更します。
$ cd tdiary$ chmod 755 index.rb update.rb以上でtDiary の設置は完了です。
日記データの保存ディレクトリを作成する
Section titled “日記データの保存ディレクトリを作成する”日記データを保存するディレクトリを作成します。このディレクトリはサーバが書き込める必要があるため root になり、グループとパーミッションを変更します。
$ mkdir ~/diary$ su -# chgrp httpd ~ユーザ名/diary# chmod 775 ~ユーザ名/diary# exittDiary の設定
Section titled “tDiary の設定”tDiary にはあらかじめサンプルの設定ファイルが用意されているので、このファイルをコピーしたものを元に設定を行います。
$ cp tdiary.conf.sample tdiary.conf現在の設定では、vi で tdiary.conf を開くと文字化けしてしまいます。開いている PuTTY のタイトルバーの上で右クリックをして PuTTY 設定変更ウインドウを表示させ、一時的に設定を変更します。カテゴリの[ウィンドウ]->[変換]->[受信されるデータの文字セット変換]から PuTTY の文字セットを [EUC-JP] に変更し、[適用]を押してください。
また、サーバ側の文字セットも変更する必要があるため以下のコマンドを実行します。
LANG=jp_JP.EUC-JP$ vi tdiary.conf- tdiary.conf (17行目)
@data_path = ‘/home/foo/diary’ ↓ @data_path = ‘/home/ユーザ名/diary’ 今変更したのは日記データの保存ディレクトリの項目です。
その他の項目は、お好みに合わせて適宜、変更してください。
変更を終えたら、PuTTY の設定を変更したときと同じように[UTF-8(CJK)]に戻し、以下のコマンドでサーバ側の文字セットを元に戻してください。
LANG=en_US.UTF-8これで tDiary の設置は完了です。実際にブラウザで表示してみましょう。
http://localhost:10080/~ユーザ名/cgi-bin/tdiary/ へアクセスしてみてください。
すると、以下のようなエラーが表示されます。
Internal Server ErrorThe server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, xxx@k.hosei.ac.jp and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.原因を特定するために Apache のログファイル(/var/log/httpd/error_log)を見てみましょう。
$ su -# tail /var/log/httpd/error_log・・・[Thu Dec 21 19:00:00 2006] [error] [client 192.168.1.xxx] /usr/bin/env:[Thu Dec 21 19:00:00 2006] [error] [client 192.168.1.xxx] ruby[Thu Dec 21 19:00:00 2006] [error] [client 192.168.1.xxx] : No such file or directory[Thu Dec 21 19:00:00 2006] [error] [client 192.168.1.xxx][Thu Dec 21 19:00:00 2006] [error] [client 192.168.1.xxx] Premature end of script headers: index.rbRuby が見つからないことがエラーの原因のようです。Ruby とは、スクリプト言語の 1 つで、tDiary も Ruby で書かれています。そのため、実行するためには Ruby をインストールする必要があります。CentOS 4.3 にはあらかじめパッケージが用意されているので、yum でインストールします。
Ruby のインストール
Section titled “Ruby のインストール”# yum install rubySetting up Install ProcessSetting up repositories………途中でインストールするかどうか確認を求められるので、
Is this ok [y/N]: yと入力してください。
最後に Complete! と表示されればRubyのインストールは完了です。再度ブラウザで**http://localhost:10080/~ユーザ名/cgi-bin/tdiary/**にアクセスして、 「ほげほげ日記」 が表示されれば成功です。後は README や 日記の書き方 、また、 tDiary.org などを参考にして好きなようにカスタマイズしてみてください。なお、 設定 画面には 追記 から行くことができます。
次の作業に移る前に、
# exitで一般ユーザに戻っておきましょう。
Wiki を開設する
Section titled “Wiki を開設する”Wiki は、ブラウザを利用してサーバ上の文書を書き換えるシステムの一種です。Wiki では通常、誰でも、ネットワーク上のどこからでも、文書の書き換えができるようになっているので、共同作業で文書を作成するのに便利です。
今回は、国産 Wiki クローンの1つである FreeStyleWiki を設置します。
FreeStyleWiki のダウンロードと設置
Section titled “FreeStyleWiki のダウンロードと設置”FreeStyleWiki は、http://fswiki.poi.jp/ より配布されているので、ここから wiki3_6_2.zip をダウンロードします。
$ cd ~/public_html/cgi-bin$ wget http://osdn.dl.sourceforge.jp/fswiki/20797/wiki3_6_2.zipダウンロードしたファイルを解凍します。このファイルは ZIP 形式のアーカイブなので unzip コマンドで解凍します。
$ unzip wiki3_6_2.zipアーカイブのファイル名と同じディレクトリができれば成功です。
$ ls -ltotal 896drwxrwxr-x 9 hoge hoge 4096 Dec 14 19:00 wiki3_6_2-rw-rw-r-- 1 hoge hoge 906739 Jul 3 13:45 wiki3_6_2.zipブラウザで URL を入力する際、バージョン番号が入っていると邪魔なのでディレクトリを wiki に変更します。
$ mv wiki3_6_2 wikiディレクトリのパーミッションを変更します。
$ chmod 755 wikiFreeStyleWiki には、初期設定用のシェルスクリプトが同梱されているため、これを使って設定を行います。
$ cd wiki$ sh setup.sh# fswiki setup (for 3.5.8)...prepare... FSWIKI_HOME=. check ./wiki.cgi... okdo... check ./backup... check ./attach... check ./pdf... check ./log... check ./data... check ./config... check ./.htaccess... create.done以上で FreeStyleWiki の設置は完了です。ブラウザで http://localhost:10080/~ユーザ名/cgi-bin/wiki/wiki.cgi へアクセスしてみてください。「FrontPage」が表示されれば成功です。
BBS を開設する
Section titled “BBS を開設する”説明する必要もないかと思いますが、BBS はネットワーク上の電子掲示板サービスです。
今回は Groo-Web の TreeBBS を設置します。
TreeBBS のダウンロードと設置
Section titled “TreeBBS のダウンロードと設置”$ cd ~/public_html/cgi-bin$ wget http://www.groo-web.com/download/tree_b.zipダウンロードしたファイルを解凍します。このファイルを解凍すると圧縮されているファイルが現在のディレクトリにそのまま展開されてしまうので、展開先を指定して解凍を行います。
$ unzip tree_b.zip -d treebbs解凍するとファイルの展開情報が以下のように表示されます。
Archive: tree_b.zip inflating: treebbs/tree.cgiextracting: treebbs/data/count.logextracting: treebbs/data/tree.dat inflating: treebbs/images/clip.gif inflating: treebbs/images/new.gif inflating: treebbs/jcode.pl上記のように展開されたか、実際に確認してみましょう。(hogeのところにはユーザ名が表示されます)
$ ls -l treebbs/*-r--r--r-- 1 hoge hoge 19853 Nov 9 2002 treebbs/jcode.pl-rw-rw-r-- 1 hoge hoge 50752 Jan 12 2003 treebbs/tree.cgi
treebbs_test/data:total 0-rw-rw-r-- 1 hoge hoge 0 Dec 2 2002 count.log-rw-rw-r-- 1 hoge hoge 0 Nov 22 2002 tree.dat
treebbs_test/images:total 8-rw-rw-r-- 1 hoge hoge 96 Nov 9 2002 clip.gif-rw-rw-r-- 1 hoge hoge 118 Nov 9 2002 new.gifディレクトリのパーミッションを変更します。
$ chmod 755 treebbs次に、TreeBBS の設定ファイルを書き換えます。
$ cd treebbs現在の設定では vi で tree.cgi を開くと文字化けしてしまいますが、今はこのままで書き換えを行います。
$ vi tree.cgi- tree.cgi (1行目)
- 「 —」を1行目の末尾に追加
#/usr/bin/perl ↓ #/usr/bin/perl — 「 —」を加える理由についてはページ下部の講義外の項目に記載しているのでそちらを参照してください。
- 「 —」を1行目の末尾に追加
TreeBBS の実行ファイルである tree.cgi をサーバが実行できるようにパーミッションを変更します。
$ chmod 755 tree.cgijcode.pl をサーバが参照、書き込みできるようにパーミッションを変更します。
$ chmod 644 jcode.pldata ディレクトリ以下をブラウザから見えないようにパーミッションを変更します。
$ chmod 700 data以上で設置は完了です。ブラウザで http://localhost:10080/~ユーザ名/cgi-bin/treebbs/tree.cgi へアクセスしてみてください。
「TreeBBS」が表示されれば成功です。
設定についての詳しい解説は Groo-Web の TreeBBS 解説&ダウンロードページ を参照してください。
tree.cgi を文字化けしないようにして編集する
Section titled “tree.cgi を文字化けしないようにして編集する”現在の設定では、vi で tree.cgi を開くと文字化けしてしまいます。開いている PuTTY のタイトルバーの上で右クリックをして PuTTY 設定変更ウインドウを表示させ、一時的に設定を変更します。
カテゴリの[ウィンドウ]->[変換]->[受信されるデータの文字セット変換]から PuTTY の文字セットを [Shift-JIS] に変更し、[適用]を押してください。
また、サーバ側の文字セットも変更する必要があるため以下のコマンドを実行します。
LANG=jp_JP.UTF-8最後に、vi で tree.cgi を開いた後以下のコマンドを入力します。
:set encoding=shift-jis変更を終えたら、PuTTY の設定を変更したときと同じように[UTF-8(CJK)]に戻し、以下のコマンドでサーバ側の文字セットを元に戻してください。
LANG=en_US.UTF-8tree.cgi の修正内容の意味
Section titled “tree.cgi の修正内容の意味”今回扱った TreeBBS の tree.cgi は「 —」を1行目の末尾に加えなければ正しく動作させることが出来ません。これは tree.cgi の改行コードがプログラムの一部として誤って読み込まれてしまっていることが原因です。改行コードというのはテキストファイル中の改行を表す文字コードのことで、Windows では CR+LF、Unixでは LF というコードが使用されています。tree.cgi は perl という言語で書かれていて、この1行目には perl を実行するためのコマンドの場所が書かれています。tree.cgi の改行コードは CR+LF で、tree.cgi をそのまま実行するとこの改行コードが perl の実行オプションとして扱われてしまいます。「 —」を加えるとそこがオプションの終わりと見なされるため、改行コードを正しく読み込めるようになるというわけです。