開発環境の移行手順（Windows⇒CentOS7）

今までWindows上でLAMPの開発環境を用意して開発していましたが、phpのバッチスクリプトからcurlでhttpsを読み込めないというトラブルがありまして、諸々検討した結果最終的に仮想環境（virtualbox + vagrant）に移行する運びとなりました。
その際の手順を備忘録的に残しておきます。
※けっこう適当なのであしからずｗ

#環境

```shell-session
# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)

# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Oct 19 2017 20:39:16

# mysql --version
mysql  Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using  EditLine wrapper

# php -v
PHP 5.4.16 (cli) (built: Nov  6 2016 00:29:02)
```

#ユーザ追加

```shell-session
# useradd myuser
# passwd myuser
=>パスワード入力
```

#言語設定がドイツ語になっていたので変更

```
# localectl status
# localectl set-locale LANG=ja_JP.utf8
# localectl status
# localectl set-keymap jp106
# localectl set-keymap jp-0ADG109A
# localectl status
```

##タイムゾーンも変更

```
# date
2017年 11月  9日 木曜日 06:42:08 CET
# timedatectl set-timezone Asia/Tokyo
# date
2017年 11月  9日 木曜日 14:42:22 JST
```

#ホストOS⇔ゲストOSでの共有ディレクトリ設定
ゲストOS側に空ディレクトリ作成

```
$ cd /srv/httpd/
$ mkdir hoge
$ mkdir poge
$ mkdir lib
```

ホストOS側にあるVagrantfileを編集

```
config.vm.synced_folder "C:\\dev\\projects\\hoge", "/srv/httpd/hoge", owner: 'myuser', group: 'myuser', mount_options: ["dmode=777", "fmode=777"]
config.vm.synced_folder "C:\\dev\\projects\\poge", "/srv/httpd/poge", owner: 'myuser', group: 'myuser', mount_options: ["dmode=777", "fmode=777"]
config.vm.synced_folder "C:\\dev\\projects\\lib", "/srv/httpd/lib", owner: 'myuser', group: 'myuser', mount_options: ["dmode=777", "fmode=777"]
```

vagrantを再起動して設定を反映

```
$ vagrant halt
$ vagrant up
```

#php インストール

```
# yum -y install php
# php -v
```

ファイアウォール停止＆無効化

```
# systemctl status firewalld
# systemctl stop firewalld
# systemctl status firewalld
# systemctl list-unit-files|grep firewall
# systemctl disable firewalld.service
```
httpd有効化

```
# systemctl list-unit-files|grep httpd
# systemctl enable httpd.service
# systemctl list-unit-files|grep httpd
```

#DNS設定
ホストOS（Windows）側のネットワーク接続設定で使っているDNSと同じDNSサーバを追記してあげる。
外部への通信を行う時に必要。

```
# vi /etc/resolv.conf
```

※2017/11/09 追記

#mysql

```
# yum install -y mysqld
# yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
# yum install mysql mysql-devel mysql-server mysql-utilities
# mysqld --version
# mysqld --user=mysql --initialize
# systemctl enable mysqld.service
# systemctl start mysqld.service
# mysql --version
```

ゲストOSからホストOS側のDBに接続できるか確認

```
# mysql -h 192.168.11.111 -u username -p dbname
```

※CakePHPやRails等の開発環境でDB接続設定をlocalhostとかで繋いでいた場合は、ゲストOS側から接続できるようにIPアドレスで明示的に設定変更しておく
※DBそのものもゲストOS側に移す場合は適宜設定する

#必要なものを適宜インストール

```shell-session
# yum -y install php-mysqlnd
# yum -y install php-mbstring
```

#apache各種設定
SSI、バーチャルホスト等

##apache再起動

```shell-session
# systemctl restart httpd.service
```

#その他注意点
##シンボリックリンク
共有ディレクトリにシンボリックリンクがある場合、ホストOSとゲストOSのどちら側でも参照できるようにしたいので設定し直す

```
C:\dev\projects\hoge\public_html>mklink /d aaa "..\..\lib\aaa"
aaa <<===>> ..\..\lib\aaa のシンボリック リンクが作成されました

C:\dev\projects\hoge\public_html>mklink /d bbb "..\..\lib\bbb"
bbb <<===>> ..\..\lib\bbb のシンボリック リンクが作成されました
```

ポイントは、

* 絶対パスにしてしまうといずれか一方でしか参照できなくなってしまう
* ホストOS（Windows）側でmklinkコマンドを使って作成する
* ディレクトリセパレータをスラッシュにしてしまうとうまく動かなかったのでバックスラッシュで対応。ゲストOS側でもうまく認識してくれた。

##httpd.conf
###PHPからSSIがうまく動作しなかったので下記のように変更

```
<IfModule mime_module>
	～省略～
	AddType text/html .shtml
	AddOutputFilter INCLUDES .shtml
	↓追記
	AddType text/html .shtml .html .php
	AddOutputFilter INCLUDES .shtml .html .php
</IfModule>
```

###javascriptでのエラー対応

```
#EnableMMAP off
EnableSendfile on
↓
EnableMMAP off
EnableSendfile off
```

※詳しくは[Vagrant上のjavascriptで「Uncaught SyntaxError: Unexpected token ILLEGAL」](https://qiita.com/shibukk/items/07bb794981fe2d0daf7c)を。