Vagrant上にAmazonLinux2のLaravel開発環境構築


前提

virtualboxとvagrantはインストール済み
Homestead使えばいいんだけど、本番と同じようにする必要があるっぽいので作成

  • AmazonLinux2
  • PHP7.4
  • Apache 2.4
  • MySQL5.7
  • Composer
  • Nodejs

1.Vagrantfile作成

作業フォルダをprjとする

vi Vagrantfile

下記を記載

Vagrant.configure("2") do |config|
  config.vm.box = "gbailey/amzn2"
  config.vm.network "private_network", ip: "192.168.33.10"
end

VagrantHubで公開されているAmazonLinux2のboxを拝借します。

2.起動

prj(Vagrantfile)と同階層で

vagrant up

起動後box内へ接続

vagrant ssh

3.PHPインストール

amazon-linux-extras list

php好きなのインストール
今回は7.4

sudo amazon-linux-extras install php7.4

必要な拡張インストール

sudo yum install php-mbstring php-gd php-xml php-opcache php-bcmath

4.Apacheインストール

sudo yum install httpd

起動

sudo systemctl start httpd

確認
active(running)になっていればOK

sudo systemctl status httpd

自動起動

systemctl enable httpd

5.MySQLインストール

MySQLの5.7を入れる

sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
sudo yum install mysql-community-server

起動

sudo systemctl start mysqld.service

自動起動するように設定

sudo systemctl enable mysqld.service

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

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

このように出力されるのでパスワードをコピーしておく
[Note] A temporary password is generated for root@localhost: 【ランダム文字列】

次にMySQLにログイン
先ほど控えたパスワードを入力します

mysql -u root -p

ローカル開発なのでパスワード設定を緩めます

#パスワードの最低長
SET GLOBAL validate_password_length=4;
#ポリシーを緩める
SET GLOBAL validate_password_policy=LOW;

rootユーザのパスワードを変更

set password for root@localhost=password('ここに好きなパスワード');

exitしてMySQLからログアウト

6.Nodeインストール

Laravelでフロントやったりするときに使うので入れておく

リポジトリ追加

sudo curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -

インストール

sudo yum install nodejs

確認

node -v

7.Composer インストール

セットアップスクリプトを取得します

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

取得後、実行します

php composer-setup.php

実行完了後、ダウンロードできているのでセットアップスクリプトの削除

php -r "unlink('composer-setup.php');"

どこでも使えるように移動する

sudo mv composer.phar /usr/local/bin/composer

確認

composer -v

8.フォルダ同期とか設定

一度状態を保存をできるようにしておきます

box停止

vagrant halt

saharaのインストール

vagrant plugin install sahara

vagrantfileに同期フォルダの記載
ついでに同期してるフォルダをドキュメントルートにすると、httpdのほうが起動早くてフォルダ無いって言われて死ぬので
起動するシェルを追加する

Vagrant.configure("2") do |config|
  config.vm.box = "gbailey/amzn2"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.synced_folder "./src","/var/www/html/src", create:"true", group:"apache", :mount_options => ['dmode=775', 'fmode=775']
  config.vm.provision "shell", run: "always", inline: <<-SHELL
    systemctl restart httpd.service
  SHELL
end

記載内容を反映して起動

vagrant up --provision

saharaでロールバックできるように起動
これで設定等やらかしたりしても大丈夫

vagrant sandbox on

box内に接続

vagrant ssh

/var/www/html/srcとローカルのprj/srcが同期するのでここにLaravelをインストールすれば
ローカルにもできます

9.Laravelインストール

同期しているディレクトリへ移動

cd /var/www/html/src

Composer からLaravelのインストール

composer create-project --prefer-dist laravel/laravel . "6.*"

Cannot allocate memoryが出た場合
こちらを参考にswap領域の確保をしてください

ダウンロード完了後、Laravelの初期設定

chmod -R 777 storage && chmod -R 777 bootstrap/cache
cp .env.example .env
php artisan key:generate

ドキュメントルートの設定するのでバックアップを取っておく

sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.old

変更

sudo vi /etc/httpd/conf/httpd.conf

/DocumentRootで編集箇所へ

DocumentRoot "/var/www/html/src/public"

<Directory "/var/www/html">
  AllowOverride ALL#NONEから変更
</Directory>

Apache再起動

sudo systemctl restart httpd

あとは.envにMySQLの接続情報記載したら終了
Vagrantfileに記載したIPにアクセスするとLaravelの画面が表示されればOK

saharaをコミットしておく

vagrant halt
vagrant sandbox commit
vagrant sandbox off

何かしらインストールする際は再度vagrant sandbox onをして、やらかしたらvagrant sandbox rollbackで戻しましょう

10.配布

ほかの人に配布します

vagrant package default --output AmazonLinux2_LAMP

AmazonLinux2_LMAPの個所は好きに決定してください

AmazonLinux2_LMAP.boxが出力されているのでVagrantfileとともに渡し、

vagrant box add Lamp AmazonLinux2_LMAP

適当にbox名を決め、追加する元のboxを指定し起動

vagrant up

参考