前回は Web サーバである Apache のインストールを行いました。
今回は Apache を使って Blog や Wiki 、BBS といった Web アプリケーションの設置を行っていきます。
CGI とは Web サーバにクライアント (ブラウザなど) からの要求に応じてプログラムを Web サーバ内で実行させるための仕組みのことです。これにより Web サーバに文章やファイルなどを生成、また、クライアントに送信させることが出来るので、今回取り扱う Blog や Wiki 、BBS をはじめ検索サイトやアクセスカウンター、チャットなどを実現することが出来ます。今挙げた物は CGI 以外の技術でも実現することが可能ですが、その中でも比較的簡単な CGI を扱っていきます。
現状の Apache の設定では Apache は CGI プログラムを実行することができません。初めに CGI を実行できるように Apache の設定ファイルを書き換えます。今回の環境では一般ユーザは Apache の設定ファイルを書き換えられないので root になって作業を行います。
$ su - # vi /etc/httpd/conf/httpd.conf
#AddHandler cgi-script .cgi
↓
AddHandler cgi-script .cgi .pl .rb
また、ディレクトリのインデックスファイルに index.rb を追加します。
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
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-bin
cgi-bin ディレクトリに移動し、test.cgi を作成します。
$ cd cgi-bin $ vi test.cgi
#!/usr/bin/perl print "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 とは、ネット上の日記のようなもので、書き込んだ日記に、離れたところにいる友達や、見知らぬ誰かがツッコミを入れたりできるシステムです。今回は、オープンソースかつフリーな Blog プログラムである 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.gz
tdiary-2.0.4 というディレクトリができれば成功です。
$ ls -l total 2084 drwxr-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 tdiary
tDiary の実行ファイルである index.rb と update.rb をサーバが実行できるようにパーミッションを変更します。
$ cd tdiary $ chmod 755 index.rb update.rb
以上でtDiary の設置は完了です。
日記データを保存するディレクトリを作成します。このディレクトリはサーバが書き込める必要があるため root になり、グループとパーミッションを変更します。
$ mkdir ~/diary $ su - # chgrp httpd ~ユーザ名/diary # chmod 775 ~ユーザ名/diary # exit
tDiary にはあらかじめサンプルの設定ファイルが用意されているので、このファイルをコピーしたものを元に設定を行います。
$ cp tdiary.conf.sample tdiary.conf
現在の設定では、vi で tdiary.conf を開くと文字化けしてしまいます。開いている PuTTY のタイトルバーの上で右クリックをして PuTTY 設定変更ウインドウを表示させ、一時的に設定を変更します。カテゴリの[ウィンドウ]->[変換]->[受信されるデータの文字セット変換]から PuTTY の文字セットを [EUC-JP] に変更し、[適用]を押してください。
また、サーバ側の文字セットも変更する必要があるため以下のコマンドを実行します。
LANG=jp_JP.EUC-JP
$ vi tdiary.conf
@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 Error The 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.rb
Ruby が見つからないことがエラーの原因のようです。Ruby とは、スクリプト言語の 1 つで、tDiary も Ruby で書かれています。そのため、実行するためには Ruby をインストールする必要があります。CentOS 4.3 にはあらかじめパッケージが用意されているので、yum でインストールします。
# yum install ruby Setting up Install Process Setting up repositories ………
途中でインストールするかどうか確認を求められるので、
Is this ok [y/N]: y
と入力してください。
最後に Complete! と表示されればRubyのインストールは完了です。再度ブラウザでhttp://localhost:10080/~ユーザ名/cgi-bin/tdiary/にアクセスして、 「ほげほげ日記」 が表示されれば成功です。後は README や 日記の書き方 、また、 tDiary.org などを参考にして好きなようにカスタマイズしてみてください。なお、 設定 画面には 追記 から行くことができます。
次の作業に移る前に、
# exit
で一般ユーザに戻っておきましょう。
Wiki は、ブラウザを利用してサーバ上の文書を書き換えるシステムの一種です。Wiki では通常、誰でも、ネットワーク上のどこからでも、文書の書き換えができるようになっているので、共同作業で文書を作成するのに便利です。
今回は、国産 Wiki クローンの1つである 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 -l total 896 drwxrwxr-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 wiki
FreeStyleWiki には、初期設定用のシェルスクリプトが同梱されているため、これを使って設定を行います。
$ cd wiki $ sh setup.sh # fswiki setup (for 3.5.8)... prepare... FSWIKI_HOME=. check ./wiki.cgi... ok do... 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 はネットワーク上の電子掲示板サービスです。
今回は Groo-Web の 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.cgi extracting: treebbs/data/count.log extracting: 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
#/usr/bin/perl
↓
#/usr/bin/perl --
「 --」を加える理由についてはページ下部の講義外の項目に記載しているのでそちらを参照してください。
TreeBBS の実行ファイルである tree.cgi をサーバが実行できるようにパーミッションを変更します。
$ chmod 755 tree.cgi
jcode.pl をサーバが参照、書き込みできるようにパーミッションを変更します。
$ chmod 644 jcode.pl
data ディレクトリ以下をブラウザから見えないようにパーミッションを変更します。
$ chmod 700 data
以上で設置は完了です。ブラウザで http://localhost:10080/~ユーザ名/cgi-bin/treebbs/tree.cgi へアクセスしてみてください。
「TreeBBS」が表示されれば成功です。
設定についての詳しい解説は Groo-Web の TreeBBS 解説&ダウンロードページ を参照してください。
現在の設定では、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-8
今回扱った TreeBBS の tree.cgi は「 --」を1行目の末尾に加えなければ正しく動作させることが出来ません。これは tree.cgi の改行コードがプログラムの一部として誤って読み込まれてしまっていることが原因です。改行コードというのはテキストファイル中の改行を表す文字コードのことで、Windows では CR+LF、Unixでは LF というコードが使用されています。tree.cgi は perl という言語で書かれていて、この1行目には perl を実行するためのコマンドの場所が書かれています。tree.cgi の改行コードは CR+LF で、tree.cgi をそのまま実行するとこの改行コードが perl の実行オプションとして扱われてしまいます。「 --」を加えるとそこがオプションの終わりと見なされるため、改行コードを正しく読み込めるようになるというわけです。