Windows 7/8/10 系統下Laravel框架的開發環境安裝及部署詳解(Vagrant + Homestead)
註意! laravel/homestead box
項目地址已經不再是原來的
https://atlas.hashicorp.com/laravel/boxes/homestead
而已經變更成
https://app.vagrantup.com/laravel/boxes/homestead
如果是剛剛接觸Laravel
的朋友,請直接按文中步驟操作。
需要更新及重裝的朋友們請註意使用第二個地址來進行文中操作。
雖然我通常習慣在Linux
環境下工作,但對於一個從小就接觸Windows
的人來說,能夠在Windows
系統環境下進行程序的開發,對於我來說也不可或缺。那麽今天我們就一起來看一下如何在Windows 10
Laravel
的開發。
如果你的系統上已經安裝了PHP
,Apache
或NGINX
,並且有偏愛的數據庫系統,那麽基本上你已經可以開始寫代碼了。但是我強烈推薦你使用Vagrant
或者Docker
來進行開發,因為不需要獨立安裝和考慮更新零碎部件的問題,所有工具都已經集成。我們今天要介紹的是在Homestead
中進行Laravel
的開發。
如果你有點混亂,沒關系,接著往下看。
Vagrant
是一款基於Virtual Box
的虛擬機環境,可以安裝多種Box
(盒子,即預先配置好的開發環境),達到多種開發環境可以快速切換並且不需要擔心包裹的依賴性問題(Package Dependencies
)。
Homestead
是Laravel
官方創建的Vagrant
盒子,虛擬機的環境目前搭載的是Ubuntu 16.04 LTS
,已經集成了Laravel
所需的開發環境及工具,包含了最新版本的PHP
,MySQL
以及NGINX
服務器。
那麽我們需要做的幾個步驟如下:
- 下載並安裝Git Bash
- 下載並安裝Vagrant
- 下載並安裝Virtual Box。
- 下載Homestead盒子及盒子配置文件。
- 創建一個新的Laravel項目。
我們需要的工具:
- Git Bash
- Vagrant
- Virtual Box
- Homestead
註意:Laravel
官方推薦的Shell
是Git Bash
Git Bash
自動將~(tilde)
映射到用戶根目錄下(例如,C:\Users\Eagle
),而如果使用Windows
自帶的cmd
,那麽需要使用%HOMEDRIVE%%HOMEPATH%
環境變量來進入正確的文件夾。
好了那麽我們開始行動!首先需要我們先下載Git Bash
:
官網地址:
https://git-for-windows.github.io/
下載地址:
https://github.com/git-for-windows/git/releases/tag/v2.17.0.windows.1
直接下載可能很慢,我們可以右鍵復制下載鏈接,使用迅雷等下載工具下載。
安裝Git Bash
很簡單,按默認選項安裝就可了。
完成後,我們就可以進行下一步了:
安裝Vagrant
及Virtual Box
。
Vagrant
的下載地址:
https://www.vagrantup.com/downloads.html
請選擇Windows
版本進行下載並安裝。
Virtual Box
的下載地址:
https://www.virtualbox.org/wiki/Downloads
請選擇Windows hosts
下載Windows
版本並安裝。
註意:若下載最新
5.2+
版本的VirtualBox
,請確保你的Vagrant
版本在2.0
以上,因為新版的VirtualBox
與Vagrant
老版本不兼容。
完成之後,我們就可以開始安裝Homestead
了。
如果你在國外,或者你所在的地區對於CLI
方式下載安裝Homestead
網速沒有問題,那麽可以打開Git Bash
,輸入
$ vagrant box add laravel/homestead
以上命令將會自動下載及安裝Homestead
盒子。
如果以上命令下載速度很慢那麽我們需要切換到手動模式來安裝。
首先我們需要到以下地址下載最新版本(目前為6.1.0
)的Homestead
盒子(可以使用下載工具下載):
https://app.vagrantup.com/laravel/boxes/homestead/versions/6.1.0/providers/virtualbox.box
https://vagrantcloud.com/laravel/boxes/homestead/versions/6.1.0/providers/virtualbox.box
註意:如果你需要下載不同版本(或最新版本),請將以上地址中
versions/
後的數字版本號替換成相應的版本號。
下載完成後,我們將下載的文件命名為Homestead-6.1.0.box
。接下來,我們cd
到相應的文件夾(假設下載文件目錄在Downloads
文件夾下,運行以下命令:
$ vagrant box add laravel/homestead ./Homestead-6.1.0.box
輸入命令後,會開始導入並安裝我們下載的Homestead
盒子。
完成後,你會發現自己的用戶文件夾裏多出了一個名為.vagrant.d
的文件夾
C:\Users\MyUserName\vagrant.d
接下來,非常重要的一個步驟:
我們打開這個文件夾,找到以下路徑(請將MyUserName
替換成你的系統用戶名):
C:\Users\MyUserName\vagrant.d\boxes\laravel-VAGRANTSLASH-homestead
將文件夾中名為0
的文件夾改名為我們下載的Homestead
的版本號,即6.1.0
。
然後在該文件夾下新建一個叫metadata_url
的空白文件 (註意不要有任何文件名後綴,如果你的系統設置了自動隱藏後綴名,請將隱藏去掉,確認文件無任何後綴):
文件的內容裏,添加以下鏈接:
https://app.vagrantup.com/laravel/boxes/homestead
註意,不要留任何空白字符,保存文件。
完成之後,我們就可以開始配置Homestead
了。
在Git Bash
裏輸入
$ git clone https://github.com/laravel/homestead.git ~/homestead
該命令會將Github
上Homestead
項目配置克隆至本地~/homestead
文件夾中。
進入該文件夾,我們就可以開始創建Homestead
配置文件了:
$ cd ~/homestead
# 創建Homestead初始配置
$ bash init.sh
然後在~/homestead
文件夾中,我們可以看到多出了一個名為Homestead.yaml
的文件。使用notepad++
打開它,可以看到內容如下:
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
- map: ~/Code
to: /home/vagrant/Code
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
我們來逐條解讀每一段配置的意思。
首先我們看到
ip: "192.168.10.10"
這個ip
是我們訪問項目時指向的虛擬機地址。
註意,如果你的配置文件地址跟我的不一樣,不要隨意修改,在Linux
系統下,這個ip
會是192.168.10.10
,而Windows
系統下,你的配置中一般會是192.168.1.10
。而後面修改hosts
文件時,請根據你的yaml
文件中的ip
地址做出相應修改。(具體配置請往下看)
接下來我們看到這段配置:
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
這段配置中authorize
後面的文件是用來ssh
進入虛擬機的公鑰,而keys
後面的文件是我們的私鑰。
所以我們需要建立用於ssh
的公鑰和私鑰且填入相應配置中。
首先我們需要創建~/.ssh
文件夾:
$ mkdir ~/.ssh
$ cd ~/.ssh
接下來,我們運行生成密鑰的命令:
$ ssh-keygen -t rsa
如圖,系統會詢問我們將私鑰保存在什麽位置,這裏由於我們已經處於~/.ssh
文件夾下(上一步cd
操作),我們可以直接輸入我們需要命名的文件名。
提示:圖片中我用的文件夾名為example
,純粹是用來示例的,請大家將秘鑰按上面敘述的步驟放至~/.ssh
文件夾,並將文件名稱命名為id_rsa
。這裏其實名稱可以自己取,但是我們在演示中直接保留默認文件名(該步驟不輸入任何文字直接回車即可)。
上一步完成後,我們看到系統提示我們輸入密碼。這裏我們可以直接回車密碼留空,因為我們在本地開發,可以省去密碼這個步驟。
該步驟完成後,我們會在~/.ssh
目錄下看到以下兩個文件:
id_rsa.pub
id_rsa
這就是第一段配置中相應的兩個文件。所以我們保留默認配置即可:
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
接下來我們看到這兩段配置
folders:
- map: ~/Code
to: /home/vagrant/Code
sites:
- map: homestead.app
to: /home/vagrant/Code/laravel/public
第一段配置
folders
中,map
後指定的文件夾(即~/Code
)將被映射到虛擬機系統中to
後指定的路徑,即/home/vagrant/Code
。
這和我們常見到的和虛擬機系統(guest system
)和宿主系統(host system
)文件夾共享機制類似,由於guest system
不能直接訪問host system
中的文件夾(安全隱患),我們需要把本機的~/Code
文件夾分享至虛擬機中,這樣一來我們在可以在虛擬機系統中訪問到我們的項目文件,並且在~/Code
中所進行的修改會實時同步在虛擬機系統對應的文件中。
第二段配置
sites
中,定義了瀏覽器地址homestead.app
指向虛擬機系統中/home/vagrant/Code/laravel/public
這個文件夾,即Laravel
項目的public
文件夾。這樣在瀏覽器中輸入homestead.app
,我們就可以直接看到項目主頁了。
值得註意的是,由於
.app
域名的開放以及新的限制,不推薦使用.app
及.dev
作為項目訪問地址後綴,可能會出現比較匪夷所思的錯誤。
以上的文件夾及映射是都是可以根據用戶喜好更改的,比如我喜歡把我的開發文件夾叫做webdev
,在裏面我新建了一個叫phantastic.test
的項目,那麽以上的配置,我就可以做出相應修改:
folders:
- map: ~/webdev
to: /var/www
sites:
- map: phantastic.test
to: /var/www/phantastic/public
這裏我將~/webdev
文件夾映射為虛擬機內的/var/www
文件夾,這樣一來,我就可以在虛擬機裏/var/www
路徑下看到host
系統中~/webdev
文件夾下的所有文件。
這一步完成後,我們還有一個非常重要的步驟。
在hosts
文件中添加一行:
192.168.10.10 phantastic.test
註意:請根據你yaml
文件中的ip
進行相應的修改,例如Windows
環境下,通常為192.168.1.10
。
Windows
的hosts
文件在以下路徑:
C:\Windows\System32\drivers\etc\
用notepad++
打開即可:
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a ‘#‘ symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
# 添加上這一行,將phantastic.test替換成自己的項目名稱
192.168.10.10 phantastic.test
這裏我們需要將項目地址解析到對應的虛擬機IP
(192.168.10.10)。
然後我們以管理員權限保存hosts
文件。
接下來我們來看最後一段配置:
databases:
- homestead
這段配置指定了我們虛擬機中MySQL
的數據庫名,我們每新添加一個數據庫名字,那麽Homestead
將會自動創建一個該名字的數據庫來供我們操作。
在這裏,我添加了兩個新的數據庫,並刪除了原始配置中的homestead
數據庫:
databases:
- phantastic
- eagle
註意:配置文件中不要使用
tab
來留空,否則可能會報錯(可以用空格對齊)。
虛擬機環境下默認的
MySQL
服務器管理員用戶名為homestead
,密碼是secret
。推薦使用phpmyadmin
或adminer.php
來進行數據庫管理,當然如果你hardcore
,直接mysql -u homestead -p
也可以。
另外每個項目如果需要更改項目默認使用的數據庫等配置,可以在創建
Laravel
項目後配置根目錄下的.env
文件
詳情請查看 Laravel 5+ .env 環境配置文件詳解
至此,Homestead
就配置完成了。我們將Homestead.yaml
保存,然後嘗試啟動虛擬機!(激動嗎;)?)
以管理員的身份打開Git Bash
,輸入
$ cd ~/homestead
$ vagrant up
我們會看到,Vagrant
已經順利運行了(Windows
環境下vagrant up
不需要加sudo
)!
接下來,要進入Homestead
,我們輸入
$ vagrant ssh
進入虛擬機環境後:
# cd 進入我們共享的文件夾 (請根據你配置中的映射目錄來輸入相應文件夾)
$ cd /var/www
# 創建一個新的laravel項目
$ laravel new eagles_new_project
現在我們就可以開始Laravel
的開發了!
註意:如果你vagrant up
後,卡在ssh
命令,很久後顯示超時,那麽請重啟系統進入BIOS
,將Intel
的VT-x
功能開啟並保存再繼續即可。
From:https://blog.sbot.io/articles/1
Windows 7/8/10 系統下Laravel框架的開發環境安裝及部署詳解(Vagrant + Homestead)