Vagrant環境で、CentOS7.3サーバーを立てて、Laravel6.18をインストールする

すでにVirtual Box + Vagrant(+sandbox)は入っている前提です。
Windows10での操作を前提にして記載しますので、macの方はローカルでの作業部分は適宜読み替えてください。

素のCentOSにPHP7.3やMySQL8.0をインストールし、Composerを入れ、Laravel6をインストールところまで行きます。

#CentOS7サーバーを立てる
##CentOS7.3のダウンロード
powershell(PS)にて

```
PS vagrant box add centos73 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.3/vagrant-centos-7.3.box
PS box: Successfully added box 'centos73' (v0) for 'virtualbox'!
```
##CentOS7.3サーバーの起動
###作業ディレクトリの作成
今回の環境を置きたいディレクトリを
`C:\work\centos7-laravel6`
とする。
powershellを使って、そこに移動して、

```
PS vagrant init centos73
```
###vagrantfileの編集
35行目くらいに書かれている

```
# config.vm.network "private_network", ip: "192.168.33.10"
```
の部分を

```
config.vm.network "private_network", ip: "192.168.33.190"
```
と書き替え。（ご自分の環境に合わせて適宜変えて下さい）

###起動

```
PS vagrant up
```
##sshで接続

```
PS ssh vagrant@192.168.33.190
```
パスワードは「vagrant」
##curl、nssのアップデート
```
$ sudo yum update curl -y
$ sudo yum update nss -y
```

#PHP7.3のインストール
すでにインストールされていないか確認。

```
$ yum list installed | grep php
```
何も出てこなければOK。
##インストールファイルのダウンロード
```
$ sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ sudo yum info --enablerepo=remi,remi-php73 php
$ sudo yum search --enablerepo=remi,remi-php73 php
$ sudo yum info --enablerepo=remi,remi-php73 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql php-bcmath
```
エラーが出ないことを確認する。
##PHPのインストール
```
$ sudo yum install -y --enablerepo=remi,remi-php73 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql php-bcmath
```
##再起動時にhttpdが自動で起動するように設定

```
$ sudo systemctl enable httpd.service
```
##httpd を起動

```
$ sudo systemctl start httpd.service
```
##バージョン確認

```
$ httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Aug  8 2019 11:41:18
```
```
$ php -v
PHP 7.3.16 (cli) (built: Mar 17 2020 10:18:38) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.16, Copyright (c) 1998-2018 Zend Technologies
```

##FireWallの無効化

```
$ sudo systemctl status firewalld
```

で

```
Active: active (exited)
```
と返ってきたら動いている。
もしアクティブになっていたら停止する。Vagrant（ローカル）だし。

```
$ sudo systemctl stop firewalld
```

##自動起動禁止
二度と起動しないようにする。

```
$ sudo systemctl disable firewalld
```

##この状態でセーブ
一旦、sshを抜けて、vagrant sandbox on にしてセーブしておく。

```
PS vagrant sandbox on
PS vagrant suspend
PS vagrant sandbox commit
```
##再び起動
```
PS vagrant resume
```

#MySQLのインストール
##インストールファイルの取得

```
$ sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
```
##リポジトリの確認

```
$ sudo yum repolist all | grep mysql
・・・
mysql80-community/x86_64           MySQL 8.0 Community Server    enabled:    161
・・・
```
「mysql80-community/x86_64」が「enabled」となっていることを確認。
「disabled」になっていたら、他記事を探して「enabled」にする。略。

##インストール
```
$ sudo yum install -y mysql-community-devel
$ sudo yum install -y mysql-community-server
```
##バージョン確認

```
$ mysql --version
mysql  Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)
```

##MySQLの設定ファイルの追加
以下の設定を MySQL の設定ファイルに追加します。

```
$ sudo vi /etc/my.cnf
```
```
#ログのタイムゾーンの設定（初期値：UTC）
log_timestamps=SYSTEM
#クライアントの文字セットの設定を無視する
skip-character-set-client-handshake
#デフォルトの文字セット（初期値：utf8mb4 >= 8.0.1）
character-set-server=utf8mb4
#タイムスタンプのデフォルト値に関する設定（初期値：ON >= 8.0.2）
explicit_defaults_for_timestamp=ON
```
##kernelのアップデート
以前、ここでmysqlを再起動するとハングすることがあった。kernelをアップデートする。（今は不要かもしれないが、やって損はない。）
###yumでアップデート

```
$ sudo yum update kernel -y
```
###再起動

```
$ sudo reboot
```

##再度sshで接続

##起動確認

```
$ rpm -qa | grep mysql
```

##自動起動設定

```
$ sudo systemctl enable mysqld
```

##初期パスワードの確認
```
$ grep -i password /var/log/mysqld.log
```
と打つと下記が戻る

```
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: {ランダム文字列}
```

##初期パスワードの変更
Vagrantだし、簡単なパスワードに変えたい。

```
$ mysql -u root -p
Enter password: 　（上記で確認したランダムパスワードを入力）

mysql>  SET GLOBAL validate_password.length=4;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL validate_password.mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql>  SET GLOBAL validate_password.number_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL validate_password.special_char_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL validate_password.policy=LOW;
Query OK, 0 rows affected (0.00 sec)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Query OK, 0 rows affected (0.02 sec)
```

##この状態(PHP+MySQL)でセーブ
一旦、sshを抜ける。

```
PS vagrant suspend
PS vagrant sandbox commit
PS vagrant resume
```
##再びSSHで接続
略

#composerのインストール

##インストール
homeディレクトリ
`/home/vagrant`
にて

```
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php composer-setup.php
```

##パーミッション緩和
```
$ sudo chmod 777 /usr/local/bin/
$ sudo mv composer.phar /usr/local/bin/composer
```
##確認

```
$ composer
``` 
と打つと以下が返る。

``` 
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.10.1 2020-03-13 20:34:27
``` 
#gitのインストール

``` 
$ sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
$ sudo yum -y install git2u yum-utils
$ sudo yum-config-manager --disable ius
``` 
##確認

``` 
# git --version
git version 2.16.6
``` 
ちょっと古いがまぁいい。

#圧縮解凍のライブラリをインストール

```
$ sudo yum install -y zip unzip
```

##この状態(PHP+MySQL+細々としたMW)でセーブ

一旦、sshを抜ける。

```
PS vagrant suspend
PS vagrant sandbox commit
PS vagrant resume
```
##再びSSHで接続
略
#Laravel6のインストール
いよいよLaravel6のインストール
phpのライブラリが一部足りないようなので追加インストール

```
$ sudo yum install -y --enablerepo=remi,remi-php73 php-devel php-zip
```
これで準備完了。

##Laravel6のインストール
インストールしたいディレクトリに移動する。
`/var/www/html/`
の下にディレクトリを切って入れたいが、vagrantユーザーはここに書込権限がないので、suする。

```
$ su
```
passwordは「vagrant」

```
$ cd /var/www/html/
```
##プロジェクトの作成

```
$ composer create-project --prefer-dist laravel/laravel=6 {project_name}
```
{project_name}はsampleとする

実行すると長い間無反応になる。(10分くらいかかる)

sampleに入って、バージョン確認

```
$ cd sample
$ php artisan --version
```
以下が返る。

```
Laravel Framework 6.18.6
```
##root から抜ける
```
$ exit
```

##パーミッション変更
```
$ sudo chmod 777 -R storage/
$ sudo chmod -R 777 bootstrap/cache
```

#動作確認

```
$ php artisan serve --host=192.168.33.190 --port=8000
```
としておき、Windows側のブラウザから
`http://192.168.33.190:8000`
でアクセスしてみる。
Laravelのオープニング画面が出ればここまでは成功！