NTP、apacheとPHPとSmartyとMySQL環境の構築
前回で、基本のみの構築ができました。これから色々と入れる作業になっていきます。
まず最初にNTPを入れます。時刻合わせを自動でしてくれるもの・・という理解でいいと思います。NTPは私のインストールでは入っていましたが、インストール方法の違いからインストールされていないかもしれません。そんな時はコマンドラインからインストール。
設定を書き換えます。
起動時に時間が大幅に狂っているとNTPが起動できないそうなので、起動前に手動で合わせます。
あとはNTPを起動させ、サーバー起動時に自動で起動するように設定します。
NTPの動作状態を見るときは、次のコマンドになります。
起動時の「ntpd」ではなく、「ntpq」なので注意です。
まず最初にNTPを入れます。時刻合わせを自動でしてくれるもの・・という理解でいいと思います。NTPは私のインストールでは入っていましたが、インストール方法の違いからインストールされていないかもしれません。そんな時はコマンドラインからインストール。
# yum -y install ntp
設定を書き換えます。
# vi /etc/ntp.conf
server 0.rhel.pool.ntp.org
server 1.rhel.pool.ntp.org
server 2.rhel.pool.ntp.org
↓この3行を下のように変える
server ntp.jst.mfeed.ad.jp
起動時に時間が大幅に狂っているとNTPが起動できないそうなので、起動前に手動で合わせます。
# ntpdate ntp.jst.mfeed.ad.jp
あとはNTPを起動させ、サーバー起動時に自動で起動するように設定します。
# /etc/rc.d/init.d/ntpd start
# chkconfig ntpd on
NTPの動作状態を見るときは、次のコマンドになります。
# ntpq -p
起動時の「ntpd」ではなく、「ntpq」なので注意です。
Webサーバー構築するためにapacheを入れます。
設定の変更をします。
で、設定ファイルの編集をします。まず、エラー時にOS名などを表示しないようにします。44行目辺りにある設定を変更します。
276行あたりにある設定で、サーバー名の指定を行います。
331行目辺りにある設定でCGI・SSIの使用許可をします。
338行目辺りにある設定で「.htaccess」の許可を指定します。
497行目あたりにある設定で、長すぎるURI(414エラー)をログに記録しないようにします。
526行目辺りで、ログ記録方式に関する変更を行います。全て記録するなら変更の必要はないと思います。
543行あたりにあるせっていで、エラーページでサーバーの情報を表示しないようにします。
561行目あたりにある設定を変更して、iconsディレクトリのファイル一覧を表示しないようにします。
766行あたりの設定で、標準で使用する文字コードの設定をコメントアウト。でも、これは要検証。
UTF-8で書くなら問題ない気がする。
803行目辺りの設定で、CGIスプリクトに「.pl」を追加する。
変更し終えたら、文法が間違っていないかテストします。コマンドで、
と打ち込むことで、テストしてくれます。間違っていたときは、その箇所を指定してくれるので、その部分を直せばいいだけです。
編集が無事終わったら、テストページを削除します。
Webのメインになる「/var/www/html」の所有者を変更し、一般ユーザーに開放します。
# yum -y install httpd ← httpd(apache)インストール
設定の変更をします。
# vi /etc/httpd/conf/httpd.conf
で、設定ファイルの編集をします。まず、エラー時にOS名などを表示しないようにします。44行目辺りにある設定を変更します。
ServerTokens OS
↓変更
ServerTikens Prod
276行あたりにある設定で、サーバー名の指定を行います。
#ServerName www.example.com:80
↓行頭を消す↓ ↓ ↓ ↓OSインストール時の名前に変更
ServerName www.localhost.com:80
331行目辺りにある設定でCGI・SSIの使用許可をします。
Options Indexes FollowSymLinks
↓変更
Options Includes ExecCGI FollowSymLinks
↑追加
338行目辺りにある設定で「.htaccess」の許可を指定します。
AllowOverride Note
↓変更
AllowOverride All
497行目あたりにある設定で、長すぎるURI(414エラー)をログに記録しないようにします。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{ReFerer}i\" \"%{User-Agent}i\"" combined
↓変更
LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{ReFerer}i\" \"%{User-Agent}i\"" combined
526行目辺りで、ログ記録方式に関する変更を行います。全て記録するなら変更の必要はないと思います。
#
# For a single logfile with access, agent, and referer information
# (Combined Logfile Format), use the following directive:
#
SetEnvIf Request_URI "default\.ida" no_log ← 追加行(wormからのアクセスをログに記録しない)
SetEnvIf Request_URI "cmd\.exe" no_log ← 〃
SetEnvIf Request_URI "root\.exe" no_log ← 〃
SetEnvIf Request_URI "Admin\.dll" no_log ← 〃
SetEnvIf Request_URI "NULL\.IDA" no_log ← 〃
SetEnvIf Remote_Addr 192.168.1 no_log ← 追加行(内部からのアクセスをログに記録しない)
SetEnvIf Remote_Addr 127.0.0.1 no_log ← 追加行(自ホストからのアクセスをログに記録しない)
CustomLog logs/access_log combined env=!no_log
~~~~~~~~~~~
↑ 追加。上記以外のアクセスをログに記録する
543行あたりにあるせっていで、エラーページでサーバーの情報を表示しないようにします。
ServerSignature On
↓変更
ServerSignature Off
561行目あたりにある設定を変更して、iconsディレクトリのファイル一覧を表示しないようにします。
<Directory "/var/www/icons">
Options Indexes MultiViews FollowSymLinks → Options MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
766行あたりの設定で、標準で使用する文字コードの設定をコメントアウト。でも、これは要検証。
UTF-8で書くなら問題ない気がする。
AddDefaultCharset UTF-8
↓
#AddDefaultCharset UTF-8
803行目辺りの設定で、CGIスプリクトに「.pl」を追加する。
#AddHandler cgi-script .cgi
↓ ↓追加
AddHandler cgi-script .cgi .pl
変更し終えたら、文法が間違っていないかテストします。コマンドで、
# /usr/sbin/apachectl configtest
と打ち込むことで、テストしてくれます。間違っていたときは、その箇所を指定してくれるので、その部分を直せばいいだけです。
編集が無事終わったら、テストページを削除します。
# rm -f /etc/httpd/conf.d/welcome.conf
# rm -f /var/www/error/noindex.html
Webのメインになる「/var/www/html」の所有者を変更し、一般ユーザーに開放します。
# chown -R user. /var/www/html/ ← 「user」にインストール時に作ったユーザーネームを入れる。
httpdの設定がだいたい終わったので、php関連のインストールになります。
インストールが終わったら、phpの設定を変えます。
457行目辺りに、PHPで使用するメモリーの上限設定があります。defaultは128MBでした。必要に応じて加減して下さい。
729行目辺りに、httpのpostメソッドで行えるアップロードのデーター量の上限があります。defaultでは8MBになっています。必要に応じて加減して下さい。
878行目辺りには、PHPでアップロードするときの容量上限があります。defaultは2Mです。これも必要に応じて変更して下さい。
基本ルールとして、「PHPの使用メモリ量 ≧ POSTで扱うデータ量 ≧ PHPアップロードファイル容量」を守らなくてはいけません。必要に応じて変更をして下さい。
php.confの編集も行います。こちらもいじらないといろいろ面倒です。
私の入れたPHP5にはありませんでしたが、もし下記のような部分ああったら、無効化します。
この分があると、PHPで扱えるデータ量が制限され、php.iniからさらに制限をかけることになるので無効化し、制限の一本化を図ります。
標準では、「.php」という拡張子以外はPHPを実行出来ません。HTML内に組み込み簡易化を図るために、下記を追加します。
また省略可能なファイル名も変更します。
これでapacheとPHPの設定が終わりました。サーバーを起動し、動作させます。また、再起動した時に自動で起動するように設定もします。
導入直後は、/var/www/html/ が「localhost」となります。
# yum -y install php php-pear php-mysql php-mbstring
php … PHP本体
php-pear … PHPのPearライブラリのモジュール
php-mysql … PHPからMySQLにアクセスするためのモジュール
php-mbstring … PHPでマルチバイト(MB)文字列を利用するためのモジュール
インストールが終わったら、phpの設定を変えます。
# vi /etc/php.ini
457行目辺りに、PHPで使用するメモリーの上限設定があります。defaultは128MBでした。必要に応じて加減して下さい。
memory_limit = 128M
729行目辺りに、httpのpostメソッドで行えるアップロードのデーター量の上限があります。defaultでは8MBになっています。必要に応じて加減して下さい。
post_max_size = 8M
878行目辺りには、PHPでアップロードするときの容量上限があります。defaultは2Mです。これも必要に応じて変更して下さい。
upload_max_filesize = 2M
基本ルールとして、「PHPの使用メモリ量 ≧ POSTで扱うデータ量 ≧ PHPアップロードファイル容量」を守らなくてはいけません。必要に応じて変更をして下さい。
php.confの編集も行います。こちらもいじらないといろいろ面倒です。
# vi /etc/httpd/conf.d/php.conf
私の入れたPHP5にはありませんでしたが、もし下記のような部分ああったら、無効化します。
LimitRequestBody 524288
↓追加
#LimitRequestBody 524288
この分があると、PHPで扱えるデータ量が制限され、php.iniからさらに制限をかけることになるので無効化し、制限の一本化を図ります。
標準では、「.php」という拡張子以外はPHPを実行出来ません。HTML内に組み込み簡易化を図るために、下記を追加します。
AddHandler php5-script .php .php4 .php5 .html .htm
AddType text/html .php .php4 .php5 .html .htm
また省略可能なファイル名も変更します。
DirectoryIndex index.php
↓変更
DirectoryIndex index.html
これでapacheとPHPの設定が終わりました。サーバーを起動し、動作させます。また、再起動した時に自動で起動するように設定もします。
# /etc/init.d/httpd start
# chkconfig httpd on
導入直後は、/var/www/html/ が「localhost」となります。
データーベースMysqlを入れます。
特に設定はないので、起動させてからログインします。忘れやすいので、自動起動もセットしておきます。
インストール直後は、「root」のIDはありますがPASSWORDが設定されていません。放置することはセキュリティ的にも問題なので、設定をします。
パスワードを設定したら、一度終了させてパスワード付きで起動させます。
ログインできたら、「use」コマンドで、Databaseを「mysql」切り替えて、Mysqlに接続できるユーザーを表示させます。
パスワード無しの匿名ユーザーを削除します。
ユーザー「root」に対して、ホストは複数表示されていると思います。インストール時に設定したホストネームに対しても、パスワードを設定します。
もし、ホスト名に「-」の文字を使った場合、そのままではそれ以降を誤判断してしまいエラーになります。そういう時はシングルクォーテーション「'」でホスト名をくくって指定します。
インストール時には、試験用に「test」というデータベースのテーブルがあります。試験用なので削除します。
あとは、PHP等からのアクセスによって作っていくことになります。
# yum -y install mysql-server
特に設定はないので、起動させてからログインします。忘れやすいので、自動起動もセットしておきます。
# /etc/rc.d/init.d/mysqld start
# chkconfig mysqld on
# mysql -u root
インストール直後は、「root」のIDはありますがPASSWORDが設定されていません。放置することはセキュリティ的にも問題なので、設定をします。
mysql> SET PASSWORD FOR root@localhost=PASSWORD('password'); ← passwordに設定したい文字列を入れます。
パスワードを設定したら、一度終了させてパスワード付きで起動させます。
mysql> \q
bye
# mysql -u root -p
Enter password: ← これが出たら、設定したパスワードを入れます。
ログインできたら、「use」コマンドで、Databaseを「mysql」切り替えて、Mysqlに接続できるユーザーを表示させます。
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select host,user,password from user;
パスワード無しの匿名ユーザーを削除します。
mysql> delete from user where user="";
ユーザー「root」に対して、ホストは複数表示されていると思います。インストール時に設定したホストネームに対しても、パスワードを設定します。
mysql> SET PASSWORD FOR root@www.local.com=PASSWORD('password'); ← passwordは前回と同じように。
もし、ホスト名に「-」の文字を使った場合、そのままではそれ以降を誤判断してしまいエラーになります。そういう時はシングルクォーテーション「'」でホスト名をくくって指定します。
mysql> SET PASSWORD FOR root@'www.local-host.com'=PASSWORD('password');
インストール時には、試験用に「test」というデータベースのテーブルがあります。試験用なので削除します。
mysql> drop database test;
あとは、PHP等からのアクセスによって作っていくことになります。
Smartyは、php命令群でできています。なので、PHPが動くパスの通ったところに置けば動作します。まずサイトよりダウンロードして、自前で解凍・設置します。設置場所は、「/var/www/html/」にて作業します。
解凍後、圧縮ファイルに要がないので削除。
名前にバージョンが入っていると、わかりやすいかもしれませんが、いろいろ面倒になるので、変更します。
テンプレート置き場とそのコンパイル結果、及びキャッシュの置き場を作ります。コンパイルとキャッシュはapacheからの使用ですが、テンプレートは直に使うものですので、置き場所を工夫します。
作ったディレクトリに、使用権限の変更等を行います。
Smartyのテストを行います。「/var/www/html/」にsmarty_test.phpというファイル名で、テストファイルを作ります。
「/var/www/html/templates/」に、smarty_test.tplで以下の内容のファイルを作成します。
パスの指定などを間違わなければ、ホストOSのブラウザで「192.168.xxx.xxx/smarty_test.php」と打ち込んで、「Hello World!」と表示されます。
今後、Smartyを使うときは、「// Smartyパス設定」「// Smartyのテンプレート置き場の指定」「// Smartyのコンパイル場」「// Smartyのキャッシュ」「// インスタンス生成」「// ディレクトリの指定」「//cache をoffにする」「//javascriptのカッコと競合~」の指定をPHPの中に入れておけば使えるようになります。
# cd /var/www/html/
# wget http://www.smarty.net/files/Smarty-3.1.13.tar.gz
解凍後、圧縮ファイルに要がないので削除。
# tar xvzf Smarty-3.1.13.tar.gz
# rm -f Smarty-3.1.13.tar.gz
名前にバージョンが入っていると、わかりやすいかもしれませんが、いろいろ面倒になるので、変更します。
# mv Smarty-3.1.13 Smarty
テンプレート置き場とそのコンパイル結果、及びキャッシュの置き場を作ります。コンパイルとキャッシュはapacheからの使用ですが、テンプレートは直に使うものですので、置き場所を工夫します。
# mkdir /var/www/html/templates
# mkdir /var/www/html/Smarty/templates_c
# mkdir /var/www/html/Smarty/cache
作ったディレクトリに、使用権限の変更等を行います。
# chown -R user. /var/www/html/templates
# chown -R apache. /var/www/html/Smarty/templates_c
# chown -R apache. /var/www/html/Smarty/cache
# chmod 775 /var/www/html/templates
# chmod 775 /var/www/html/Smarty/templates_c
# chmod 775 /var/www/html/Smarty/cache
Smartyのテストを行います。「/var/www/html/」にsmarty_test.phpというファイル名で、テストファイルを作ります。
# vi /var/www/html/smarty_test.php
<?php
// Smartyパス設定
define('SMARTY_PATH', '/var/www/html/Smarty/');
// Smartyのテンプレート置き場の指定
define('SMARTY_TEMPLATES_DIR', '/var/www/html/templates/');
// Smartyのコンパイル場
define('SMARTY_COMPIlE_DIR', SMARTY_PATH . 'templates_c/');
// Smartyのキャッシュ
define('SMARTY_CACHE_DIR', SMARTY_PATH . 'chache/');
// インスタンス生成
require_once(SMARTY_PATH . 'libs/Smarty.class.php');
$objSmarty = new Smarty();
// ディレクトリの指定
$objSmarty->template_dir = SMARTY_TEMPLATES_DIR;
$objSmarty->compile_dir = SMARTY_COMPIlE_DIR;
$objSmarty->cache_dir = SMARTY_CACHE_PATH;
//cache をoffにする
$objSmarty->caching = 0;
//javascriptのカッコと競合するため{}を{{}}に変更
$objSmarty->left_delimiter = "{{";
$objSmarty->right_delimiter = "}}";
// テンプレート変数の設定
$objSmarty->assign('message', 'Hello World!');
// テンプレート出力
$objSmarty->display('smarty_test.tpl');
?>
「/var/www/html/templates/」に、smarty_test.tplで以下の内容のファイルを作成します。
# vi /var/www/html/templates/smarty_test.tpl
<html>
<head>
<title>Smarty Test</title>
</head>
<body>
{{$message}}
</body>
</html>
パスの指定などを間違わなければ、ホストOSのブラウザで「192.168.xxx.xxx/smarty_test.php」と打ち込んで、「Hello World!」と表示されます。
今後、Smartyを使うときは、「// Smartyパス設定」「// Smartyのテンプレート置き場の指定」「// Smartyのコンパイル場」「// Smartyのキャッシュ」「// インスタンス生成」「// ディレクトリの指定」「//cache をoffにする」「//javascriptのカッコと競合~」の指定をPHPの中に入れておけば使えるようになります。