Laravelの開発環境を構築するVagrantfileを作成したので、まとめます。 成果物はgithub-vagrant_laravelこちらにまとめております。

Homesteadを使用した手順はこちらにまとめました。 laravel + homestead + xdebugの開発環境構築手順 ※2018/05/12追記

nginxがwebサーバで、mysqlも使えます。 Vagrantfileの中身は本ブログの一番下に載せてあります。

各種バージョンはこちら

  • PHP 7.0.25
  • composer 1.5.2
  • mysql 5.5.58
  • nginx 1.12.2
  • Virtual Box 5.1.30
  • vagrant 2.0

Virtual Boxとvagrantのバージョンが合わなかったら正しく動作しない場合があります。 その時は、バージョンを合わせてみてください。

Laravel自体のインストール方法は過去にまとめておりますので、参照下さい。 macでLaravel 5.5の開発環境を構築。

では早速インストール手順から。後に解説を書きます。

インストール手順

vagrantでローカル開発環境を構築

$ git clone https://github.com/hirasaki1985/vagrant_laravel.git
$ cd vagrant_laravel
$ rm -rf laravel
$ composer create-project laravel/laravel

$ vagrant box add centos72 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box
$ vagrant up
$ chmod -R 777 ./laravel

ここではcomposerコマンドで新規でlaravelをlaravelディレクトリにインストールしておりますが、 あらかじめlaravelディレクトリにプロジェクトを設置しておいて動かすことも可能です。

hostsファイルを修正

macの場合はこちら。

$ sudo vi /etc/hosts

windowsだとここらへん。

C:\Windows\System32\drivers\etc\hosts

以下の二行を追記。IPはVagrantfile内の設定に合わせる。

192.168.33.10 develop_server.com
192.168.33.10 other_webserver.com

ブラウザでアクセス

http://develop_server.com →./laravelディレクトリがルートディレクトリ

http://other_webserver.com/index.php →./other_webディレクトリがルートディレクトリ

アクセスできましたでしょうか? Laravelの画面が表示されたら成功です!

解説

ゲスト、ホスト間の共有ディレクトリについて

Vagrantfileのsynced_folderの設定ですが、以下のような意味合いで設定してます。

ディレクトリ名 説明
laravel Laravelがインストールされているディレクトリ。
other_web Laravel以外でもしwebサーバが必要になった時にすぐ使えるように。
configs サーバやツールなどの初期設定ファイルを格納。
initialize 初期化(初回起動時のみ)使用するファイルを格納。
share その他共有したいファイルを格納。

IPアドレスを変える場合

Vagrantfileのprivate_networkのipを変更すればOKです。 その際は、hostsファイルのIPアドレスも同じものに変更して下さい。

mysqlにアクセスする場合

MySQL Workbenchなどを使う場合は以下のような設定で接続できるはず。 このコマンドでvagrantへのssh接続情報が見れるので、それを参考に設定してみて下さい。

$ vagrant ssh-config
設定名
Connection Method: Standard TCP/IP over SSH
SSH Hostname: 127.0.0.1:2222
SSH Username: vagrant
SSH Key File {keyへのパス}
MySQL Hostname: 127.0.0.1
MySQL Server Port: 3306
Username: root
Password: {なし}

もちろん、直接vagrant内に入ってmysqlコマンドで接続もできます。

ドメイン名を変えたい場合

configs/nginx/conf.d/配下の各confファイルの、 「server_name」と、hostsファイルのドメイン名を修正して下さい。

ポート番号を変えたい場合

Vagrantfileのforwarded_portの値をそれぞれ修正して下さい。 guestの方を変える分には問題ないはず。

共有しているlaravelのディレクトリ名を変えたい場合

Vagrantfileのここの部分で設定していますので、使用したいディレクトリ名に変更すればOKです。

config.vm.synced_folder "./laravel", "/var/www/develop"

vagrantに入ってlaravelのコマンドを打ちたい場合

ここがvagrant内のlaravelのルートディレクトリになるので、

$ vagrant ssh
$ cd /var/www/develop/

以下のようなコマンドを打つといいです。

$ php artisan migrate
$ mysql -u root -p develop_database -e 'show tables;'
$ php artisan make:migration create_people_table
$ vendor/bin/phpunit
$ php artisan make:request HelloRequest
$ php artisan make:middleware HelloMiddleware

その他サーバの実行方法

開発用のwebサーバであれば下記コマンドでも実行できるのですが、 nginxを使う方法を取ってます。

$ php artisan serve --host 0.0.0.0

Laravelのmigrateやseed, envについて

Vagrantfileに以下の項目があるので、

  ### select local env
  APP_ENV=local php artisan config:cache

  ### exec migrate
  php artisan -n migrate

  ### exec seed
  php artisan -n db:seed

ここを変更することで、初回起動時に何を実行するか調整することができます。

migrateは、initialize/db_initialize.sqlにCREATE DATABASEのSQLが書いていますので、 そのDBをターゲットにするとmigrateを走らせれます。

あとがき

vagrantを完成させてから知ったのですが、「Laravel Homestead」という便利なものがあったのですね。 知らなかった。けど勉強になったからいいや。

Laravel Homestead

参考

以下のサイトを参考にさせていただきました、ありがとうございます。

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "centos72"
  config.vm.network "forwarded_port", guest: 80, host: 80
  config.vm.network "forwarded_port", guest: 8000, host: 8000
  config.vm.network "forwarded_port", guest: 8080, host: 8080
  config.vm.network "forwarded_port", guest: 3306, host: 3306
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.synced_folder "./laravel", "/var/www/develop"
  config.vm.synced_folder "./other_web", "/var/www/other_web"
  config.vm.synced_folder "./configs", "/configs"
  config.vm.synced_folder "./initialize", "/initialize"
  config.vm.synced_folder "./share", "/share"
  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "2048"
    vb.name = "laravel-develop"
  end

  config.vm.provision "shell", inline: $setup
  config.vm.provision "shell", run: "always", inline: $start
end

$setup = <<SCRIPT
  ## init & update
  yum update -y
  yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
  yum install -y yum-utils
  yum install -y git unzip lsof sendmail sendmail-cf npm gzip vim php-fpm

  ## jpn lang
  yum -y install ibus-kkc vlgothic-* 
  localectl set-locale LANG=ja_JP.UTF-8
  source /etc/locale.conf 
  echo $LANG

  ## timezone
  timedatectl set-timezone Asia/Tokyo

  ## install php 7.0
  yum-config-manager --enable remi-php70
  yum install -y php
  cp -p /configs/php/php.ini /etc/php.ini
  php -v

  ## install composer
  php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  php composer-setup.php
  php -r "unlink('composer-setup.php');"
  mv composer.phar /usr/local/bin/composer
  su vagrant -c "composer --version"

  ## uninstall mariadb
  yum remove -y mariadb-libs

  ## install mysql 5.5
  yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
  yum-config-manager --disable mysql57-community
  yum-config-manager --enable mysql55-community
  yum info mysql-community-server
  yum install -y mysql-community-server
  mysqld --version

  service mysqld start

  ## exec sql
  export MYSQL_PWD=
  echo ${MYSQL_PWD}
  mysql -u root < /initialize/db_initialize.sql

  ## auto start
  chkconfig mysqld on

  ## install project
  yum install -y --enablerepo=remi-php70 php-fpm php-mcrypt php-cli php-common php-devel php-gd php-mbstring php-mysqlnd php-opcache php-pdo php-pear php-pecl-apcu php-pecl-zip php-process php-xml
  cd /var/www/develop && \
    su vagrant -c "/usr/local/bin/composer install"
  mkdir -p /share/logs

  ### select local env
  APP_ENV=local php artisan config:cache

  ### exec migrate
  php artisan -n migrate

  ### exec seed
  php artisan -n db:seed

  ## install nginx
  rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
  sed -i -e "s/packages\/centos/packages\/mainline\/centos/" /etc/yum.repos.d/nginx.repo
  yum --showduplicates list nginx
  yum -y --enablerepo=nginx install nginx
  nginx -v
  cp -p /configs/nginx/nginx.conf /etc/nginx/nginx.conf
  cp -p -r /configs/nginx/conf.d/* /etc/nginx/conf.d/

  systemctl enable nginx

  ### nginx use php
  sed -i -e "s/^user = apache/user = nginx/" /etc/php-fpm.d/www.conf
  sed -i -e "s/^group = apache/group = nginx/" /etc/php-fpm.d/www.conf
  chkconfig php-fpm on

  ## mail
  cd /etc/mail
  cp -p sendmail.mc sendmail.mc_bkup`date +"%Y%m%d"`
  cp -p sendmail.cf sendmail.cf_bkup`date +"%Y%m%d"`
  sed -i -e "s/.*SMART_HOST.*/define\(\'SMART_HOST\',\'smtp:smtp.mailgun.org\'\)/g" /etc/mail/sendmail.mc
  m4 sendmail.mc > sendmail.cf
SCRIPT

$start = <<SCRIPT
  sudo service mysqld restart
  sudo systemctl restart sendmail.service
  sudo systemctl restart php-fpm
  sudo systemctl restart nginx
  #cd /var/www/develop && \
  #  php artisan serve --host 0.0.0.0 >> /share/logs/access.log &
SCRIPT