VagrantにてPHP開発環境を構築した時のメモ

## 概要

新規開発を行うことになって、開発環境を作ってメンバーに共有する必要がありました。
その際に実施した内容のメモをQiitaに書いておこうと思います。

## 環境概要

* Windows10
* VirtualBox 6.1.12
* Vagrant 2.2.9
* PHP 7.4.8
* MySQL 8.0.21

## VirtualBox

https://www.virtualbox.org/wiki/Downloads
最新版をダウンロード、インストールを実施。

## Vagrant

https://www.vagrantup.com/
最新版をダウンロード、インストールを実施。

## Vagrantの設定

cmdを管理者権限で実行。

フォルダ移動。
```
cd 'vagrantfileを作りたいパス'
```

Boxを追加。
```
vagrant box add CentOS7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
```

Vagrantfileを作成。
```
vagrant init CentOS7
```

作成されたVagrantfileをエディタで開いて以下を設定。(設定内容詳細は割愛)

```
Vagrant.configure("2") do |config|
config.vm.box = "CentOS7"

config.vm.network "private_network", ip: "192.168.33.10"

config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "1024"]
end

config.vm.synced_folder ".", "/vagrant", mount_options:['dmode=777','fmode=777']
end
```

vagrantの起動。
```
vagrant up
```

vagrantへssh接続。
```
vagrant ssh
```

## httpd

インストール
```
sudo yum -y install httpd
```

httpd起動
```
sudo systemctl start httpd.service
```

httpd自動起動をオン
```
sudo systemctl enable httpd.service
```

ファイアウォール停止
```
sudo systemctl stop firewalld
```

ファイアウォール自動起動を停止
```
sudo systemctl disable firewalld
```

status確認
```
sudo systemctl status httpd.service
```

htmlディレクトリを一旦削除
```
sudo rm -rf /var/www/html
```

vagrantフォルダをシンボリックリンクとしてhtml再作成
```
sudo ln -fs /vagrant /var/www/html
```

## PHP

未インストールか確認(何も表示されなければOK)
```
rpm -qa | grep php
```

PHPインストール

```
sudo yum install epel-release
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum install -y --enablerepo=remi-php74 php which
sudo yum --enablerepo=remi-php74 update
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
```

必要な諸々インストール(上記で一緒に実施してしまっても良いですが)

```
sudo yum install --enablerepo=remi,remi-php74 php-pecl-zip
sudo yum install unzip -y
sudo yum install --enablerepo=remi,remi-php74 php-devel php-mbstring php-pdo php-gd php-xml php-mysqlnd
```

## MySQL

インストール

```
sudo yum localinstall http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum install -y mysql-community-server
```

起動
```
sudo systemctl start mysqld
```

ステータス確認
```
systemctl status mysqld
```

自動起動の設定
```
sudo systemctl enable mysqld
```

rootユーザの初期パスワード確認

```
sudo cat /var/log/mysqld.log | grep root
→2020-08-04T01:50:30.638511Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ********
```

MySQLログイン
```
mysql -u root -p
```

パスワードを変更
```
set password for root@localhost = '任意のパスワード';
```

# ブラウザからの確認

確認用phpファイル作成

```
sudo vi /var/www/html/index.php
```

以下をコピペ

```
<?php
phpinfo();
```

以下へアクセスしてphpinfoが表示されればOK 
http://192.168.33.10/

## VagrantのBoxのpackage化

cmdでVagrantfileがあるフォルダにて

```
vagrant package
```

## メンバーへの共有

上記で作成されたpackage.boxを受け取る。(容量大きいと思うので、社内サーバを中継する場合など注意)

cmdにてBOXの追加
```
vagrant box add CentOS7 'package.boxのパス'
```

Vagrantfileを作成
```
vagrant init CentOS7
```

作成されたVagrantfileを編集、設定は先述のものと同様。
以上でBoxの共有完了。

## その他必要に応じて

### hosts変更
C:\Windows\System32\drivers\etc\hostsに追記する

```
example.local 192.168.33.10
```

### 時刻のずれを直す

```
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
date
```

### ロケールの変更

参考：v1801.01 の CentOS 7 Vagrant box に日本語ロケールを追加する方法
https://qiita.com/ryo-sato/items/00dea41bf665626c9b43

### SSLを設定する

参考：VagrantにopensslでSSLを利用できるように設定する。
https://kiraba.jp/post-rgi6si8y/

### vagrant起動時にhttpdが起動しないことがある

Vagrantfileに以下を追記

```
config.vm.provision :shell, run: "always", :inline => <<-EOT
    sudo service httpd restart
EOT
```

### MySQLの外部接続許可ユーザー追加

MySQL接続後、

```
create user 'root'@'%' identified  by '任意のパスワード';
grant all on *.* to 'root'@'%' with grant option;
flush privileges;
```

確認

```
select user,host from mysql.user;
```