【環境構築】LAMP環境構築のメモ(CentOS6)

CentOS6にApacheとPHPとMySQLとphpmyadminをインストールする。
※後でVPS環境構築ということで加筆するかも。
※設定ファイルについて過不足や、自分のところではこうしてるなど指摘頂けるとありがたいです。

#Apacheのインストール
##１．yumでインストール
2015年5月現在、Apache2.2がインストールされる。

```php:インストール
yum –y install httpd
```

##２．設定ファイルの修正
###/etc/httpd/conf/httpd.confを修正。

```apache:設定ファイル修正
ServerTokens Prod
ServerSignature Off
Options -Indexes FollowSymLinks
ServerName XXX:80 #XXXはホスト名を指定
AllowOverride All
DirectoryIndex index.html index.html.var index.php
```


ServerTokens Prod
HTTPヘッダの情報の設定。Prodで最小にする。

ServerSignature Off
エラーページのフッターの情報表示の設定。

Options -Indexes FollowSymLinks
ファイルがないページにアクセスしたときに、ディレクトリの中身を表示するかの可否。頭に-をつけることで表示されなくなる。

ServerName XXX:80 #XXXはホスト名を指定
ホスト名

AllowOverride All
ディレクトリへの設定について、上位ディレクトリで設定した設定値を下位ディレクトリの設定で上書き可能かの可否。Allで上書き可能にする。

DirectoryIndex index.html index.html.var index.php
URLにファイルを省略した場合の対象ファイル。index.phpを追加。

###設定ファイルが正しいか確認。
```bash
service httpd configtest
```

###設定ファイルを反映するには、apacheを再起動する。
```bash
service httpd restart
```

##３．自動起動の設定

```bash
chkconfig httpd on

chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
```

#PHPのインストール
##１．yumでインストール

2015年5月現在、yumでインストールできるPHPのバージョンは5.3.3である。5.3はサポートが終了しているため、最新版の5.6を入れる。

remiリポジトリから最新版を入れる。remiを入れるためには、epelが必要。

```php:インストール
#epelリポジトリ追加
yum install epel-release

#remiリポジトリ追加
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

yum install --enablerepo=remi,remi-php56 php php-mbstring php-mysql

#phpのバージョン確認
php --version
```
php（php本体）
php-mbstring（マルチバイト文字モジュール）
php-mysql（MySQLモジュール）

上記がマストで、他にphp-devel（PHP開発用、ソースのコンパイルとかするなら）やphp-gd（グラフィック）など必要に応じて。

##２．設定ファイル修正
###/etc/php.iniを修正。

```ini:設定ファイル修正
expose_php = Off
max_execution_time = 120
error_log = syslog
post_max_size = 20M
default_charset = "UTF-8"
upload_max_filesize = 20M
allow_url_fopen = Off
date.timezone = Asia/Tokyo
session.hash_function = 1
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output =  UTF-8
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = none
```

expose_php = Off
PHPのバージョンをHTTPヘッダに含めるかの設定

max_execution_time = 120
スクリプトのタイムアウト時間（秒）。

error_log = syslog
エラーログの出力先。phpだけログ分ける考え方もあるが、syslogでまとめて見れたほうが楽な気がする。

post_max_size = 20M
POSTの合計の最大サイズ

default_charset = "UTF-8"
HTTPレスポンスの文字エンコーディング

upload_max_filesize = 20M
アップロードの最大サイズ

allow_url_fopen = Off
file_get_contentsなどの制限

date.timezone = Asia/Tokyo
タイムゾーン

session.hash_function = SHA512
セッションID生成アルゴリズム。SHA512が使えるのはPHP5.3以降。

mbstring.language = Japanese
使用する言語

mbstring.internal_encoding = UTF-8
mbstring関数のデフォルト文字エンコード

mbstring.http_input = auto
HTTP入力文字エンコードの検出

mbstring.http_output =  UTF-8
HTTP出力文字エンコード。**UTF-8なのかpassなのか迷うところ。**

mbstring.encoding_translation = Off
HTTPクエリの内部文字エンコーディングへの自動変換

mbstring.detect_order = auto
文字エンコードの自動検出の優先順位

mbstring.substitute_character = none;
変換できない文字を代替えする文字

参考

* [PHPのセキュリティーについてお勉強・・・php.ini の設定を見直しました](http://dari88.hatenablog.com/entry/2012/04/01/162302)
* [文字コードに起因する脆弱性を防ぐ「やや安全な」php.ini設定](http://www.tokumaru.org/d/20100927.html)
* [PHP入門](http://webkaru.net/php/mbstring-php-ini/)
* [PHPと文字化け](http://linuxserver.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/php/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%90%E3%82%A4%E3%83%88%E7%92%B0%E5%A2%83%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91%E5%AF%BE%E7%AD%96.php)

###設定を反映するためには、apacheの再起動が必要。
```bash
service httpd restart
```

#MySQLのインストール
###１．yumでインストール

2015年5月現在、デフォルトのyumではMySQL5.1がインストールされる。
ここではmysql5.6をインストールする方法を説明する。

```php:インストール
yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum -y install mysql-community-server
```

参考：[CentOS 6 / RHEL 6 に MySQL 5.6 を yum インストールする手順](http://weblabo.oscasierra.net/installing-mysql-rhel6-with-yum/)

##２．設定ファイルの修正

###/etc/my.cnfを修正。
最低限、文字コードをutf8とinnodbにする。パフォーマンスのチューニングは別途。

```mysql:設定ファイル修正
[mysqld]
character-set-server=utf8 #追加
default-storage-engine=InnoDB #追加
innodb_file_per_table #追加

[mysql]
default-character-set=utf8 #追加

[mysqldump]
default-character-set=utf8 #追加

```

[mysqld]
character-set-server=utf8

文字コードをUTF8に設定。なぜか、mysqldと他で違うので注意。
詳細：[【MySQL】バージョン5.5.3以降の文字コードの設定(UTF8)](http://qiita.com/kazu56/items/462d4a11f59232186d7b)


default-storage-engine=InnoDB

新規テーブル作成したときにInnoDBにする。
詳細：[【mysql】create table時のデフォルトのストレージエンジンの設定方法](http://qiita.com/kazu56/items/154fba9b27fecdedd57c)

innodb_file_per_table

エンジンがInnoDBの場合、テーブルごとにファイルを作る。

[mysql]
default-character-set=utf8 #追加

文字コードをUTF8に設定。

[mysqldump]
default-character-set=utf8 #追加

文字コードをUTF8に設定。

###設定ファイルを反映するには、mysqlの再起動が必要。

```bash:再起動
service mysqld restart
```

##３．自動起動の設定

```bash
chkconfig mysqld on

chkconfig --list mysqld
mysqld 0:off   1:off   2:on    3:on    4:on    5:on    6:off
```

##４．パスワードの設定
mysql_secure_installationでパスワードの設定など行う。

```bash
mysql_secure_installation
```

Enter current password for root (enter for none): ←Enterを押す。
Set root password? [Y/n] Y　←rootパスワードを設定します宣言
Remove anonymous users? [Y/n] Y　←アノニマスユーザの削除
Disallow root login remotely? [Y/n] Y　←rootユーザーのリモートログインの禁止
Remove test database and access to it? [Y/n] Y　←テストデーターベースの削除
Reload privilege tables now? [Y/n] Y　←権限の変更を再読み込みする

参考：[[CentOS] MySQLサーバーのインストールを行うの巻　～mysql_secure_installationを使ってみよう～](http://blog.trippyboy.com/2013/mysql/centos-mysql%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AE%E5%B7%BB%E3%80%80%EF%BD%9Emysql_secure_installatio/)

パスワードだけ設定する場合は、パスワードなしでログインしてパスワードを設定する。
SET PASSWORD FOR ユーザ名@localhost=PASSWORD('パスワード');

```bash:パスワードの設定
# mysql –u root
mysql> SET PASSWORD FOR root@localhost=PASSWORD('rootのパスワード'); 
```

#phpMyAdminのインストール
手動インストールとyumでのインストール方法をまとめる。
VPSに作るのでセキュリティもっと強くしないといけない。ここでは一旦動けるとこまでのまとめ。

##手動でのインストール

###１．DL
[ダウンロード先](https://www.phpmyadmin.net/downloads/)のページでFileの列の取得したいリンクを右クリックでコピーして、wgetでDLする。
wgetには「--no-check-certificate」をつけないとつけてくださいとエラーが出る。

tarで展開して、/var/www/html/配下へ置く。

```
wget --no-check-certificate https://files.phpmyadmin.net/phpMyAdmin/4.5.3.1/phpMyAdmin-4.5.3.1-all-languages.tar.gz

tar xvf phpMyAdmin-4.5.3.1-all-languages.tar.gz

mv phpMyAdmin-4.5.3.1-all-languages /var/www/html/phpmyadmin
```

###２．config設定

```
cp -p config.sample.inc.php config.inc.php
chmod 705 config.inc.php ←下の参照では600になっていたがエラーになり他の記事を参考に705で動いた。
```

```
vim config.inc.php

$cfg['blowfish_secret'] = '';←46ケタで適当な値
$cfg['Servers'][$i]['auth_type'] = 'cookie';　←　認証モードを｢クッキー｣にする
$cfg['Lang']     = 'ja-utf-8';　←　追加(日本語化)
```

参考：[MySQL用GUI設定ツール導入(phpMyAdmin)](http://centossrv.com/phpmyadmin.shtml)

##yumでのインストール方法
###１．パッケージインストール
yumのデフォルトリポジトリで管理されているphpmyadminは古い。リポジトリを切り替える方法もあるがここでは記載しない。

```
yum -y install --enablerepo=epel install -y phpMyAdmin php-mysql php-mcrypt
```

###２．Apache設定ファイル修正
/etc/httpd/conf.d/phpMyAdmin.confに設定ファイルが置かれるので修正する。

「Deny from All」でアクセス制御しているのでコメントアウトする。
本来は許可設定を追加すべき。

```
<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
#     Deny from All ←
#     Allow from 127.0.0.1 ←
#     Allow from ::1 ←
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
#     Deny from All ←
#     Allow from 127.0.0.1 ←
#     Allow from ::1 ←
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/libraries/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/lib/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/frames/>
    Order Deny,Allow
#    Deny from All ←
#    Allow from None ←
</Directory>
```

参考：[CentOSにyumを用いてphpMyAdminをインストールする方法](http://lab.unicast.ne.jp/2014/06/11/install_phpmyadmin_to_centos_using_yum/)

※デフォルトのタイムアウトが1440秒ので伸ばす。
[【phpMyadmin】セッション時間の設定](http://qiita.com/kazu56/items/f7100e6e0909a6968590)