Vagrantで動かすAmazon Linux2(PHP7.3+Xdebug+MySQL5.7)の環境を作る

#はじめに
AmazonLinuxをVagrantで実行出来るようにするためには、VirtualBoxのイメージをダウンロードして、cloud init用のCD作成、VMの作成などが必要になりますが、この記事では@shunsuke_takahashiさんの公開されているイメージを利用しています。

通常の手順(途中まで試しました)
[Amazon Linux 2 LTSの綺麗なVagrant boxを作ってみた（2.0.20180622.1）](https://qiita.com/mitsubachi/items/db503feb6be555dc32ac)

・Macでの作業になります。
・手順の案内を細かく書くというよりはざっくりとしたやり方と各記事へのリンクになっています。
・初めて書いてみたので何か変だったらごめんなさい><;

#公開されているAmazonLinux2のイメージを利用する
以下のvagrantファイルを用意してVagrant upを実行

```ruby:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "stakahashi/amazonlinux2"
  config.vm.network "private_network", ip: "192.168.33.10"
end
```

#Virtualbox上でGuesstAdditionをインストールする
このままだと共有フォルダが使えないのでこちらの記事を参考に設定しました。
設定後、仮想マシンを再起動することを忘れないようにします。
[インストールしてWindowsとフォルダーを共有させる](https://qiita.com/homines22/items/946acbf7b0f043887e64)

##Vagrantファィルに共有フォルダを設定
Vagrantfileにconfig.vm.synced_folderを追加して、一度vagrant haltして終了後vagrant upを実行

```ruby:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "stakahashi/amazonlinux2"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.synced_folder "「ホスト側のフォルダパス」", "「ゲストOS側のフォルダパス」", :mount_options => ['dmode=777', 'fmode=777']
end
```
(「」内は適宜指定してください。)

#PHPをインストール
こちらの記事を参考に「パッケージ更新」から「PHP7.3の起動設定」・「確認」までの作業を行いました。
[AmazonLinux2でNginx+PHP7.3をインストールする。ついでにOPcacheとAPCuも](https://qiita.com/kyo662211/items/0a23f634a26472ad12ab)

##ブラウザで表示できるようにする
以下のdefault.confを/etc/nginx/conf.d/以下に作成しました。
192.168.33.10:10000で動作確認させる設定になります。適宜変更してください。
(Laravelで使っていたものをそのまま利用したので明らかに不要な箇所だけ記事作成時に削除しました。
まだ不要な箇所はあると思います。)

```ruby:default.conf
server {
    listen       *:10000;
    server_name  localhost;

    #Document Root
    root ルートフォルダのパス;

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    access_log off;
    error_log  /var/log/nginx/error.log error;

    sendfile off;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm/www.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
    }
}
```

##その他confファイルを変更
nginx.confのserverの項目を削除

```ruby:default.conf
server {
(省略)
    }
```
php.confを削除
php-fpm.confを削除

#Xdebugのインストール
インストールの前に以下のパッケージをインストール

```ruby:
sudo yum install git
sudo yum install php-devel
```

Xdebugのインストールは以下の記事を参考に「Xdebugのインストール」の項目にある
cd /usr/local/srcのコマンドからmake installまでを行いました。
make testは非常に実行に時間がかかりそうだったので、キャンセルしました。

[Cent OS 7上でApache/PHP開発環境を構築する](https://qiita.com/ariaki/items/2ec627a7567437f893ee)

#php.iniの設定(Xdebug用)
php.iniの設定については以下の記事を参考に設定を行いました。

[VisualStudioCodeのデバッグでどうしてもブレークで止まらない場合 (PHP Xdebug)](https://qiita.com/rrryutaro/items/c08f667f20de6abf482f)
[VisualStudioCode + Vagrant + XdebugでPHPをリモートデバッグ](https://qiita.com/ushi_d/items/f4b5af012725728842d7)

```ruby:
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
zend_extension=xdebug.so

[XDebug]
xdebug.dump_undefined = 1
xdebug.remote_enable = 1
;xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
```
設定後php-fpm とnginxを再起動します。

##VisualStudioCodeの設定
先ほどの記事を参考にVisualStudioCodeの設定も行いました。

```ruby:launch.json
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000,
            "stopOnEntry": true,
            "log": true,
            "pathMappings": {
                "サーバ側のパスを書いてください": "${workspaceRoot}"
            }
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}
```
workspaceRootはVisualStudioCodeで開いているフォルダになります。


#MySQLのインストール
こちらの記事を参考にMariaDBの削除後、MySQL5.7をインストールしました。
[【AWS】Amazon Linux2環境にMySQLをインストールしようとしてはまった](https://qiita.com/yut-nagase/items/780d68a15b05c50c0a42)

##MySQLのパスワードについて
こちらの記事を参考に以下のコマンドを実行してパスワードを確認しました。
[MySQL5.7インストール後にrootでログインする方法](https://qiita.com/fujiiiiii/items/c30153179487a656d672)

```ruby:
cat /var/log/mysqld.log | grep root@localhost
```

以上になります。

試行錯誤しながら試していたので意外と時間がかかりました。
最後まで読んで頂いてありがとうございます。