windows 10
Homestead 5.4
Vagrant 2.1
box 2.1.0
vbox
Vagrant是一款基于Virtual Box的虛擬機環境,可以安裝多種Box(即預先配置好的開發環境),達到多種開發環境可以快速切換并且不需要擔心Package Dependencies。
Homestead 是一個基于 Ubuntu 構建的虛擬機,它包含了所有 Laravel 開發時需要用到的東西,你可以很輕松的通過指定的 Laravel 版本來找到相對應版本并進行安裝。
如今二者經常用于laravel的開發環境快速搭建
1. Git
首先再windows上下載git,并且再安裝時勾選git-bash就好了
2. Vagrant
Vagrant的下載地址:https://www.vagrantup.com/downloads.html
選擇Windows版本進行下載并安裝。
3. Virtual Box
Virtual Box的下載地址:https://www.virtualbox.org/wiki/Downloads
請選擇高亮的鏈接下載Windows版本并安裝。
4.添加box
運行以下語句下載最新版本
vagrant box add laravel/homestead
運行后輸入2回車,選擇virtualbox
之后復制 box: Downloading:之后的鏈接去迅雷去下載
https://atlas.hashicorp.com/laravel/boxes/homestead/versions/2.1.0/providers/virtualbox.box
這里要注意一點就是版本的問題,以上的鏈接版本是2.1.0是目前最新版本,如因特殊原因需指定版本則輸入
vagrant box add laravel/homestead --box-version= xxx(此處為版本號)
版本具體可以去官網查詢
https://atlas.hashicorp.com/laravel/boxes/homestead
下載好了之后,將下載好的文件名重命名為homestead.box(前綴不重要,但是一定要加上.box后綴),然后運行
vagrant box add laravel/homestead file:///c:/users/Administrator/downloads/homestead.box
注意自己的文件下載路徑,完成之后你會發現自己的用戶文件夾里多出了一個.vagrant.d的文件夾(C:\Users\Administrator.vagrant.d),我們打開這個文件夾,進入該路徑C:\Users\Administrator.vagrant.d\boxes\laravel-VAGRANTSLASH-homestead,在該文件夾下新建一個叫metadata_url的文件:
在文件中添加內容
https://atlas.hashicorp.com/laravel/homestead
注意,不要留任何空白字符,保存文件。
完成之后,我們就可以開始配置Homestead了。
5.Homestead 安裝和配置
git clone https://github.com/laravel/homestead.git ~/Homestead
下載好了Homestead之后,用腳本生成 Homestead.yaml 文件:
# 先cd到剛才下載的Homestead文件夾
$ cd ~/Homestead
# 開始初始化Homestead
$ bash init.sh
然后在~/Homestead文件夾中,我們可以看到多出了一個叫Homestead.yaml的文件,用編輯器打開對其進行配置:
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
# folders 來指明本機要映射到 Homestead 虛擬機上的文件夾。
# map 是本機的文件夾,to 則對應的是 Homestead 上的文件夾。
folders:
- map: ~/Code
to: /home/vagrant/Code
#sites屬性你可以方便地將“域名”映射到 Homestead 虛擬機的指定目錄
#map 是域名,to 則對應的是 Homestead 上的網站目錄,注意這里Laravel是我們的項目。
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
databases:
- homestead
# blackfire:
# - id: foo
# token: bar
# client-id: foo
# client-token: bar
# ports:
# - send: 50000
# to: 5000
# - send: 7777
# to: 777
# protocol: udp
首先我們需要建立SSH Key并且填入路徑。在Git Bash中,輸入:
ssh-keygen -t rsa
一路回車就好了,完成后,我們會在用戶根目錄下看到一個.ssh文件夾,里面分別有
id_rsa.pub
id_rsa
兩個文件,分別對應配置文件中
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rs
其他基本配置默認就好,如果有需要改動folders和sites則手動改就好了,這里要說的就是folders的配置,由于一開始沒創建Code所以本機和Homestead的Code沒能同步,后來創建了后就可以了,看其他人貌似沒這個問題,所以為了謹慎起見還是創建了,所以我們在用戶根目錄下創建Code(根據配置文件中的文件名)
最后在hosts文件末尾添加
192.168.10.10 homestead.app
6.啟動
首次配置完Homestead.yaml 時,需要運行vagrant provision去運行folder和site的映射
然后再運行vagrant up
在git-bash中輸入
cd ~/Homestead
vagrant provision
vagrant up
運行成功后,通過 SSH 來登錄 Homestead輸入
vagrant ssh
成功登陸Homestead
進入之后我們到/home/vagrant/Code文件中創建項目
# cd進入我們共享的文件夾
$ cd /home/vagrant/Code
#將composer改成中國鏡像
$ composer config -g repo.packagist composer https://packagist.phpcomposer.com
# 創建一個新的laravel項目,注意這里的項目名稱要和Homestead.yaml配置文件中的sites的to的項目一樣,否則可能出現訪問網站時輸出No input file specified,原因就是nginx的找不到該項目
$ laravel new Laravel
完成后直接訪問就可以了
最后嘗試退出虛擬機,并關閉Vagrant
$ exit
7.連接sql
Vagrant + Homestead 下的 MySql 默認帳號和密碼
用戶名:homestead
密碼:secret
命令行登陸:$ mysql -uhomestead -psecret
8.重啟服務密碼
重啟如果提示需要密碼,一般密碼是都是 vagrant
9.homestead添加多個域名
在homestead.yaml中的sites添加
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
#第二個域名
- map: test.app
to: /home/vagrant/Code/test/public
然后再去hosts文件中添加dns
192.168.10.10 homestead.app
192.168.10.10 test.app
然后到打開git-bash到命令行執行
#重啟項目
vagrant reload --provision
#執行完畢后在啟動
vagrant up
#到Code下再新建剛剛對應的項目就ok了
$ cd ~/Code
$ laravel new test
完成后就可以訪問不同的站點了
還有一種方法實在虛擬機中已經新建了個項目的話,那么就直接再虛擬機中用命令配置
#假設進入了虛擬機新建了一個項目
vagrant up
$laravel new newProject
#用命令添加站點
$serve newproject.dev home/vagrant/Code/newProject/public
最后也是再hosts添加對應的域名就行了
vagrant 常用命令
vagrant --help
vagrant up
vagrant halt//優雅關閉Homestead
vagrant boxlist
vagrant boxremove '盒子名稱'//從vagrant中去除添加的盒子
vagrant --reload//重新加載配置
參考鏈接:
http://blog.csdn.net/lgyaxx/article/details/60870819
http://www.seekjune.com/post/171
遇到的問題
- The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.
解決方法:需要關閉虛擬機 vagrant halt ,然后執行 vagrant reload 就可以進去了
- laravel No input file specified.
解決方法:Homestead.yaml 配置有問題,看看名字有沒有打錯