ドキュメント > FreeBSDのWebサーバ化
FreeBSDのWebサーバ化
私ははなまるの讃岐うどんが好物なのですが、FreeBSDのインストール直後はちょうどかけうどんと同じ状態です。トッピング次第でどんなうどんにも生まれ変わります。ここではFreeBSDをWebサーバにする調理法を紹介します。
インストールするプログラム
単なるWebサーバならば、Apacheだけ走らせればこと足ります。さらにCGIを動かしたければPerlやPHP、データベースと連携したければMySQLなど、必要なものを追加していきます。
| ツール | ports |
|---|---|
| Perl | lang/perl5.8 |
| Apache | www/apache22 |
| PHP | lang/php5 |
| MySQL | databases/mysql50-server |
Perlのインストール
私が初めて学んだプログラミング言語はPerlなので、いつも最初にPerlを入れることにしています。ただしそういう理由がなくても、portsにはmakeするときにPerlが必要になるものがけっこうあるので、最初に入れておくとよいでしょう。
> cd /usr/ports/lang/perl5.8 > sudo make install clean
Apacheのインストール
WebサーバといえばApacheのことを指すと言っても過言ではないほど、世界中で使われているのがApacheです。いくつかのバージョンがありますが、公式サイトでは最新安定版を使うことが推奨されています。2008年5月現在、最新安定版はApache 2.2.8です。
> cd /usr/ports/www/apache22 > sudo make install clean
インストールオプションは特に設定しなくても大丈夫です。もし後になって足りない機能に気が付いたときはいったんdeinstallして、/var/db/ports/apache22/optionsファイルでオプションを設定してから再度makeしましょう。なお、再びオプション選択画面を出したければ、optionsファイルを削除します。
> cd /usr/ports/www/apache22 > sudo make deinstall > sudo rm /var/db/ports/apache22/options > sudo make install clean
Apacheには依存プログラムが多いのでmakeに時間がかかります。流れる文字を眺めながらコーヒーを飲むなど、気長に待つのがコツです。
インストールが終わったらさっそく起動してみましょう。
> rehash > sudo apachectl start
エラーメッセージ「Failed to enable the 'httpready' Accept Filter」が出た場合は、/boot/loader.confに次の一行を付け加えます。
accf_http_load="YES"
ブラウザからサーバのIPアドレス(http://192.168.1.3など)にアクセスして「It works!」と表示されれば成功です。次回OS起動以降にApacheを自動起動させるには、/etc/rc.confファイルに次の一行を加えます。
apache22_enable="YES"
Apacheの設定ファイルはhttpd.confです。巨大なファイルですが、とりあえず覚えておくべきキーワードは次の3つです。
- DocumentRoot
- 公開するディレクトリ
- ExecCGI
- CGIの実行を許可するオプション
- AddHandler
- 拡張子とファイルタイプの関連付け
デフォルトではセキュリティ上の理由で/usr/local/etc/apache22/cgi-binディレクトリのみでCGIの実行を許可するように設定されています。しかし、普通に使う分にはこの制約は邪魔なので、全ディレクトリでCGIの実行を許可したほうが快適に使えます。
DocumentRootを/usr/local/www/sitesに変更してCGIの実行を許可するには、次のようにhttpd.confを書き換えます。左の数字は行数の目安です。
> cd /usr/local/etc/apache22/ > sudo cp -p httpd.conf httpd.conf.orig > sudo vi httpd.conf 154 DocumentRoot "/usr/local/www/sites" 180 <Directory "/usr/local/www/sites"> 193 Options Indexes FollowSymLinks ExecCGI 367 AddHandler cgi-script .cgi
httpd.confを編集したら、文法が間違っていないかconfigtestでチェックしてからrestartしましょう。次の例では、公開ディレクトリ/usr/local/www/sitesを作成してstaffメンバーに編集を許可しています。
> cd /usr/local/www > sudo mkdir sites > sudo chmod 775 sites > sudo chgrp staff sites > cp apache22/data/index.html sites/ > cp apache22/cgi-bin/printenv sites/printenv.cgi > chmod 755 sites/printenv.cgi > sudo apachectl configtest Syntax OK > sudo apachectl restart
ブラウザからindex.htmlとprintenv.cgiにアクセスして適切に表示されれば成功です。
PHPのインストール
Perlと並んでCGIによく使われるPHPを入れておきます。CMSのWordPressを使う場合にも必要になります。
make時にAPACHEオプションを付けてください。なお、MULTIBYTEオプションを付けるとShift_JISでPHPコードを書けるようになります。
> cd /usr/ports/lang/php5 > sudo make install clean [X] APACHE Build Apache module
PHPの設定ファイルは、php.iniです。
> cd /usr/local/etc > sudo cp -p php.ini-dist php.ini
ApacheとPHPを連携させるには、httpd.confに次のIfModuleブロックを追加します。最終行あたりに追加すると後で見つけやすくなると思います。
<IfModule php5_module>
# If php is turned on, we respect .php and .phps files.
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps
# Since most users will want index.php to work we
# also automatically enable index.php
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
</IfModule>
PHPが正常に動作するかテストしてみましょう。phpinfo.phpファイルを作成して、次の一行を書き込みます。
<?php phpinfo(); ?>
ブラウザからアクセスして正常に表示されるか確認してください。
MySQLのインストール
DBMSはMySQLのほかにもPostgreSQLやSQLiteなどがあります。いずれも必要十分の性能なので、好みで選ぶとよいと思います。私は、なんとなくドキュメント類がほかよりも充実していそうなのでMySQLを使っています。
> cd /usr/ports/databases/mysql50-server > sudo make install clean
MySQLの設定ファイルmy.cnfを/etcにコピーします。my-small.cnfは小規模データベース用のセッティングになっています。
> sudo cp /usr/local/share/mysql/my-small.cnf /etc/my.cnf
文字コードをutf8で統一するために、my.cnfの[mysqld]、[mysqldump]、[mysql]ブロックに次の一行を加えます。
[mysqld] default-character-set=utf8 [mysqldump] default-character-set=utf8 [mysql] default-character-set=utf8
# 変更前 mysql> SHOW VARIABLES LIKE 'character_set_%'; +--------------------------+--------+ | Variable_name | Value | +--------------------------+--------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | +--------------------------+--------+ 7 rows in set (0.02 sec) # 変更後 mysql> SHOW VARIABLES LIKE 'character_set_%'; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/share/mysql/charsets/ | +--------------------------+----------------------------------+ 8 rows in set (0.02 sec)
新規データベースをインストールします。データベースを作り直したいときは、/var/db/mysqlを削除して、再度データベースをインストールします。
> sudo mysql_install_db --user=mysql
MySQLサーバを起動します。&記号でバックグラウンドジョブにするとき、直前にlsコマンドでパスワードを入力しておくと、mysqld_safeコマンドのときにパスワードを入力する必要がなくなりうまくいきます。
> sudo ls Password: > sudo mysqld_safe --user=mysql &
MySQL管理者のパスワードを設定します。
> mysqladmin -u root password "yourpassword"
初期のデータベースには不要なユーザとデータベースが含まれているので削除してしまいます。mysql.userテーブルを表示して、不要なユーザをとデータベースをDROPコマンドで消します。次の出力サンプルはドメインame.poturi.comで運用しているサーバの例です。
> mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.0.51a FreeBSD port: mysql-server-5.0.51a Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SELECT user,host FROM mysql.user; +------+----------------+ | user | host | +------+----------------+ | root | 127.0.0.1 | | | ame.poturi.com | | root | ame.poturi.com | | | localhost | | root | localhost | +------+----------------+ 5 rows in set (0.00 sec) mysql> DROP USER ''@ame.poturi.com; mysql> DROP USER ''@localhost; mysql> DROP USER 'root'@ame.poturi.com; mysql> SELECT user,host FROM mysql.user; +------+-----------+ | user | host | +------+-----------+ | root | 127.0.0.1 | | root | localhost | +------+-----------+ 2 rows in set (0.00 sec) mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec) mysql> DROP DATABASE test; mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set (0.00 sec) mysql> exit Bye
MySQLを自動起動するには、/etc/rc.confに次の一行を加えます。
mysql_enable="YES"
MySQLの詳細についてはリファレンスマニュアルを参照してください。
