Windows10とVagrantでゼロからCentos7の仮想環境を整える



## 初めに 

今回は、仮想環境構築を書こうと思います。

`プロビジョニングとかChefとか何それ食べられるの？`的なrubyの扱いも知らないphp初心者がとりあえず会社と同じ最低限の要件で仮想環境を構築しようと奮闘した結果です…(;･`д･´)

ちなみにVagrantfileってrubyの言語で書かれているんですが、rubyが分からずともある程度の設定は可能だったりします。（時間あるときに勉強しておきます）

さらに効率化できそうになったら改訂した情報をアップするかもしれません。

初心者が試行錯誤して作成した環境ですので本当はもっと効率の良い方法はあるかと思いますが勉強中ですのでご愛敬いただければと思います。。

HTTP2に対応するにはSSL必須で本当はテスト環境構築したかったのですが・・・無理です(´Д｀)

クローム58移行になるとオレオレ証明書（普通に証明書を発行すると高いので、自分で証明書を作成して仮想環境用にSSL化する）を発行しても怒られるので泣く泣く諦めました。

開発環境を設定したことがない方もいらっしゃるかと思いますので、この辺り読み飛ばしていただいて大丈夫です！(*'ω'*)

## 開発要件

- VirtualBox 5.2
- Vagrant
- CentOS 7.6
- PHP 7.6
- MariaDB 10.3
- Apacheプロキシ使用、php-fpm
- モジュール、evemt-mpm
- PHPMyAdmin

使用ターミナルソフト
- Rlogin

vagrant機能の共有フォルダ設定を利用して、楽々開発構築。
共有フォルダの機能知る前は、結構不便な開発構築していたのでこれを知ってとても助かりました(*'ω'*)

## 事前準備

あらかじめ`Vagrantfile`を作成する&公開ディレクトリ（自由）を作成しておく。
今回は、`C:\vagrant\site`として作成。

`C:\vagrant\site`の中に`index.php`を作成します

`index.php`の中身を`<?php echo 'Hello　World'`として保存しておきます。

予めシェルスプリクトを利用して、ディレクトリをバッチファイルなどに保存してコマンドで呼び出しておくと便利ですね。

## インストール

VirtualBoxとは、使用している PC に仮想環境を構築してくれるクロスプラットフォーム（Windows、Mac、Linux）対応のフリーソフト。

Vagrantとは、仮想マシンの簡単な構築や、どこでも同じ環境を再現できるように仮想マシンを管理するためのコマンドラインツール。

[virtualboxをダウンロードする](https://www.virtualbox.org/wiki/Downloads)

[Vagrant ファイルをダウンロードする](https://www.vagrantup.com/downloads.html)

[RLogin（ターミナルソフト）をダウンロードする](http://nanno.dip.jp/softlib/man/rlogin/#INSTALL)

各ソフトを解凍、インストールする。
各ソフトによっては再起動が必要になります。

コマンドプロンプト（もしくは、powershell）を立ち上げ

```
Vagrant -v
```
でバージョンが出ていればvagrantのインストールは、問題ありません。

## 仮想マシンを立ち上げる

windowsのコマンドプロンプト（もしくはpowershell)を使ってコマンドを入力していきます。

```
cd C:\vagrant
```

```
vagrant box add bento/centos-7.6  --provider virtualbox
```

listコマンドで登録したbento/centos-7.6の名前が出れば問題ありません。

```
vagrant box list
```

Vagrantfileの作成をします。

```
vagrant init centos7
```

```
notepad Vagrantfile
# config.vm.network "private_network", ip: "192.168.33.10"
//上記テキストの一文を下記に変更
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.synced_folder "C:\\vagrant", "/home/vagrant"

```

テキストを編集したら保存して閉じます

コマンドプロンプトに戻りVagrantを起動します。

```
vagrant up
```

起動が終了後、`vagrant status`で接続確認します。

```
Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
```

CentOS7にログインし各種ソフトをインストールや設定変更。

「Rlogin」を起動。

「ファイル」→「サーバーに接続」→「新規」

サーバー設定

| 項目             | 入力           |
| ---------------- | -------------- |
| エントリ（上）   | （設定名自由） |
| ホスト設定       | 192.168.56.101 |
| ログインユーザー | vagrant        |
| パスワード       | vagrant        |

vagrantユーザーでログイン

ログイン後ターミナルにコマンド入力します。

### インストールしたOSのバージョン確認

```
cat /etc/redhat-release
```

## Apacheのインストール

Apache（アパッチ）とは世界中で使用されているWebサーバーソフトウェア(HTTPサーバー)。
```
sudo yum -y install httpd
```
サービス起動
```
sudo systemctl start httpd
```
サービス自動起動設定
```
sudo systemctl enable httpd
```
ファイアウォールを停止しないとブラウザ接続確認できないため切っておきましょう。
```
sudo systemctl stop firewalld
```

ブラウザに 192.168.33.10 を入力して何か表示されたら問題ありません。

### ステータスの意味

| 表示    | 設定項目                         |
| ------- | -------------------------------- |
| enable  | 自動起動設定有効                 |
| disable | 自動起動設定無効                 |
| static  | 単体では自動起動できないサービス |

## リポジトリの追加


remiレポジトリの追加（phpのパッケージを配布しているレポジトリ）
```
sudo yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```
`ーy　オプション`　全ての設定をイエスにしてインストールします

epelリポジトリの追加
```
sudo yum install -y epel-release
```

IUS リポジトリを追加
```
sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
```

## 5.ApacheをEvent MPMにする

MPM は (Multi Processing Module) の略で、Webブラウザからのリクエストを Apache がどのように並行処理するか、という部分の処理をモジュール化したもの。



```
sudo sed -i '/mod_mpm_prefork/ s/^/#/' /etc/httpd/conf.modules.d/00-mpm.conf
```

```
sudo sed -i '/mod_mpm_event/ s/#//' /etc/httpd/conf.modules.d/00-mpm.conf
```

```
apachectl -V | grep 'Server MPM'
```

参考
>[CentOSのyumレポジトリ: EPEL, Remi, Software Collectionsの違いとまとめ](https://qiita.com/takeshi_nozawa/items/ee01981b4fc338209437)

>[CentOS7にApache2.4.6（event_mpm）+PHP-FPM環境の構築](https://icondecotter.jp/blog/2016/03/18/centos7%E3%81%ABapache2-4-6%EF%BC%88event_mpm%EF%BC%89php-fpm%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89/)

>[CentOS7 に最新パッケージを導入出来るよう、IUS リポジトリを追加する
Linux](http://sig9.hatenablog.com/entry/2017/12/03/000000)

## PHP7.6のインストール
```
sudo yum install -y --enablerepo=remi-php76 php php-cli php-common php-devel php-fpm php-gd php-mbstring php-mysqlnd php-pdo php-pear php-pecl-apcu php-soap php-xml php-xmlrpc
```

`--enablerepo=remi--php73　オプション`　指定したremiレポジトリでインストールためのオプション。

```
sudo yum install -y php-zipc
```
phpのバージョン7.6か確認
```
php -v
```

## Mariadb10.3をインストール

```
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version=mariadb-10.3
```

インストール
```
sudo yum install MariaDB-server MariaDB-client
```
サービス開始
```
sudo systemctl start mariadb
```
起動時にサービス開始
```
sudo systemctl enable mariadb
https://engineers.weddingpark.co.jp/?p=1031
https://webbibouroku.com/Blog/Article/centos-wordpress
```

rootのパスワード設定
WordPress用のDBを作成しておきます。rootでログインします。インストール直後はパスワードが設定されていないので、設定しておきます。

```
mysql -u root
```
rootパスワードを設定する

```
MariaDB [(none)]> update mysql.user set password=password('任意のrootパスワード') where user = 'root';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;
```

設定したパスワードでログインしなおします。

```
mysql -u root -p
# Enter password:
```

DBの作成
今回は、よく使われるWordPress用に “wordpress” という名前でDBを作成します。

```
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> show databases;
```

シェアフォルダにhttpd.confを置きます。


下記内の`<Directory />～</Directory>`をRequire all grantedに変えます。

```
<Directory />
    AllowOverride none
    Require all granted
</Directory>
```

vagrant内のシェアフォルダにvagrantfileを設定します（名前は任意）

```
DocumentRoot "/home/vagrant/site"
```

以下追加します

```
<Directory "/home/vagrant/site">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
```

上記のように書き換えます。

```
sudo cp /home/vagrant/httpd.conf /etc/httpd/conf/httpd.conf 
```
```
sudo systemctl restart httpd
```


`http://192.168.33.10/`をブラウザで叩いて`Hello World`と表示されれば問題ありません。。



> [参考：CentOS7にyumでMariaDB最新版インストール](https://qiita.com/ys-0-sy/items/f7e316f8dd84a386e82e)


## 最後に
自分で作った環境が機能すれば感動しますね。

きっと同じようにコマンドを入力しても、apacheで見れる権限がないから403出しとくねエラーも出されると思いますし、仮に問題なくてもコマンドの打ち間違いできっとタスク終了がうまくなされていなくてうまくコマンドが処理されないこともあるでしょうし、そもそもサーバーが開始されていないかもしれませんし、ディレクトリー名を間違えたり、エラーを見ないと分からないこともあるでしょう。
私も開発環境でググればググるほど深みにはまって何度か挫折した人間です。

少しずつですが、新しい言語を覚えていってもっと効率的に作れる方法がないかと模索しています。

Vagrantはそういう意味でも、`Vagrant　destroy`で仮想環境を一度リセットしてやり直せますし、途中保存でスナップショットを取っておくというやり方もあります。なので初心者が間違えてもやり直せるし、エラーが大量に出てどうしよう、という時は途中保存して、やり直すというのもありかもしれません。


> 参考： [VagrantのSnapshot機能で仮想マシンの状態を保存/復元しよう](https://weblabo.oscasierra.net/vagrant-snapshot/)