サーバーリテラシ2005 - 第5回 CGI アプリケーション
CGI とは?
Section titled “CGI とは?”CGI とは、Web サーバーが クライアント (Web ブラウザなど) からの要求に応じてプログラムを動作させるための仕組みのことです。従来 Web サーバーは、HTML ファイルや画像ファイルのように、あらかじめ作られたデータをただ送信するだけでした。これでは、情報をその場で生成して送信するような仕組みを作るのは困難です。そこで、サーバープログラムからほかのプログラムを呼び出し、その処理結果をクライアントに送信する方法が考え出されました。これにより、便利な検索サイトや、掲示板、アクセスカウンターなどが実現されています。今回は、CGIプログラムの例として、何かと話題の Blog と Wiki の設置方法を取り上げます。
ユーザー領域でサイトを管理する
Section titled “ユーザー領域でサイトを管理する”前回、Web サーバーをインストールしましたが、Web サイトを管理できるのは管理者だけでした。これではセキュリティー面であまり安全ではないので、一般ユーザーのホームディレクトリにあるファイルを公開できるようにします。
端末を起動し、 root になります。
# su -エディターで Web サーバーの設定ファイルを編集します。
# vi /etc/httpd/httpd.confUserDir public_html という記述の下に以下の設定を追加してください。
<Directory /home/*/public_html> Options None AllowOverride All</Directory>
<Directory /home/*/public_html/cgi-bin> Options ExecCGI</Directory>この設定の意味は次の通りです。
:<Directory /home//public_html>:ディレクトリ ”/home//publichtml” ( はワイルドカード) に関する設定
:Options None:特別な機能をすべて無効にする
:AllowOverride All:.htaccess ファイルによる設定の上書きを有効にする
:<Directory /home/_/public_html/cgi-bin>:ディレクトリ ”/home/*/public_html/cgi-bin” に関する設定
:Options ExecCGI:CGI を実行する
ユーザー領域でもCGIが実行できるように設定を変更します。
#Add-Handler cgi-script .cgi ↓Add-Handler cgi-script .cgi追加したら、保存してエディタを終了してください。
設定を適用します。
# /etc/init.d/httpd reloadReloading httpd: [ OK ]Web サーバーの実行ユーザーである httpd が、一般ユーザーのホームディレクトリ内にアクセスできるようにグループとパーミッションを変更します。
# chgrp httpd ~ユーザー名# chmod g+rx ~ユーザー名一般ユーザーに戻って、テストをします。ホームディレクトリのすぐ下に public_html というディレクトリを作ってください。
# exit$ cd$ mkdir public_html$ cd public_htmlindex.html というファイルを作り、適当な HTML を入力します。
$ cat > index.html<html><head><title>てすと</title></head><body>ほげほげ</body></html>ブラウザで http://自分のIPアドレス/**~ユーザー名**/ にアクセスし、正しくページが表示されれば成功です。
ほげほげCGI が正しく実行できるかも確認してみましょう。
$ mkdir cgi-bin$ chmod 755 cgi-bin$ cd cgi-bin$ cat > test.cgi#!/usr/bin/perlprint "Content-type: text/plain\n\n";print "$_ = $ENV{$_}\n" for (keys %ENV);$ chmod 755 test.cgiブラウザで http://自分のIPアドレス/**~ユーザー名**/cgi-bin/test.cgi にアクセスし、正しくページが表示されれば成功です。
SCRIPT_NAME = /~*/cgi-bin/test.cgiSERVER_NAME = 192.168.1.*. . .HTTP_HOST = 192.168.1.*それでは実際にCGI プログラムを設置してみましょう。
Blog を開設する
Section titled “Blog を開設する”Blog とは、いまさら説明の必要もないでしょうが、ネット上の日記のようなもので、書き込んだ日記に、離れたところにいる友達や、見知らぬ誰かさんがツッコミを入れたりできるシステムです。ここでは、オープンソースかつフリーな Blog プログラムである tDiary の設置方法を紹介します。
tDiary のダウンロードとインストール
Section titled “tDiary のダウンロードとインストール”tDiary は、tDiary.org より配布されていますので、ここから tdiary-full-2.0.2.tar.gz をダウンロードします。
$ cd ~/public_html/cgi-bin$ wget http://www.tdiary.org/download/tdiary-full-2.0.2.tar.gzダウンロードしたファイルは圧縮されているので解凍します。
$ tar zxf tdiary-full-2.0.2.tar.gztdiary-2.0.2 というディレクトリができれば成功です。
$ ls -l合計 2080drwxr-xr-x 9 hoge hoge 4096 12月 01 18:35 tdiary-2.0.2-rw-rw-r-- 1 hoge hoge 2121313 12月 01 18:30 tdiary-full-2.0.2.tar.gzURL にバージョン番号が入っていると邪魔なのでディレクトリを tdiary に変更します。
$ mv tdiary-2.0.2 tdiary次に、tDiary の実行ファイルである index.rb と update.rb をサーバーが実行できるようにパーミッションを変更します。
$ cd tdiary$ chmod 755 index.rb update.rb以上でtDiary のインストールは完了です。
設定を変更する
Section titled “設定を変更する”次に tDiary の設定を変更します。
tDiary の実行環境を整える
Section titled “tDiary の実行環境を整える”現在のサーバーの設定では、CGI プログラムの拡張子は .cgi なので、これに Ruby スクリプトの拡張子である .rb を追加します。一般ユーザーではシステムの設定を変更できないため、.htaccess ファイルを使って設定を上書きします。
$ cat > .htaccessAddHandler cgi-script .rbDirectoryIndex index.rb次に、tDiary の設定を変更します。tDiary の設定の一部は、tdiary.conf を直接編集して変更します。サンプルの設定ファイルをコピーし、テキストエディタで開いて変更してください。
vi で tdiary.conf を開くと文字化けするという場合は、vi ではなく emacs を使用するか、PuTTY の文字セットを EUC-JP に変更し、以下のコマンドを実行してから vi で開いてください。コマンド: LANG=ja_JP.EUC-JP- サンプルをコピー
$ cp tdiary.conf.sample tdiary.conf- 日記データの保存ディレクトリ (tdiary.conf)
@data_path = '/home/foo/diary' ↓@data_path = '/home/ユーザー名/diary'ほかの項目は、お好みに合わせて適宜、変更してください。
最後に、日記データの保存ディレクトリを作ります。このディレクトリはサーバーが書き込める必要があるため、いったん root になり、グループとパーミッションを変更します。
$ mkdir ~/diary$ su -# chgrp httpd ~ユーザー名/diary# chmod g+w ~ユーザー名/diaryRuby のインストール
Section titled “Ruby のインストール”ここまでで tDiary のインストールは完了ですので、ブラウザで表示してみましょう。任意のブラウザで http://自分の IP アドレス/~ユーザー名/cgi-bin/tdiary/index.rb へアクセスしてみてください。
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.エラーが出てしまいました。サーバーのログファイルを見てみましょう。
$ su -# tail /var/log/httpd/error_log[Fri Dec 01 20:00:00 2005] [error] [client 192.168.1.*] /usr/bin/env:[Fri Dec 01 20:00:00 2005] [error] [client 192.168.1.*] ruby[Fri Dec 01 20:00:00 2005] [error] [client 192.168.1.*] : No such file or directory[Fri Dec 01 20:00:00 2005] [error] [client 192.168.1.*][Fri Dec 01 20:00:00 2005] [error] [client 192.168.1.*] Premature end of script headers: index.rbruby が見つからないことがエラーの原因のようです。Ruby とは、スクリプト言語の 1 つで、tDiary も Ruby で書かれています。なので、実行するためには Ruby をインストールする必要があります。CentOS 4.2 にはあらかじめパッケージが用意されているので、yum でインストールします。
# yum install rubySetting up Install ProcessSetting up repositories・・・Is this ok [y/N]: yインストールが成功したら、もう一度ブラウザでアクセスしてみてください。「ほげほげ日記」が表示されれば成功です。
Wiki ページを開設する
Section titled “Wiki ページを開設する”Wiki とは、ブラウザを利用してサーバー上の文書を書き換えるシステムの一種です。Wiki では通常、誰でも、ネットワーク上のどこからでも、文書の書き換えができるようになっているので、共同作業で文書を作成するのに便利です。
今回は、国産 Wiki クローンの1つである FreeStyleWiki を設置してみます。
FreeStyleWiki のダウンロードとインストール
Section titled “FreeStyleWiki のダウンロードとインストール”FreeStyleWiki は、http://fswiki.poi.jp/ より配布されていて、2005 年 12 月 6 日現在の最新バージョンは 3.5.10 です。tDiary と同様に、ダウンロードしてください。
$ cd ~/public_html/cgi-bin$ wget http://osdn.dl.sourceforge.jp/fswiki/17805/wiki3_5_10.zipこのファイルは ZIP 形式のアーカイブなので unzip コマンドで解凍します。
$ unzip wiki3_5_10.zipアーカイブのファイル名と同じディレクトリができれば成功です。
$ ls -a合計 2080drwxr-xr-x 9 hoge hoge 4096 12月 01 18:55 wiki3_5_10-rw-rw-r-- 1 hoge hoge 881307 12月 01 18:50 wiki3_5_10.zipディレクトリ名を変更します。
$ mv wiki_3_5_10 wikiFreeStyleWiki には、初期設定用のシェルスクリプトが同梱されているのでこれを使ってしまいましょう。
$ cd wiki$ sh setup.shfswiki setup (for 3.5.8).... . .done以上で設置は完了です。ブラウザで http://自分の IP アドレス/~ユーザー名/cgi-bin/wiki/wiki.cgi へアクセスしてみてください。「FrontPage」が表示されれば成功です。