ローカル開発環境構築メモ2

http://qiita.com/840_/items/c8574ae3d25ed3a4e92a の続き

相変わらずほとんどドットインストール様を参考にしております。
http://dotinstall.com/lessons/basic_local_development_v2

## 7.epel,remiのリポジトリ導入

最新のPHP,MySQLを導入するためにepelとremiのリポジトリを更新します。


* wget

まずwgetが必要なので
`$ sudo yum install wget`

wgetをyumでインストールしておく

* epel
 
` wget https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm`

今回はx86_64の仮想マシンを導入したので、https://dl.fedoraproject.org/pub/epel/6/x86_64/からepel-releaseを探し、リンクアドレスをコピー

RPMパッケージが取得できるので、次にrpmコマンドでインストールする
`$ sudo rpm -Uvh epel-release-6-8.noarch.rpm `
-U:パッケージのアップグレードを行う、パッケージが存在しなければインストール
-v:パッケージの検査を行う
-h:インストール状況の表示

インストールできたら、デフォルトでepelを使わない設定に変更しておく
`$ sudo vi /etc/yum.repos.d/epel.repo `
[epel]の中のenabledが1であれば0に変更

* remi

`$ wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm`

http://rpms.famillecollet.com/ からCentOS6用のremi-release-6.rpmのリンクアドレスをコピーしてwgetで取得する

同様にrmpでインストール
`$ sudo rpm -Uvh remi-release-6.rpm `

インストールした後、同様に設定を確認
`$ sudo vi /etc/yum.repos.d/remi.repo`
[remi]の中のenabledが1であれば0に変更


これでようやくPHPをインストールできるようになりました

## 8.PHPのインストールと設定

`yum info --enablerepo=remi php`
まずはphpのバージョンの確認

`$ sudo yum --enablerepo=remi install -y php php-devel php-mysql php-mbstring php-gd`
次にremiでインストール
PHPに必要な物は片っ端からいれておきます

次にphp.iniを編集して設定を変えておきます
`$ sudo vi /etc/php.ini `

* error_logの出力パスの設定<br>
;error_log辺りで検索して<br>
`error_log = var/log/php.log`<br>
などを追加する

* マルチバイト文字を使えるようにする
mbstring.languageのコメントアウトを外す
`mbstring.language = Japanese`
更にinsternal_encodingを
`mbstring.internal_encoding = UTF-8`
としておく
internal_encodingはマルチバイト文字を扱う際に文字コードが指定されなかった場合に使う文字コードを設定できるみたいです。
文字化けを防ぐために文字コードはUTF-8で統一しておきます。
* 文字コードの指定
http_inputはドットインストール様ではautoでしたが、自動で変換しちゃうと文字化けが起きやすくなるのでここではpassに設定しておきます
`mbstring.http_input = pass`
mbstring.detect_orderもautoだとどの文字コードから判別してくれるかわからなくて怖いので、明示的に指定しておきます
`mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII`
この記述であれば、UTF-8,SJIS,EUC-JP...の順で判別してくれます。<br>
* バージョン情報をHTTPヘッダに含めない
次にexpose_phpをOFFにします
`expose_php = Off`
Onのままだと、PHPのバージョンがHTTPのヘッダ情報に含まれてしまうらしいです。
バージョンによっては攻撃の手段を晒す事にもなってしまうので、Offにしておくのが良いようです。

* タイムゾーンの指定
`date.timezone = Asia/Tokyo`
date.timezoneを明示的に指定しておきます。
タイムスタンプなどを扱う際にはタイムゾーンの指定がされていないとエラーが出てしまうので、、デフォルトとして扱うタイムゾーンを設定しておきます。
Vagrant上の仮想マシンであれば問題ないはずですが、php.iniがいじれない環境である場合には、
`date_default_timezone_set('Asia/Tokyo');`
を使って、PHPのソース上でデフォルトのタイムゾーンを明示的に指定する必要があります。


ひと通り編集したら保存してサーバーを再起動すると設定が適用されます
`$ sudo service httpd restart`


## 9.MySQLのインストール・設定

`$ sudo yum install -y --enablerepo=remi mysql-server`
remiでmysql-serverをインストールする。

インストールが終わったら設定ファイルを編集します

`$ sudo vi /etc/my.cnf `

以下を追記します。
````
character_set_server=utf8
default-storage-engine=InnoDB
innodb_file_per_table
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8
````

`sudo service mysqld start`
でmysqlを起動...できるかと思ったらエラーがでました
``` Daemon failed to start.
Starting mysqld:                                           [FAILED]
```
よくわかんないけど起動に失敗したらしい。
エラーログを確認してみました
````
[vagrant@vagrant-centos65 ~]$ tail /var/log/mysqld.log 
tail: cannot open `/var/log/mysqld.log' for reading: Permission denied
[vagrant@vagrant-centos65 ~]$ sudo tail /var/log/mysqld.log 
InnoDB: Progress in percents: 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 
InnoDB: Apply batch completed
140430  4:36:37  InnoDB: Waiting for the background threads to start
140430  4:36:38 InnoDB: 5.5.37 started; log sequence number 1595675
140430  4:36:38 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
140430  4:36:38 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
140430  4:36:38 [Note] Server socket created on IP: '0.0.0.0'.
140430  4:36:38 [ERROR] /usr/libexec/mysqld: Can't find file: './mysql/host.frm' (errno: 13)
140430  4:36:38 [ERROR] Fatal error: Can't open and lock privilege tables: Can't find file: './mysql/host.frm' (errno: 13)
140430 04:36:38 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
````

エラーログをみたところ、/mysql/host.frmが開けないとのこと

`sudo ls -alt /var/lib/mysql/mysql/`してみたところ、関連ファイルの所有権が全てrootになっていました。
これが原因で開けなかったっぽい。

`$ chown -R mysql:mysql /var/lib/mysql`
として、所有権をmysqlに変えてあげます

`$ sudo service mysqld restart`
再起動したらやっと起動出来ました。

次に、セキュリティを高めるための設定を行っていきます。
`$ /usr/bin/mysql_secure_installation`
とすると、rootのパスワードを聞かれますが、初期はパスワードが設定されていないのでそのままEnter
set root password?でパスワードを設定します。

後は全部Enterでスキップします。
これでrootにパスワードが設定されました。

`$ mysql -u root -p`
として設定したパスワードを入力すればmysqlにログインできるようになってるはずです。


起動時にmysqlが起動するように設定しておくには以下のようにしておけば良さそうです。
`$ sudo chkconfig mysqld on`


## 10.postgreSQLのインストール


http://www.postgresql.org/download/linux/redhat/ からサイトの指示に従ってrpmパッケージを導入する

`$ sudo yum install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm`
rpmパッケージが導入されたら同様に指示に従ってインストールします
`$ sudo yum install postgresql93-server postgresql93-contrib`

これでpostgreSQL自体はインストールされるので、まずはDBを初期化
`$ sudo service postgresql-9.3 initdb`

これもMySQL同様に、デフォルトで起動にしておき、起動します
````$ sudo chkconfig postgresql-9.3 on
$ sudo service postgresql-9.3 start 
Starting postgresql-9.3 service:                           [  OK  ]
````
postgreSQLがインストールされるとpostgresというユーザーが作成されるので、パスワードを設定し、postgresでログインします。

````[vagrant@vagrant-centos65 ~]$ sudo passwd postgres
Changing password for user postgres.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[vagrant@vagrant-centos65 ~]$ su - postgres
Password: 
-bash-4.1$ psql --version
psql (PostgreSQL) 9.3.4
-bash-4.1$ psql
psql (9.3.4)
Type "help" for help.
````

ログインした後は、psqlコマンドでpostgreSQLに入れます。

初期状態では、postgresSQLにはpostgresというスーパーユーザーしか作られていないので、作業用のユーザーを追加します。
CentOSのユーザー名と同じだと都合がいいらしいのでvagrantにしておきます。
他の権限を与えたいときにはユーザー名の後ろに追記します。

`postgres=# create user vagrant createdb password '(適当なパスワード)' login;`

````
postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}
 vagrant   | Create DB                                      | {}
````

ユーザーが作成されました。

## 11.pythonのインストール

まずはpythonのバージョンを確認
````[vagrant@vagrant-centos65 ~]$ python --version
Python 2.6.6
````
ドットインストールでは2.7をいれていくみたいです。

https://www.python.org/download/releases/2.7.6 からアドレスをコピーしました。
tgz形式のリンクアドレスをコピーしてwgetで取得します。

`$ wget https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz`

`$ tar xzvf Python-2.7.6.tgz`で解答し、できたディレクトリに移動したら
`$ ./configure --enable-shared --with-threads`とするとMakefileが生成されます。

`make`でファイル群を生成し、`sudo make install`としてインストール。
これでPythonの2.7.6がインストールされました。

後はライブラリをコピーしておけば良いようです。
````
[vagrant@vagrant-centos65 Python-2.7.6]$ sudo cp libpython2.7.so libpython2.7.so.1.0 /usr/lib
[vagrant@vagrant-centos65 Python-2.7.6]$ sudo /sbin/ldconfig
[vagrant@vagrant-centos65 Python-2.7.6]$ source ~/.bash_profile
[vagrant@vagrant-centos65 Python-2.7.6]$ python --version
Python 2.7.6
````


とりあえずここまでやっといた
半分くらいはおまじない的にやってるんでこうしたほうがいいよとかあったらおしえてください