Laravel Homestead 的安裝和使用

Homestead 能夠運行在 Windows、Mac 以及 Linux 等主流操做系統上,預裝的軟件和工具列表以下:php

  • Ubuntu 16.04
  • Git
  • PHP 7.1
  • Nginx
  • MySQL
  • MariaDB
  • SQLite 3
  • Postgres
  • Composer
  • Node(With Yarn, Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Mailhog
  • ngrok

注:若是你使用的是 Windows,須要開啓系統的硬件虛擬化(VT-x),這一般能夠經過 BIOS 來開啓。若是你是在 UEFI 系統上使用 Hyper-V,則須要關閉 Hyper-V 以即可以訪問 VT-x。html

準備

先下載安裝VirtualBoxVagrantnode

安裝及配置

如下命令本人使用的是git bashlaravel

一、安裝

使用Vagrant安裝Homestead盒子

命令:git

vagrant box add laravel/homestead

複製代碼

這裏寫圖片描述
安裝過程須要較長時間(取決於你的網絡鏈接速度),而且容易網絡中斷。 推薦: 複製上面圖片中的下載地址並用迅雷下載( 下載以後的名字多是一串亂碼) 經過這種方式下載的話須要手動將其添加到 Vagrant:

vagrant box list
vagrant box remove laravel/homestead  --all

vagrant box add laravel/homestead 下載文件的路徑
複製代碼

運行上述命令有可能報錯:github

Check your Homestead.yaml file, the path to your private key does not exist.
複製代碼

解決辦法以下:web

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add -K ~/.ssh/id_rsa

複製代碼

再次運行上述命令便可添加成功數據庫

添加成功提示apache

==> box: Successfully added box 'laravel/homestead' (v0) for 'virtualbox'!

複製代碼

安裝 Homestead

你能夠經過克隆倉庫代碼來實現 Homestead 安裝。將倉庫克隆到用戶目錄下的 Homestead 目錄,這樣 Homestead 盒子就能夠做爲全部其餘 Laravel 項目的主機:vim

cd ~
git clone https://github.com/laravel/homestead.git Homestead

複製代碼

克隆完成後,你須要檢查 Homestead 的版本標籤,由於 master 分支不會老是穩定版本,你能夠在 GitHub Release Page 查找到最新穩定版本而後在本地將其檢出:

cd Homestead

// Clone the desired release...
git checkout v6.1.0

複製代碼

接下來,在 Homestead 目錄下運行 bash init.sh 命令來建立 Homestead.yaml 配置文件,生成的 Homestead.yaml 配置文件文件位於當前 Homestead 目錄:

// Mac/Linux... windows下使用git bash也使用下面的命令
bash init.sh

// Windows...
init.bat

複製代碼

二、配置 Homestead

這裏寫圖片描述

設置 Provider

Homestead.yaml 文件中的 provider 鍵表示使用哪一個 Vagrant 提供者:virtualbox、vmware_fushion、 vmware_workstation 或 parallels,你能夠將其設置爲本身喜歡的提供者,固然對大部分人來講也沒得選:

provider: virtualbox

複製代碼

配置共享文件夾

Homestead.yaml 文件中的 folders 屬性列出了全部主機和 Homestead 虛擬機共享的文件夾,一旦這些目錄中的文件有了修改,將會在本地和 Homestead 虛擬機之間保持同步,若是有須要的話,你能夠配置多個共享文件夾:

folders:
    - map: ~/Development
      to: /home/vagrant/Code

複製代碼

若是要開啓 NFS,只需簡單添加一個標識到同步文件夾配置:

folders:
    - map: ~/Development
      to: /home/vagrant/Code
      type: "nfs"

複製代碼

注:使用 NFS 的話,須要考慮安裝 vagrant-bindfs 插件。該插件可用於在 Homestead 盒子中爲文件和目錄維護正確的用戶/組權限。

你還能夠經過 options 傳遞其餘 Vagrant 支持的同步文件夾選項:

folders:
    - map: ~/Development
      to: /home/vagrant/Code
      type: "rsync"
      options:
          rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
          rsync__exclude: ["node_modules"]

複製代碼

配置 Nginx 站點

對 Nginx 不熟?不要緊!經過 sites 屬性你能夠方便地將「域名」映射到 Homestead 虛擬機的指定目錄,Homestead.yaml 中默認已經配置了一個示例站點。和共享文件夾同樣,你能夠配置多個站點:

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
    - map: firm.cn
      to: /home/vagrant/laravelapp/firm/public

複製代碼

若是你是在 Homestead 盒子啓動以後進行了上述修改,須要運行 vagrant reload –provision 更新虛擬機上的 Nginx 配置。

Hosts文件

不要忘記把 Nginx 站點配置中的域名添加到本地機器上的 hosts 文件中,該文件會將對本地域名的請求重定向到 Homestead 虛擬機,在 Mac 或 Linux上,該文件位於 /etc/hosts,在 Windows 上,位於 C:\Windows\System32\drivers\etc\hosts,添加方式以下:

192.168.10.10 firm.cn

複製代碼

確保 IP 地址和你的 Homestead.yaml 文件中列出的一致,一旦你將域名添加到 hosts 文件,就能夠在瀏覽器中經過該域名訪問站點了:

http://firm.cn

複製代碼

注:在真正能夠訪問以前以前還須要經過 Vagrant 啓動虛擬機上的 Homestead 盒子。

啓動 Vagrant Box

配置好 Homestead.yaml 文件後,在 Homestead 目錄下運行 vagrant up 命令,Vagrant 將會啓動虛擬機並自動配置共享文件夾以及 Nginx 站點,初次啓動須要花費一點時間進行初始化:

vagrant up

複製代碼

報錯1:

藍屏重啓

複製代碼

沒有關閉Hyper-V和VT-x衝突

控制面板→程序→啓用或關閉Windows功能 將Hyper-V以及子項所有去掉勾選就好了。肯定後記得從新啓動

複製代碼

報錯2:

Check your Homestead.yaml file, the path to your private key does not exist.

複製代碼

運行命令:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add -k ~/.ssh/id_rsa

複製代碼

報錯3:

Failed to connect to vagrantcloud-files-production.s3.amazonaws.com port 443: Timed out

複製代碼

Vagrant沒有發現 laravel/homestead 這個Box虛擬機,這是由於版本的問題

進入Homestead目錄下
vim scripts/homestead.rb
修改:config.vm.box_version = settings["version"] ||= ">= 0.4.0" 
爲 config.vm.box_version = settings["version"] ||= ">= 0"

複製代碼

報錯4:

Path: C:/Users/Administrator/.vagrant.d/data/machine-index/index

複製代碼

進入上面提示的目錄刪除 index 和index.lock

啓動以後,就能夠在瀏覽器中訪問配置的站點 firm.cn

No input file specified.  說明配置成功

複製代碼

要登陸到該虛擬機,使用 vagrant ssh 命令;關閉該虛擬機,可使用 vagrant halt 命令;銷燬該虛擬機,可使用 vagrant destroy –force 命令。

可選操做

爲指定項目安裝 Homestead

全局安裝 Homestead 將會使每一個項目共享同一個 Homestead 盒子,你還能夠爲每一個項目單獨安裝 Homestead,這樣就會在該項目下建立 Vagrantfile,容許其餘人在該項目中執行 vagrant up 命令,在指定項目根目錄下使用 Composer 執行安裝命令以下:

composer require laravel/homestead --dev

複製代碼

這樣就在項目中安裝了 Homestead。Homestead 安裝完成後,使用 make 命令生成 Vagrantfile 和 Homestead.yaml 文件,make 命令將會自動配置 Homestead.yaml 中的 sites 和 folders 屬性。該命令執行方式以下:

Mac/Linux:

php vendor/bin/homestead make

複製代碼

Windows:

vendor\bin\homestead make
或者
vendor\\bin\\homestead make

複製代碼

接下來,在終端中運行 vagrant up 命令而後在瀏覽器中經過 homestead.app 訪問站點。不要忘記在 /etc/hosts 文件中添加域名 homestead.app(已配置的話忽略)。

平常使用

全局訪問 Homestead

要想在文件系統的任意路徑都可以運行 vagrant up 啓動 Homestead 虛擬機,在 Mac/Linux 系統中,能夠添加 Bash 函數到 ~/.bash_profile;在 Windows 系統上,須要添加「批處理」文件到 PATH。這些腳本容許你在系統的任意位置運行 Vagrant 命令,而且把命令執行位置指向 Homestead 的安裝路徑。

Mac/Linux

function homestead() {
    ( cd ~/Homestead && vagrant $* )
}

複製代碼

確保將該函數中的 ~/Homestead 路徑調整爲指向實際的 Homestead 安裝路徑。這樣你就能夠在系統的任意位置運行 homestead up 或 homestead ssh 來啓動/登陸虛擬機

補充知識點:/etc/profile 和 ~/.bash_profile 均可以用來設置系統 PATH,不一樣之處在於前者是給系統超級用戶使用,後者是給普通登陸用戶使用的,此外要讓 ~/.bash_profile 修改後生效,有兩種方法,一種是退出系統從新登陸,一種是使用 source ~/.bash_profile 命令。

Windows

在系統的任意位置建立一個批處理文件 homestead.bat:

@echo off

set cwd=%cd%
set homesteadVagrant=C:\Homestead

cd /d %homesteadVagrant% && vagrant %*
cd /d %cwd%

set cwd=
set homesteadVagrant=

複製代碼

你須要將腳本中實例路徑 C:\Homestead 調整爲 Homestead 實際安裝路徑。建立文件以後,添加文件路徑到 PATH,這樣你就能夠在系統的任意位置運行 homestead up 或 homestead ssh 命令了。

經過 SSH 鏈接

你能夠在 Homestead 目錄下經過運行 vagrant ssh 以 SSH 方式鏈接到虛擬機。若是你設置了所有訪問 Homestead,也能夠在任意路徑下經過 homestead ssh 登陸到虛擬機。

若是你須要以更簡捷的方式鏈接到 Homestead,能夠爲主機添加一個別名來快速鏈接到 Homestead 盒子,建立完別名後,可使用 vm 命令從任何地方以 SSH 方式鏈接到 Homestead 虛擬機:

alias vm="ssh vagrant@127.0.0.1 -p 2222"

複製代碼

鏈接到數據庫

Homestead 默認已經在虛擬機中爲 MySQL 和 Postgres 數據庫作好了配置,更方便的是,這些配置值與 Laravel 的 .env 中默認提供的配置一致。

想要經過本地的 Navicat 或 Sequel Pro 鏈接到 Homestead 上的 MySQL 或 Postgres 數據庫,能夠經過新建鏈接來實現,主機 IP 都是 127.0.0.1,對於 MySQL 而言,端口號是 33060,對 Postgres 而言,端口號是 54320,用戶名/密碼是 homestead/secret

這裏寫圖片描述

站點類型

Homestead 支持多種框架,因此即便你沒有使用 Laravel 的話,也可使用 Homestead,例如,咱們能夠經過 symfony2 站點類型輕鬆添加一個 Symfony 應用:

sites:
    - map: symfony2.app
      to: /home/vagrant/Code/Symfony/web
      type: symfony2

複製代碼

目前支持的站點類型包括 apache、laravel、proxy、silverstripe、statamic、symfony2 和 symfony4。

配置 Cron 調度任務

Laravel 提供了很方便的方式來調度 Cron 任務:只需每分鐘調度運行一次 Artisan 命令 schedule:run 便可。schedule:run 會檢查定義在 App\Console\Kernel 類中定義的調度任務並判斷運行哪些任務。

若是想要爲某個 Homestead 站點運行 schedule:run 命令,須要在定義站點時設置 schedule 爲 true:

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
      schedule: true

複製代碼

該站點的 Cron 任務會被定義在虛擬機的 /etc/cron.d 目錄下:

這裏寫圖片描述

分享你的環境

有時候你可能但願和同事或客戶分享本身當前的工做進度或成果 登陸虛擬機運行命令

share firm.cn  //配置的站點

複製代碼

運行完該命令以後,你就能夠看到一個 Ngrok 界面出現,其中包含活動日誌和分享站點所需的公開訪問 URL:

這裏寫圖片描述

能夠看到個人分享 URL 是 95920d84.ngrok.io/ 以及 95920d84.ngrok.io/,你能夠經過這兩個域名在任意聯網機器上訪問個人 Homestead 站點:

這裏寫圖片描述

若是你想要指定一個自定義的區域,子域名或者其餘 Ngrok 運行時選項,能夠將它們添加到 share 命令:

share homestead.app -region=us -subdomain=laravel

複製代碼

目前自定義域名只有付費用戶纔可使用,因此 subdomain 會提示不可用。

注:記住兩個點,一個是 Vagrant 並無什麼特別的安全防範措施,另外一個是當你運行 share 命令的時候,你實際上是在將本身的虛擬機曝光到互聯網上。因此,當你要分享本身的站點以前,先想一想安全隱患,並將其規避掉。


參考連接

相關文章
相關標籤/搜索