vagrant環境で CentOS7のLAMP構築してみた


vagrant環境で、CentOS7のLAMP環境を構築いたしました


## Vagrantインストール
次にVagrantをインストールします。
http://www.vagrantup.com/downloads
ここからお使いの環境に合ったものをダウンロードしてインストールしてください。

インストール完了後、下記のコマンドが動作していればOKです。

```バージョン確認
vagrant -v
```

## フォルダ作成
PC上に作業用のディレクトリを作成する
私は、ホームディレクトリにvagrantというフォルダを作成、学習用にcent7を追加しました
※この作業はGUIでも可

```
$ mkdir cent7
$ pwd
/Users/vagrant/cent7
```

## vagrant boxを追加


以下からCentOS7のBoxを探します
https://app.vagrantup.com/boxes/search

<img width="1233" alt="スクリーンショット 2020-04-19 17.20.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276326/a3f3a3ee-484d-584f-356c-876c5e457d26.png">

以下のコマンドでBoxを追加することができます
````
$ vagrant box add [Box名またはURL]
````

今回は、[centos/7]を選択し、追加する事にします
途中どれで使うか聞かれます。今回は、virtualboxで使用するので「３」を選択します

```
$ vagrant box add centos/7
==> vagrant: A new version of Vagrant is available: 2.2.7 (installed version: 2.2.5)!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html

==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 3
````

スムーズに行けばOKとでるのですが、エラーでました、、なんだろう

````
An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.

OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
````

後日、再度やり直したらうまくいきました、、、なんで、、、？
キャッシュ削除でうまくいく件などもあるみたいなので、もしかしたら、関係あるかもです、、、
https://qiita.com/yyykms123/items/ec7241971ad3b3d63fd7


## Vagrant Boxのインストール確認
インストールできたかどうか、以下コマンドで確認します。

```
$ vagrant box list
centos/7 (virtualbox, 1905.1)
```
いけたみたいですね


## Vagrantfileの作成
準備ができたら、Vagrantfileを追加していきます
工程の中で追加した「centos/7」を使います

Vagrantfileがなんなのか、、こちらのサイトに簡単な説明がありましたので引用しておきます

>
https://qiita.com/nemui_/items/de5dd5feee95e60aa264
Vagrantfileは、仮想マシンを立ち上げる際のconfigやprovision（立ち上げ時自動実行）を記述するファイル です。要は仮想環境の設計図みたいなもので、これを元にどんなPCでも同じような仮想環境を構築できます。


```
$ vagrant init centos/7
```
コマンド実行後、実行したフォルダ内にVagrantfileが作られます
<img width="283" alt="スクリーンショット 2020-04-25 15.13.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276326/6ad18192-fd5e-4ed9-d7bb-9079ce88d8b9.png">


## 仮想マシンを起動
以下コマンドで仮想マシンを起動させるします

````
$ vagrant up
````

##仮想マシンにSSHで接続

仮想マシンの起動が終わると、SSHでシェル接続が可能になります。

````
$ vagrant ssh
````

通常、SSHでの接続にはサーバアドレスやユーザIDの指定などが必要ですが、Vagrantによって立ち上げられた仮想マシンには、vagrant sshコマンドを使って簡単にSSH接続できるようになっています。

sshにログインすると以下のような表記に変換されたら大丈夫です

````
$ vagrant ssh
[vagrant@localhost ~]$ 
````

## PHPとApacheのインストール
PHPとApacheをインストールします。
Apacheは、WEBサーバーを構築するWebサーバーソフトウェアというもので、世界中で最も使われているものです

※yum ・・・ Red Hat系のLinuxディストリビューションで使われている“RPMパッケージ”を扱うためのパッケージ管理コマンド。よソフトウェアのインストールつかわれます

```
$ sudo yum install php
$ sudo yum install httpd
```


## 仮想マシンへの接続
テラタームで127.0.0.1へ接続する。
ユーザ/パスワード vagrant/vagrant
ユーザ/パスワード root/vagrant

※特定のIPアドレスをプライベートアドレスとすることも可能。
フォルダ内のVagrantfileを開き以下をコメントアウトを外す

```
config.vm.network :private_network, ip: "192.168.33.20"
```

ipの部分を自分の好きに変更しても問題ないです。私は、他にも入れていたのがあったので、最後を.20と変更しました

ついでに、あとあと、操作しやすいようvagrantフォルダ内に作業用フォルダwebrootを作成し以下の設定も追加します。
この設定により[webroot]にファイルを置くと、仮装環境内の[/var/www/html/]にファイルがあがるようになります

```
config.vm.synced_folder"./webroot","/var/www/html/",mount_options:['dmode=777', 'fmode=666']
```

変更を反映させます

```
vagrant reload
```



補足)
実行するとエラーが出てしまいました、、、

```
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o dmode=777,fmode=666,uid=1000,gid=1000 var_www_html_ /var/www/html

The error output from the command was:

mount: unknown filesystem type 'vboxsf'
```

ここによるとGuest Additionsがこのボックスにはないためだと、、
https://qiita.com/oka91/items/4b8517d390740faa1e74

以下のコマンド実行を試みると無事に解決しました！

```
vagrant plugin install vagrant-vbguest
```


## Apacheの起動
再度、vagrant sshで仮装環境内に入り、以下のコマンドを実行

```
$ sudo systemctl start httpd.service
```
※cent６以前の場合は[ service httpd start ]


補足)
実際にブラウザから開いてみると、、私の場合Forbiddenがでてしまいました
<img width="585" alt="スクリーンショット 2020-05-05 23.48.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276326/1092a869-a8f9-5ebf-9704-b53ed0b049c7.png">

ひらけない、、
こちらのSELinuxが有効になっていると、うなく行かないことがあるらしいです
https://engineers.weddingpark.co.jp/?p=1031

ってことで、無効にしてみました

```
$ sudo vi /etc/selinux/config
> SELINUX=disabled     ← enforcing から disabled に変更

#selinuxの反映のためサーバー再起動
$ sudo shutdown -r now 

#SELINUXの状態確認
$ getenforce
Disabled
```
無効になったの確認したので、再度確したら、無事開くようになっていました、よかった、、


## Apacheの設定ファイル編集
PHPが使えるよう設定していきます
まず、Apacheの設定ファイルを編集します

```
$ sudo vi /etc/httpd/conf/httpd.conf
```

以下のような記述を探し、

>AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

以下の記述を追加してください

```
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
```
これで、Apacheは拡張子がPHPのファイルをPHPプログラムとして処理してくれるようになるみたいです


## MySQLの追加
リポジトリ追加

```
$ sudo yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
```
MySQLインストール

```
//インストール
$ sudo yum -y install mysql-community-server

//バージョン確認
$ mysqld --version
mysqld  Ver 5.7.30 for Linux on x86_64 (MySQL Community Server (GPL))
```
phpからmysqlをコントロールするため追加プログラムを入れる

```
sudo yum install -y php-mysqlnd
```
インストールできたみたいなので、実行させます

```
sudo systemctl start mysqld
```

## MySQLの初期設定
rootの初期パスワードを調べます
このパスワードは、`/var/log/mysqld.log`に記載があるようなので、以下のコマンドでパスワードを調べます

```
[vagrant@localhost log]$ sudo cat /var/log/mysqld.log | grep ' A temporary password is generated'
2020-05-05T17:30:13.457949Z 1 [Note] A temporary password is generated for root@localhost: XXXXXXXX
```

以下のコマンドで、初期設定を行えます

```
$ mysql_secure_installation

>Enter password for user root: (先ほど調べたパスワード)
>New password: (設定したいパスワード)
〜
```
このあと何点か質問事項がでてくるみたいですが、基本的にyでいいみたいです、、


## phpMyAdminを導入
phpMyAdminをインストール

```
sudo yum -y install phpMyAdmin
```

※インストールしようとしたら以下のエラーが、、

```
No package phpMyAdmin available.
Error: Nothing to do
```

epel-releaseをインストールしたら大丈夫みたいです

```
sudo yum install epel-release
```

参考URL
https://yululy.com/yum-install-phpmyadmin/



インストールしたphpMyAdminにはアクセス制限がかかっているため、あなたのIPアドレスをアクセス許可にする必要らしいです、なので、設定します

```
sudo vi /etc/httpd/conf.d/phpMyAdmin.conf
```

```
<IfModule mod_authz_core.c>
# Apache 2.4
<RequireAny>
Require ip 192.168.33.20　<= ここを変更(127.0.0.1->自身のIP)
Require ip ::1
</RequireAny>
</IfModule>
```

```
＜Directory /usr/share/phpMyAdmin/＞
AddDefaultCharset UTF-8
AllowOverride all <----ここにこの記述を追加！
Require all granted　 <----ここにこの記述を追加！
~
```



## 自動起動設定
毎回起動しなおすの面倒なため自動で立ち上がるよう設定します

```
$ sudo systemctl enable httpd.service
$ sudo systemctl enable mysqld.service
```
補足)　cent6以前の場合は「chkconfig httpd on」


長かった、、
mysqlのパスワード設定していないため、あとでちゃんと設定します
とりあえず、手順まで、、

時間あるときに再編集、および、整理します

## php関連モジュールのインストール
こちらの関連モジュールもインストールしたほうがいいので必要に応じていれる

```
sudo yum -y install php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql
```

ちゃんとインストールされているか確認

```
yum list installed | grep php
```