centOSのVPSサーバでPHP5.2.16とMYSQLでLAMP環境を作る-その1-

centOS5は、最新バージョンのVER.5.6でもPHPは5.1系がパッケージングされていて、これだと、ちょっと古い;
今回は、LIVE COMMERCEを試用するために、VPSでのサーバ構築という偉業に乗り出したわけなので、それに合わせてLAMP環境を調整していくことにする。(ちなみにPHPの現時点での最新は、5.3.3なんだけどね;中途半端だわさ。)

とりあえず、centOS5のレポジトリからyumインストールすると、PHPのバージョンが、5.1.6(だっけ?)になってしまう。
だけど、PHPの最新は、5.3.3という中途半端な感じなので、5.2.16が入ってるレポジトリからyumでインストールできるように、準備します。

[root@server]# rpm –import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
→別にメッセージもなく、終わる。
[root@server]# nano /etc/yum.repos.d/utterramblings.repo
→utterramblings.repoという新規ファイルが作成されるので、下記内容を入力して、保存する。

————————
[utterramblings]
name=Jason’s Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

————————

[root@server]# yum –enablerepo=utterramblings update php
(※先に旧バージョンのphpがインストールされてない場合は、updateをinstallにする)
MYSQLも同じく。

enabled=1にすると、新しいアップデートが出たときに、yumのアップデートで更新されるので、再度utterramblings.repoを開いて、enabled=0に変更しておく。
※インストールするパッケージなどを、yumインストールの際に確認しながら入れるのであれば、そのママにしても、yumからパッケージがあるかどうかを聞きに行くだけなので実害はない。
※サーバにapacheが予め入っていなかったときは、このレポジトリで、一緒にインストールすると、互換性とかイロイロ面倒がなくていいかも。

***************************************
↑↑↑ここまでが、先のエントリーでやりかけた範囲。

1)必要なPHP関係のモジュールを追加でインストールする

取り敢えず、こんだけ入れます。(さらに足りないものは適宜追加で。)

  • php-xml
  • php-mcrypt
  • php-gd
  • php-mbstring
  • php-mysql
  • php-pdo
  • php-common※これは自動で入ってるかも。入れた記憶ない;

先に、上記のレポジトリのファイル(utterramblings.repo)を編集して、一旦「enabled=0」にしておきます。

[root@server]# yum install php-xml php-mcrypt php-gd php-mbstring php-pdo php-common
インストールされる依存関係などを確認して、「y」入力+エンターでインストールを実行。一旦キャンセルして確認しながら1つづつ入れてもOK。

ここまで、一旦、APACHEの再起動して、確認しとく。(まとまったものを入れては、再起動確認、という手順で、どこかでおかしくなったときに、原因のモジュールなどがわかるように。)

[root@server]# service httpd restart

2)PHPINFOでPHP設定値の確認

phpinfo.phpというPHP.INIの設定内容を書き出してくれるファイルを作成してFTPで、サーバの公開ディレクトリにアップロードする。(=ローカルマシンでの作業)

  1. テキストエディタ(秀丸など)で、テキストファイルを作成し、中に下記内容1行を打ち込んで、
    ————————————————–

    ————————————————–
    phpinfo.phpという名前で、UTF-8 エンコードで保存。
  2. FTPクライアントソフト(FILEZILLAなど)でWEB公開領域にアップロードする。
    ※今回の場合は、/VAR/WWW/HTML/の中に保存です。
  3. ブラウザで、「http://www.○○○.com/phpinfo.php」にアクセス。PHPがちゃんとインストールされていて、APACHEが起動していれば、PHPの設定一覧が表示される。GDやMBSTRINGなど、先にインストールしたモジュールがちゃんと一覧に表示されているか確認しておく。

3)php.iniの初期設定

先に用意していたphpinfo.ihiをブラウザから見ながら、必要な設定、追加設定を行っていく。
http://www.○○○.com/phpinfo.php →php.iniの設定値を確認。

SSHで作業。↓

[root@server]# cp /etc/php.ini /etc/php.ini.org →オリジナルをコピー保存。

[root@server]# nano /etc/php.ini

  1. max_execution_time = 30 →300位に増やす。使用するCMSやブログの規模によって処理が遅くなるとこのままではタイムアウトしてしまう。
  2. max_input_time = 60 →300位に増やす。使用するCMSやブログの規模によって処理が遅くなるとこのままではタイムアウトしてしまう。
  3. memory_limit = 32M →64M位にしたい。でも全体メモリが少ない契約プランでたくさん割り当てすぎると他のサービスが動作できないことも。設定後の動作状況と見合わせて。
  4. default_charset = “utf-8“ →コメントを取って、utf-8に変更。
  5. error_reporting = E_ALL & ~E_NOTICE →コメントを取る。(=有効)エラーレポートをメールで受け取る。
    ;error_reporting = E_ALL →コメントアウト。お知らせはいらない。
  6. display_errors = On →エラー内容を表示する
  7. mbstring.language = Japanese →コメントを取る。(=有効)

PHPの使用メモリ量 ≧ POSTで扱うデータ量 ≧ アップロードファイル容量 なので、それに合わせて、「memory_limit」「post_max_size」「upload_max_filesize」を調整する。
例えば、ファイルのアップロードをさせるようなCMSを利用するなら、「post_max_size」「upload_max_filesize」もそれぞれある程度大きめの数字が必要だが、テキストとJPGの軽量画像の投稿のみのブログなら、「post_max_size」「upload_max_filesize」の2MBもあれば十分。(デフォルトはそれぞれ、8M、2M)
※設定値のバリエーションは色々あるので、迷ったら、自分が使っている他のレンタルサーバサービスなどの、php.iniを参照すると良いです。

どれも特に初期設定はMUSTではないです。
というのも、php.iniは、利用するソフトやCMS、ブログソフトなドに合わせて、それらのインストール時に、その利用環境に合わせて変更するからです。
また、公開ディレクトリ内に、カスタムのphp.iniを設置して、デフォルトの設定を上書きすることもできます。

4)MYSQLの必要なものをインストールしていく

  1. mysql-server
  2. mysql-devel
  3. mysqlclient
  4. mysql-bench

※上の3つは必要かな。下1つはどうかな。ベンチマークを取るようなことはないかもしれないけど、、、取り敢えず入れてもいいし、必要だったと思ったときに後でいれてもいいかも。

[root@server]# yum install mysql-server mysql-devel
※多分、mysqlclientは依存関係で自動的にインストールされると思う。

5)MYSQLの初期設定

[root@server]# cp /etc/my.cnf /etc/my.cnf.org →バックアップファイル作成。
[root@server]# nano /etc/my.cnf →設定ファイル編集。

短いので、全体書きます。太字のところを追記します。

[mysql]
default-character-set=utf8

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server=utf8
skip-character-set-client-handshake

# To enable the InnoDB Plugin, uncomment the 2 next lines
#ignore-builtin-innodb
#plugin-load=innodb=ha_innodb_plugin.so

# To enable InnoDB-related INFORMATION_SCHEMA tables
# Join the following options to above directive
;innodb_trx=ha_innodb_plugin.so
;innodb_locks=ha_innodb_plugin.so
;innodb_cmp=ha_innodb_plugin.so
;innodb_cmp_reset=ha_innodb_plugin.so
;innodb_cmpmem=ha_innodb_plugin.so
;innodb_cmpmem_reset=ha_innodb_plugin.so

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[root@server]# service mysqld start

起動時のおまじないも忘れない。(しつこいって。)
[root@server]# chkconfig mysqld on
[root@server]# chkconfig –list mysqld

APACHEも再起動します。
[root@server]# service httpd restart


※起動時に、設定した後とかMYSQLが立ち上げられない時がある。そういう時は、初期化に失敗して、MYSQLのバイナリファイルが壊れてる可能性が。

まず、ログを見る。
[root@server]# nano /var/log/mysqld.log
バイナリファイル一式を消してみる。(再起動できたらまた生成される)
[root@server]# rm -rf /var/lib/mysql
この辺試してみる。

6)MYSQLのユーザ設定をする

MYSQLは、初期のアクセスユーザがROOTになっているけど、PWの設定などがありません。MYSQLが起動したら、最初にユーザ設定を行い、初期データベースの整理をしてしまいます。※これ大事!

a)mysqlにログイン。
[root@server]# mysql -u root
mysql> select host,user,password from mysql.user; →初期登録済みユーザとテーブルの確認

+---------------------------+------+----------+
| host | user | password |
+---------------------------+------+----------+
| localhost | root | |
| www.○○○.com | root | |
| 127.0.0.1 | root | |
| localhost | | |
| www.○○○.com | | |
+---------------------------+------+----------+
5 rows in set (0.00 sec)

とDBテーブルが表示されます。

ROOTが所有しているDBテーブルのパスワードを全て設定します。

mysql>set password for root@localhost=password(‘rootユーザのパスワード’);
mysql>set password for root@’www.○○○.com’=password(‘rootユーザのパスワード’);
mysql>set password for root@’127.0.0.1’=password(‘rootユーザのパスワード’);

不要な匿名ユーザ(rootの下の名称の入っていない2つについて)のテーブルは、削除します。

mysql> delete from mysql.user where user=””;

再度確認。ROOTの名前の後ろに暗号化されたパスワードが埋まっていて、匿名だったテーブルが削除されていればOK。

mysql> select host,user,password from mysql.user;

+---------------------------+------+------------------+
| host | user | password |
+---------------------------+------+------------------+
| localhost | root | 2bfg6335678325567gg |
| www.○○○.com | root | 2bfg6335678325567gg |
| 127.0.0.1 | root | |
+---------------------------+------+------------------+
3 rows in set (0.00 sec)

一旦ログアウトして、パスワードなしのログインでエラーが出れば、OK。パスワードを入れてログインしなおす。

mysql> \q
[root@server]# mysql -u root
→ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
[root@server]#mysql -u root -p
Enter password:

ログインできたら、テストテーブルを作って、日本語入れてみて、削除する、までやっとく。でも今回は、面倒なので、phpMyAdminをインストールして、ブラウザのインターフェイスから試すことにする。

続きは次で。

参考にさせていただきました。

http://www.miloweb.net/mysql.html
http://pentan.info/server/linux/mysql.html
http://www.obenri.com/_lamp/mysql_setting.html
http://fedorasrv.com/mysql.shtml

*********************************