構(gòu)建 VirtualBox 和 Vagrant 開發(fā)環(huán)境
概念
- VirtualBox -- Oracle 的虛擬機(jī)軟件
- Vagrant 提供命令行接口省骂,允許自動(dòng)化安裝虛擬機(jī)族购,因?yàn)槭悄_本編寫的 provision 文本文件劫谅,給共享虛擬機(jī)配置提供了可能绰咽,Homestead 構(gòu)建在 Vagrant 之上眼坏。
- Homestead 是 Laravel 官方封裝的一個(gè) Vagrant Box拂玻,是一臺(tái)虛擬機(jī)的虛擬機(jī)原型,運(yùn)行在 VirtualBox 上。
Vagrant就是一款構(gòu)建虛擬開發(fā)環(huán)境的工具檐蚜,支持window魄懂,linux,mac闯第,總有一款適合你逢渔。并且vagrant 可以把配置好的環(huán)境打包成一個(gè)box,分享給其他人直接使用乡括,非常方便肃廓。
環(huán)境說明
系統(tǒng):
macOS Sierra 10.12.4
虛擬機(jī):
http://download.virtualbox.org/virtualbox/5.1.22/VirtualBox-5.1.22-115126-OSX.dmg
開發(fā)環(huán)境:https://releases.hashicorp.com/vagrant/1.9.5/vagrant_1.9.5_x86_64.dmg
// 測試 vagrant 版本
vagrant -v
box系統(tǒng):
Ubuntu http://files.vagrantup.com/precise64.box
安裝 box
[~/vagrant/boxes]$ vagrant box add ubuntu64.box
==> box: Box file was not detected as metadata. Adding it directly...
A name is required when adding a box file directly. Please pass
the `--name` parameter to `vagrant box add`. See
`vagrant box add -h` for more help.
// 語法錯(cuò)誤,需要為box起名
[~/vagrant/boxes]$ vagrant box add ubuntu ubuntu64.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'ubuntu' (v0) for provider:
box: Unpacking necessary files from: file:///Users/junchow/vagrant/boxes/ubuntu64.box
==> box: Successfully added box 'ubuntu' (v0) for 'virtualbox'!
安裝 lnmp
// 創(chuàng)建 lnmp 環(huán)境
[~/vagrant/boxes] mkdir lnmp && cd lnmp
// 初始化 ubuntu
[~/vagrant/boxes/lnmp] vagrant init ubuntu
// 進(jìn)入 lnmp 虛擬機(jī)
[~/vagrant/boxes/lnmp] vagrant up
[~/vagrant/boxes/lnmp] vagrant ssh
// 安裝軟件
vagrant@precise64:~$ sudo apt-get install nginx mysql-server mysql-client php5-cli php5-fpm php5-gd php5-mysql
Laravel 虛擬開發(fā)環(huán)境 Homestead
https://vagrantcloud.com/laravel/boxes/homestead/
安裝 Homestead Vagrant Box
# 下載 Homestead 并添加到 vagrant box 中
[~/vagrant]$ vagrant box add Laravel/homestead
==> box: Loading metadata for box 'Laravel/homestead'
box: URL: https://atlas.hashicorp.com/Laravel/homestead
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.
1) parallels
2) virtualbox
3) vmware_desktop
Enter your choice: 2
# 查看 vagrant box
[~/vagrant]$ vagrant box list
laravel/homestead (virtualbox, 2.1.0)
ubuntu (virtualbox, 0)
手動(dòng)克隆代碼倉庫的方式來安裝 Homestead
# 克隆 homestead 項(xiàng)目到本地
[~/vagrant/boxes]$ git clone https://github.com/laravel/homestead.git Homestead
# 由于 Homestead 的 master 分支并不是穩(wěn)定分支诲泌,你應(yīng)該檢出已經(jīng)標(biāo)簽過的穩(wěn)定版本盲赊。
[~/vagrant/boxes]$ cd Homestead && git checkout v4.0.5
# 創(chuàng)建 Homesstead.yaml 配置文件
[~/vagrant/boxes/Homestead]$ bash init.sh
配置 Homestead
[~/vagrant/boxes/Homestead] vim Homestead.yaml
memory: 2048
cpus: 1
# 配置 vagrant 提供者(虛擬機(jī)類型)
provider: virtualbox
# 配置 SSH 認(rèn)證
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
# 配置共享文件夾,本機(jī)與 Homestead 環(huán)境自動(dòng)更新同步
folders:
- map: ~/Code // 本地~/Code 目錄
to: /home/vagrant/Code //虛擬機(jī)中文件夾
type: "nfs" //若啟動(dòng) NFS
# 配置 NGINX 站點(diǎn)
sites:
- map: homestead.app //本地域名
to: /home/vagrant/Code/Laravel/public //文件映射地址
databases:
- homestead
# 配置本地 host
[~/vagrant/boxes/Homestead] vim /etc/hosts
192.168.10.10 homestead.app
# 修改配置后重新運(yùn)行
[~/vagrant/boxes/Homestead] vagrant reload --provision
啟動(dòng) Vagrant Box
# 啟動(dòng) vagrant 發(fā)生錯(cuò)誤
[~/vagrant/boxes/Homestead]$ vagrant up
/Users/junchow/vagrant/boxes/Homestead/scripts/homestead.rb:117:in `read': No such file or directory @ rb_sysopen -
# 重新生成 ssh 登陸認(rèn)證的 key
[~/vagrant/boxes/Homestead]$ ssh-keygen
# 啟動(dòng) vagrant
[~/vagrant/boxes/Homestead]$ vagrant up
登陸 Homestead 并安裝 Laravel
# 登錄Homestead
[~/vagrant/boxes/Homestead]$ vagrant ssh
# 修改鏡像地址
vagrant@homestead:~$ composer config -g repo.packagist composer https://packagist.phpcomposer.com
# 安裝 Laravel
vagrant@homestead:~$ cd Code && composer create-project laravel/laravel --prefer-dist
# 若 autoload 或 bootstrap 不存在敷扫,說明依賴不完整哀蘑。
composer update --no-scripts
mysql 數(shù)據(jù)庫
默認(rèn)賬戶密碼:homestead/secret
$ mysql -uhomestead -psecret
問題:
訪問 http://homestead.app 頁面出現(xiàn) no input file specified
,檢查本地 Code 目錄代碼正常葵第,檢查homestead 中 Code 發(fā)現(xiàn)里面沒有代碼绘迁。解決方法是重新同步 vagrant reload --debug
λ ~/ homestead [22:57:57]
zsh: command not found: homestead
# 將~/.composer/加入環(huán)境變量 PATH
λ ~/ echo $PATH
λ ~/ sudo vim .zshrc
export PATH="/Applications/MAMP/bin/php/php7.1.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/junchow/.composer/vendor /bin"
λ ~/ sourch .zshrc
# 查看~/.composer/vender/lavarel/ 下是否存在 homestead
λ ~/.composer/vendor/laravel/ composer global require laravel/homestead