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」という便利なものがあったのですね。 知らなかった。けど勉強になったからいいや。
参考
以下のサイトを参考にさせていただきました、ありがとうございます。
- CentOSにちょっと古いバージョンのNginxをインストールする
- PHP Laravelのartisanコマンドのまとめ CentOS7 に nginx導入
- CentOS7.3 に MySQL5.7 をインストールした時のメモ
- CentOS7にComposerをインストールする
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