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)

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

公開されているAmazonLinux2のイメージを利用する

以下のvagrantファイルを用意してVagrant upを実行

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とフォルダーを共有させる

Vagrantファィルに共有フォルダを設定

Vagrantfileにconfig.vm.synced_folderを追加して、一度vagrant haltして終了後vagrant upを実行

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も

ブラウザで表示できるようにする

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

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の項目を削除

default.conf
server {
(省略)
    }

php.confを削除
php-fpm.confを削除

Xdebugのインストール

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

sudo yum install git
sudo yum install php-devel

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

Cent OS 7上でApache/PHP開発環境を構築する

php.iniの設定(Xdebug用)

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

VisualStudioCodeのデバッグでどうしてもブレークで止まらない場合 (PHP Xdebug)
VisualStudioCode + Vagrant + XdebugでPHPをリモートデバッグ

;;;;;;;;;;;;;;;;;;;;;;
; 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の設定も行いました。

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をインストールしようとしてはまった

MySQLのパスワードについて

こちらの記事を参考に以下のコマンドを実行してパスワードを確認しました。
MySQL5.7インストール後にrootでログインする方法

cat /var/log/mysqld.log | grep root@localhost

以上になります。

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