繰り返しになるが、あくまで俺が何度も試してみた結果でしかないので、これが正解というわけではないことを断っておく。
ただ、Linuxを基礎から覚えたい!Webの仕組みを1から網羅したい!という人だけではないとおもうし、必要に迫られてググってたどり着いた人も多いとおもうので、なるべくかいつまんで説明する予定だ。
ただしかいつまむと言ってもさすが俺のことだ。DNSの部分など、可能な限り、「AするとBになる」という因果関係だけで終わらせるのは避け(これは俺の大嫌いなパターン)「AするとBになるのはCだから」まで掘り下げて書こうと思っている。しかしくどくならないように、全体的にはさっぱりサラサラのサラサーティ且つ、ダウニー的爽やかさを醸し出せるように意識して書いたつもりだ(おい、怒るな!)。
ちなみにLinuxのホスト名をtorhamzedd.comとし、ドメインもtorhamzedd.comとするのを前提として説明する。
というわけで早速いってみよう。
■Apacheの設定
設定ファイルは予めバックアップを取っておく。
端末でrootになり、以下のようにしてコピーしておこう。
- # cd /etc/httpd/conf/
- # cp httpd.conf httpd.conf.20110822
- # vi httpd.conf
設定項目 | 変更前 | 変更後 |
---|---|---|
※ServerLimit | 256 | 300 |
※MaxClients | 256 | 300 |
※MaxRequestsParChild | 4000 | 50 |
ServerTokens | OS | Prod |
ServerName | www.example.com:80 | torhamzedd.com:80 <コメントを外す> |
Options | FollowSymLinks | Includes ExecCGI FollowSymLinks |
AllowOverride | None | All |
ServerSignature | On | Off |
AddDefaultCharset | UTF-8 | UTF-8 <コメントを外すだけ> |
AddHandler cgi-script | .cgi | .cgi .pl <コメントを外す> |
NameVirtualHost | *:80 | *:80 <コメントを外すだけ> |
LanguagePriority | en ca・・・ | ja en ca… <jaを先頭に持ってくる> |
(※)prefork.cの設定になる。
この設定はむしろサーバ側の負荷を抑えるための設定になるので、クライアントマシンとしてのLinuxで行うのは不適切だが、可能な限りサーバ側に合わせられるのもLinuxをクライアントとして使う醍醐味でもあるので、この設定にしてある。
あと、phpメインの人には余り関係ないが、どの場所でもCGIが使えるようになっており、拡張子も.cgiだけでなく、.plも使用可にしてある。
そしてファイルの最後の行に、以下のようにバーチャルホストのデフォルト設定を記述すれば完了だ。
- <virtualhost *:80>
- ServerAdmin root@localhost
- ServerName torhamzedd.com
- DocumentRoot /var/www/html
- </virtualhost>
もしAWStatsを使うのであれば、エラーログファイルのフォーマットを1つ追記しておき、アクセスログはcommonではなくcombinedを指定するようにする。
- LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
- UseHTTPSLinkForUrl="/"
■PHPの設定
phpの設定ファイルも必要に応じてバックアップを取っておこう。
※個人的には/etc直下がバックアップファイルまみれになるのが嫌なので、php.iniやmycnfバックアップは撮ってない。
早速設定を行う。
- # vi /etc/php.ini
設定項目 | 変更後 |
---|---|
※post_max_size | 1024M |
※upload_max_filesize | 1024M |
※memory_limit | 1024M |
mbstring.language | Japanese |
mbstring.internal_encoding | UTF-8 |
mbstring.http_input | UTF-8 |
mbstring.http_output | UTF-8 |
mbstring.detect_order | auto |
expose_php | Off |
(※)このパラメータは、phpMyAdminなどのWebインタフェース上において、数百メガのSQLファイルをアップロードする場合などのために増やしてあるに過ぎず、これほど大きなサイズを運用で設定しっぱなしというのは結構危険なので、クライアント側だけにとどめておこう。
その他、mbstring系は最初コメントアウトされているので、上記のすべての「;」は消しておこう。
expose_phpというのは、phpでメール送信した場合にphpということを隠すかどうかの設定だ。今回はOffにしてある。
これでPHPの設定は完了だ。
この時点でApacheを起動、もしくは再起動してOK。
- # service httpd start
- # chkconfig httpd on
手頃な場所にphpinfo()を記述したphpファイルを設置し、ブラウザで見てみると良い。
これでApacheとPHPの設定は完了だ。
■MySQLの設定
MySQLは5.1から5.5で、設定ファイルの記述に変化があった。
特に大きいのが、UTF-8などの文字コードを明示的に指定する部分だろう。
ただ5.5でもちゃんと指定することが出来るので安心だ。
MySQLの設定ファイルは/etc/my.cnfだ。
不安な人はバックアップしておくとよいが、俺は先程も書いたとおり、/etc直下がバックアップファイルでごちゃごちゃするのが好きではないので、my.cnfのバックアップもしてない。
- # vi /etc/my.cnf
- default-storage-engine=INNODB
- skip-character-set-client-handshake
- character-set-server=utf8
- max_connections=120
- innodb_thread_concurrency=8
- innodb_buffer_pool_size=1024M
- innodb_log_file_size=128M
- innodb_file_per_table
- read_buffer_size=1M
- query_cache_size=12M
「max_connections」から「query_cache_size」までは2011.11.14日追記
最初の行は、俺は個人的に常にInnoDBを使うので、いちいち設定するのが面倒だからデフォルトでInnoDBになるように設定している。
2行目と3行目では文字コードの設定をしているが、5.1とでは項目名が違うので注意。
innodb_thread_concurrencyはMySQL5.5だと20がデフォルトだが、この20というのは無制限という意味になってしまうらしく、中規模サイトだとメモリを食いつぶす可能性があるため、明示的に8にしてある(現在調査中)。
起動時にエラーが出るようであれば、何かが間違っている。俺の設定が間違っている可能性も当然ある。
その場合、「innodb_file_per_table」だけを設定して、あとは行頭に「;」を入れてコメントアウトしてから起動すると良いかもしれない。
申し訳ないが、まだMySQL5.5は理解してない部分が多いため、あまり俺の設定を信用しないほうが良いと思う。これでMySQLの設定は完了。次にデータベースのセットアップを行う。
後日ちゃんと調べて記事にするのでご期待頂きたく。
セットアップに先立って、起動と自動起動の設定を行う。
- # service mysqld start
- # chkconfig mysqld on
MySQLが無事に起動したら、以下の初期化コマンドを実行する。
- # mysql_secure_installation
それまでは空EnterでOK。
上記コマンドで初期化が終わったら、今度はMySQLの一般ユーザを作る。
通常、こちらのユーザでMySQLに接続するようにする。
一旦rootでMySQLにログインし、grantコマンドでユーザを作る。
今回作る一般ユーザは
IDが「dbuser」
PSが「dbpass」
ということにする。
- # mysql -uroot -p
- mysql> grant all privileges on *.* to dbuser@localhost identified by 'dbpass';
- mysql> exit
これでMySQLのセットアップはOK。
■Postfixの設定
さてPostfixの設定を行おう。基本的にはただ単純に、SendmailからPostfixへ切り替えるだけなので、それほど大した設定をおこおなうわけではないが、念の為、本番サーバでも通用するような設定項目もあえて記述しておくことにする。
とにかく開発環境と本番サーバが似ていれば似ているほど、定時に帰って立ち飲み屋でいっぱい引っ掛けるプレイが可能となる。
では早速設定してみよう。
- # vi /etc/postfix/main.cf
項目名 | 設定内容 | 説明 |
---|---|---|
myhostname | mail.torhamzedd.com | ホスト名にmail.をつけておく |
mydomain | torhamzedd.com | ドメイン名。ホスト名と同じで良い |
myorigin | $mydomain | @mail.torhamzedd.comではなく@torhamzedd.comにするため、mydomainを指定する |
inet_interfaces | all | 待ち受けるネットワークインタフェース全部を指定 |
mydestination | $myhostname, localhost.$mydomain, localhost, $mydomain | ローカルで受信するドメイン名を指定 |
mynetworks | 192.168.1.0/24, 127.0.0.0/8 | 許可しているIPアドレス |
relay_domains | $mydestination | 中継を許可するドメイン |
home_mailbox | Maildir/ | メールボックスの種類 |
header_checks | regexp:/etc/postfix/header_checks | Received行を削除※ |
smtpd_banner | $myhostname ESMTP unknown | MTAの隠蔽 |
smtpd_client_restrictions | permit_mynetworks, reject_rbl_client relays.ordb.org, permit | SPAM対策(追記する) |
smtpd_sasl_auth_enable | yes | SMTP-AUTH設定(追記する) |
smtpd_sasl_local_domain | $myhostname | SMTP-AUTH設定(追記する) |
smtpd_recipient_restrictions | permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination | SMTP-AUTH設定(追記する) |
smtpd_recipient_limit | 10 | 1送信における宛先人数制限(SPAM踏み台対策)この場合10人まで |
mailbox_size_limit | 104857600 | メールボックスの容量制限。この場合100MB(1024×1024×100) |
message_size_limit | 10485760 | メール1通の容量制限。この場合10MB(1024×1024×10) |
(※)この部分に関しては別のファイルになるので、そちらで編集する必要がある。
- # vi /etc/postfix/header_checks
- /^Received:/ IGNORE
これで基本設定はOKだ。
あとはユーザディレクトリ作成時のテンプレートとなるskel内に、メール用のディレクトリを設置するようにしておく。
- # mkdir -p /etc/skel/Maildir/{new,cur,tmp}
- # chmod -R 700 /etc/skel/Maildir/
設定は以上なので、Postfixを起動する。
- # service sendmail stop
- # chkconfig sendmail off
しかし現状、Sendmailが優先してしまっていると思うので、専用コマンドで入れ替えることにする。
- # alternatives --config mta
- 2 プログラムがあり 'mta' を提供します。
- 選択 コマンド
- -----------------------------------------------
- + 1 /usr/sbin/sendmail.sendmail
- 2 /usr/sbin/sendmail.postfix
- Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
これでPostfixの設定はOKだ。
試しに以下のコマンドで受信可能なメールアドレスにメールを送信してみよう。
ここではyou@example.comにメールを送信することとする。
- # mail you@example.com
- Subject: <件名を入力する>
- <本文を入力する>
- <終了するときは「.」のみの行で改行する>
■BINDの設定
おまちかねのBINDの設定だ。
これさえやっておけば、いつでもどこでもノマドなコ・ワーキング且つ、自分がいる場所がデモ会場となる。素晴らしすぎて屁で空が飛べる可能性も高くなるというものだ。
俺のように全部一人でやらされている人は別として、ちゃんと他者とコラボしている人なら作業効率アップしまくって、そのうちエラ呼吸ができるようになるのかもしれない。
閑話休題。
早速設定してみよう。
まずは事前準備として、chroot対策ファイルコピーシェルを作成し、1度だけ実行しておく。
- # vi bind-chroot-admin
ファイルの中身はこちら。
- #!/bin/sh
- # bind-chroot install check
- rpm -q bind-chroot > /dev/null 2>&1
- [ $? -ne 0 ] && echo bind-chroot not install && exit 1
- # bind-chroot enabled
- sed -i '/^ROOTDIR=/d' /etc/sysconfig/named
- echo ROOTDIR=/var/named/chroot >> /etc/sysconfig/named
- # file copy
- filelist=`mktemp`
- rpm -ql bind|grep ^/etc >> ${filelist}
- rpm -ql bind|grep ^/var >> ${filelist}
- for file in `cat ${filelist}`
- do
- # directory make
- if [ -d ${file} ]; then
- DIRNAME=/var/named/chroot${file}
- [ ! -d ${DIRNAME} ] && mkdir -p ${DIRNAME}
- fi
- # file copy
- if [ -f ${file} ]; then
- DIRNAME=/var/named/chroot`dirname ${file}`
- [ ! -d ${DIRNAME} ] && mkdir -p ${DIRNAME}
- /bin/cp -a ${file} ${DIRNAME}
- fi
- done
- rm -f ${filelist}
- chown named:named /var/named/chroot/var/named/data
- chmod 770 /var/named/chroot/var/named/data
- chown named:named /var/named/chroot/var/named/dynamic
- exit
作成したら実行する。
- # sh bind-chroot-admin
これで、chrootが入っているかいないかにかかわらず、適切なファイルコピー処理がされた。
事前準備はこれで終わり。このファイルは消してしまっても構わない。
次の処理は、BINDの設定ファイルの編集、ゾーンファイルの作成の2個になる。
まずはBINDの設定ファイルの編集だ。
- # vi /var/named/chroot/etc/named.conf
- include "/etc/named.rfc1912.zones";
- include "/etc/named.root.key";
- zone "torhamzedd.com" IN {
- type master;
- file "torhamzedd.com.zone";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "torhamzedd.com.rev";
- };
- torhamzedd.comでアクセスされたら「torhamzedd.com.zone」を見ておくれやす
- 127.0.0.1やlocalhostでアクセスされたら「torhamzedd.com.rev」を見ておくれやす
ちなみに前者を正引き(せいびき)、後者を逆引きと呼ぶ。
これで設定ファイルは完了。
次に正引き逆引きのゾーンファイルを作成する。
まずは正引きファイルを作成だ。
- # vi /var/named/chroot/var/named/torhamzedd.com.zone
- $TTL 86400
- @ IN SOA torhamzedd.com. root.torhamzedd.com. (
- 2011062601 ; serial
- 28800 ; refresh
- 14400 ; retry
- 3600000 ; expire
- 86400 ; minimum
- )
- IN NS torhamzedd.com.
- IN MX 10 mail.torhamzedd.com.
- @ IN A 127.0.0.1
- * IN A 127.0.0.1
- DNSはtorhamzedd.comだよ
- メールサーバはmail.torhamzedd.comだよ
- IPアドレスは127.0.0.1だよ
つまり、ブラウザでtorhamzedd.comというドメインにアクセスした場合、必ず127.0.0.1、つまり自分自身にアクセスしてくれるということだ。
更にワイルドカードで「*」をつけたため、例えばaaa.torhamzedd.comでもbbb.torhamzedd.comでもOKというこの素晴らしさ。
さて次は逆引きのゾーンファイルを作ろう。
- # vi /var/named/chroot/var/named/torhamzedd.com.rev
- $TTL 86400
- @ IN SOA torhamzedd.com. root.torhamzedd.com. (
- 2011062601 ; serial
- 28800 ; refresh
- 14400 ; retry
- 3600000 ; expire
- 86400 ; minimum
- )
- IN NS torhamzedd.com.
- IN PTR torhamzedd.com.
通常、自分自身のIPアドレスの4オクテット目をPTRレコードに記述するが、書いてしまうとそのIPアドレスでないと動かなくなるので、ここでは何も指定していない。
というわけで、これでBINDの準備が揃ったが、そもそも自分自身に対して、自分自身のBINDを優先的に使えという指示を出さないといけない。つまりリゾルバだ。
リゾルバに自分自身のDNSであるBINDを指定し、その後に外部のDNSなどを指定すれば、torhamzedd.comは必ず自分のマシンを見て、それ以外は外部のDNSを見てくれるようになる。
というわけでリゾルバの設定は以下のようにする。
- # vi /etc/resolv.conf
- search torhamzedd.com
- nameserver=127.0.0.1
- nameserver=<プロバイダのDNSなど>
- nameserver=<プロバイダのDNSなど>
- ・・・
使っているマシンのNICが1枚なら、以下の場所に設定ファイルがおいてある。
- # vi /etc/sysconfig/network-scripts/ifcfg-eth0
ネットワークインタフェースの編集をしたら、ネットワークの再起動が必要になるので、以下のコマンドでネットワークを再起動しよう。
- # service network restart
ようやくBINDの全設定が終わったので、起動し、自動起動の設定も済ませておく。
- # service named start
- # chkconfig named on
これで今日からあなたのマシンはデモ環境機能を備えた最強マシンとなった。
Linuxのhostsファイルは、Windowsのように同じIPを複数行に書くことができないので、1行がべらぼうに長くなる。それに同じドメインでサブドメインが複数ある場合なんか、更に面倒くさくなる。
しかし安心されよ!もうそのアホみたいな作業からは開放されたばい!!
別のドメイン使いたかったら、設定ファイルに追加した内容をドメイン分ふやし、ゾーンファイルもドメイン分増やせば良い!!
はい今終わった!
今hostsファイルいじる作業永遠に終わったよ!
早速街へ繰り出し、洒落&乙なカフェバーにでもドヤ顔で入店後、周りの人に見えるようにデモを行うと寝覚め通いと思われる。
■次回は?
次回は、NetBeansやRegexxerなどの、開発時に便利なGUIアプリを紹介する予定だ。
facebook
twitter
google+
fb share