構(gòu)建 VirtualBox 和 Vagrant 開發(fā)環(huán)境
概念
- VirtualBox -- Oracle 的虛擬機軟件
- Vagrant 提供命令行接口,允許自動化安裝虛擬機,因為是腳本編寫的 provision 文本文件,給共享虛擬機配置提供了可能,Homestead 構(gòu)建在 Vagrant 之上。
- Homestead 是 Laravel 官方封裝的一個 Vagrant Box,是一臺虛擬機的虛擬機原型,運行在 VirtualBox 上。
Vagrant就是一款構(gòu)建虛擬開發(fā)環(huán)境的工具,支持window,linux,mac,總有一款適合你。并且vagrant 可以把配置好的環(huán)境打包成一個box,分享給其他人直接使用,非常方便。
環(huán)境說明
系統(tǒng):
macOS Sierra 10.12.4
虛擬機:
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.
// 語法錯誤,需要為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 虛擬機
[~/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)
手動克隆代碼倉庫的方式來安裝 Homestead
# 克隆 homestead 項目到本地
[~/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 提供者(虛擬機類型)
provider: virtualbox
# 配置 SSH 認(rèn)證
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
# 配置共享文件夾,本機與 Homestead 環(huán)境自動更新同步
folders:
- map: ~/Code // 本地~/Code 目錄
to: /home/vagrant/Code //虛擬機中文件夾
type: "nfs" //若啟動 NFS
# 配置 NGINX 站點
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
# 修改配置后重新運行
[~/vagrant/boxes/Homestead] vagrant reload --provision
啟動 Vagrant Box
# 啟動 vagrant 發(fā)生錯誤
[~/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
# 啟動 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