Laravel 開發環境使用 Homestead

   2016-12-23 0
核心提示:Laravel Homestead Laravel 為了讓開發者有更佳的開發環境,使用了 Vagrant 來打造 Homestead,一個整合了開發 Laravel 所需服務的 Vagrant Box。 Vagrant 簡單介紹 Vagrant 是一個建置開發環境的工具,可以透過簡單的配置,就能讓開發環境重覆使用及轉移。個
Laravel 開發環境使用 Homestead

Laravel Homestead

Laravel 為了讓開發者有更佳的開發環境,使用了 Vagrant 來打造 Homestead,一個整合了開發 Laravel 所需服務的 Vagrant Box。

Vagrant 簡單介紹

Vagrant 是一個建置開發環境的工具,可以透過簡單的配置,就能讓開發環境重覆使用及轉移。個人使用,可以快速建置開發環境,免去不斷的設定;團隊使用,可以讓開發環境一致,避免因開發環境不同而產生建置上的不同,導致執行應用程式時發生錯誤。

Vagrant 是透過配置檔來管理虛擬機器 (VM) 的工具,一個開發環境其實是一個預先安裝好作業系統並且在其中安裝好其他開發環境所需要的服務及工具,例如伺服器、資料庫等等的虛擬機器(Virtual Machine),在 Vagrant 中被稱為 Box。

Vagrant 支援的 VM 平台有 3 個,免費開源的 VirtualBox 及要收費的 VMwareParallels 。Vagrant 可以透過命令工具,管理及控制 Box(VM) 的下載及啟動等等動作。

虛擬化技術簡單介紹

虛擬化技術 是將電腦的硬體資源抽象化,重新調整分配為多個可獨立執行的環境,例如虛擬機器(VM)的 VirtualBox 就是在實際的作業系統上,再虛擬化一個獨立的作業系統。另外一個目前比較熱門的 Docker 則是在作業系統上對應用程式做虛擬化,將應用程式放在獨立的容器中執行。直接看下圖比較表: Laravel 開發環境使用 Homestead

(圖片來源: https://www.docker.com/what-docker )

Homestead 所使用的 Vagrant Box 就是左邊的 VM 形式,我們可以裝好幾個不同版本的 Homestead,或自己建立一個 Box,這些 Box 可能會有些不同的內容,例如一個用 Apache,另一個用 Nginx,這樣我就能測試在不同伺服器上執行的情況。

但是你會發現,我僅僅只是換了一個伺服器,或可能只是版本不同,我就必須建一個容量頗大的 VM(Box),有點不符成本,這時候就可以改用 Docker。

Docker 可以將每個應用程式,例如一個 Apache 或 Nginx 伺服器各自建立一個 Docker 容器,MySQL 也是一個 Docker 容器,ubuntu 也可以是容器,或是組合好幾個服務為一個容器,這樣當你要抽換某一個服務時可以很容易就更換,而且 Docker 不只可以用在開發環境,也可以用在實際運作的機器上。

當我改用 Homestead 後,就少了好多麻煩事,也不用在本機上裝有的沒的服務,連 MAMP 這種套裝軟體都不用開了,再說 Homestead 可是 Laravel 的老爸做的,當然要用啦~

我好奇查了一下有沒有 Docker for Laravel 的工具,還真的有, laradock / laradock 是一套專門給 PHP 開發環境的開發者用的,預設以 Laravel 為主,有興趣可以玩玩看。

另外一套 laraedit / laraedit-docker 是 Docker 版的 Laravel Homestead,在 Laravel News 有影片介紹。

Homestead 介紹

首先,你要先知道 Homestead 其實是 Vagrant 的一個 Box,Homestead 只是這個 Box 的名稱,所以你在操作 Homestead 時,其實是在使用 Vagrant 工具所提供的服務。

讓我們來看看 最新版的 Homestead 內建哪些應用程式:

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

前置安裝

在使用 Homestead 之前必須先把必要的軟體安裝好。

VirtualBox

實際上 Vagrant 只是透過指令來管理一個個用 VirtualBox 建立的虛擬機器(VM)。

到官網下載最新版本的 VirtualBox 執行安裝。

Vagrant

到官網下載最新版本的 Vagrant 執行安裝。

如果你想安裝其他的別人已經建置好的 Box,可以在 Discover Vagrant Boxes 頁面尋找,你可以看到 laravel/homestead ,目前是 1.0.1 版,這就是 Laravel 老爸建立的 Box,在之後安裝使用的就是這個。

Vagrant 安裝好之後,可以在命令列輸入 vagrant -v 如果有顯示 Vagrant 的版本號,就是安裝成功了。

日後,假如你修改了官方版本的內容,或自己建立了一個 Box,想要將這個開發環境(Box)拿給別人用,或在別台電腦上執行,你可以研究一下 Package 指令 ,它可以讓你將這個 Box 打包帶走。

安裝 Homestead

終於來到正題了。不過,這裡要先說明一下什麼是「安裝 Homestead」,這個部份其實是在操作 Vagrant。

使用 Vagrant

使用 Vagrant 的流程大概是,先加入 box ,接著設定 Vagrantfile ,這樣就算完成了,之後當你使用指令啟動 (up) 時,它會從 vagrant 的 boxes 目錄找到指定的 box 並利用它建立(假如還未建立的話)一個虛擬機器(box => VM,你可以去查看 VirtualBox VMs 目錄,就可以看被建立的虛擬機器)並同時啟動它。

所以這裡所謂的安裝,其實是安裝 box 並設定 Vagrantfile 及 配置檔。而官方提供一個 Homestead 工具,已經幫我們處理好 box 及 Vagrantfile,我們只需要設定配置檔即可。

安裝 Homestead 工具的方式有兩種,全域安裝是建立一個 Homestead Vagrantfile、Homestead.yaml 及 VM,所有的專案都共用這些東西。

另一個依專案安裝的 Homestead 工具,則是將 Vagrantfile 及 Homestead.yaml 建立在該專案之中,跟著專案跑。

下載 Homestead Box

在命令列執行:

vagrant box add laravel/homestead
這個動作會把前面我們找到的 laravel/homestead 這個 box 下載到 boxes 目錄中(Mac/LInux: ~/.vagrant.d/boxes , Windows: C:/Users/USERNAME/.vagrant.d/boxes

),依你的網路速度,可能需要幾分鐘的時間,要等待一下。

全域安裝

下載 Homestead

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

先切換到根目錄,然後 clone 一份 homestead vagrant 工具,這行 git 指令會同時建立 Homestead 目錄,並將 clone 的內容放在裡面。

接著進入 Homestead 目錄並執行初始化:

// Mac 或 Linux
bash init.sh

// Windows
init.bat

完成後,它幫我們做了哪些事?首先它會在家目錄下建立一個 ~/.homestead (Mac)的隱藏目錄,其中有三個檔案:Homestead.yaml 是配置檔,等一下就是要在這裡做設定;after.sh 會在啟動 Homestead 執行,如果你有額外要執行的指令,可以寫在這裡,目前用不到;aliases 放了一些指令別名,方便你快速操作。

到這邊已經差不多快完成了。

配置 Homestead

1. 設定虛擬機器

現在把 ~/.homestead/Homestead.yaml 用文字編輯器打開,第一行看到的應該是

provider: virtualbox

表示我們是使用 VirtualBox 來執行。你可以加入其他設定,像是

name: Homestead  # 設定 VM 的名稱
ip: "192.168.10.10"  # 指定 IP
memory: 512  # 指定記憶體大小
cpus: 1   # 指定 CPU 數量

註:# 之後為註解。

這些設定等同於你自己打開 VirtualBox 軟體去對 VM 做設定是一樣的,透過配置檔可以方便管理及修改。

2. 設定共享目錄

接下來是目錄的對應,這裡會把你的電腦中的目錄,對應到 VM 中的目錄,這樣你可以 在本機上寫程式,然後在 VM 中執行

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

意思是「將本機上的 ~/Code 目錄對應到虛擬機器上的 /home/vagrant/Code 目錄」

註:在這裡請先在本機上的 Code 目錄下建立一個 Laravel 網站,之後要來執行它。

3. 設定伺服器的網站

Homestead 是使用 Nginx 做為網頁伺服器。這時候 Homestead 的好處就出現了,假如你是初學者或不熟 Nginx 伺服器,你暫時不必費心去瞭解怎麼安裝及設定,你只要寫個配置檔就好了,如下:

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

意思是「將 homestead.app 這個網址,對應到 /home/vagrant/Code/Laravel/public 這個目錄」

這裡要注意的是,假如你在執行 Homestead VM 之後,又有更動 sites 裡的設定的話,記得要執行

vagrant reload --provision

這個指令會更新虛擬機器中的 Nginx 設定檔。

4. 修改 Hosts 檔案

每台電腦都有一個內部使用的 Hosts 檔案,功能如同 DNS,只是它只能在本機上運作。我們要修改它來使用我們自訂的網址 「homestead.app」。

因為這個檔案有安全性的問題,所以要使用管理者帳號來開啟,Mac 或 Linux 放在 /etc/hosts ,Windows 放在 C:\Windows\System32\drivers\etc\hosts

用文字編輯器打開後,在最下面加入一行

192.168.10.10  homestead.app

存檔後離開。

記得要在 Homestead.yaml 檔中加入相同的 ip 配置設定,請參考前面 設定虛擬機器 的內容。

這樣當你在本機瀏覽器上輸入 homestead.app 網址,它會受 Hosts 檔的影響,連入 192.168.10.10 這個內部 IP,而這個 IP 指向的是 Homestead 虛擬機器,這個虛擬機器中的 Nginx 接到請求後,將執行對應的 sites 中的目錄中的 Laravel 程式,並回傳結果給瀏覽器,你就可以在本機瀏覽器上看到在虛擬機器運作但存放於本機的 Laravel 程式的回應結果。

啟動 Vagrant Box

終於完成所有手續,準備按下紅色按鈕。

打開命令列,切換到一開始 clone 的 Homestead 目錄,執行

vagrant up

Vagrant 會啟動虛擬機器(如果還未被建立,會取得 Box 來建立)並且依 Homestead.yaml 中的配置內容做設定。

這裡要注意的事,當你執行 up 指令時,vagrant 會去取得該目錄中的 Vagrantfile,並依照它裡面所寫好的程式碼(它其實 Ruby 程式)來執行,這也就是你必須先切換到 Homestead 目錄才能執行指令的原因,而 Vagrantfile 你無須去更動則是因為官方都把內容寫好了。

而為了方便修改配置檔,因此將設定另外寫在 Homestead.yaml 中,Homestead 的 Vagrantfile 會去讀取它來做設定。

好了,如果沒有錯誤的話,執行完你會發現什麼事都沒發生,你可以先用 ping 192.168.10.10 確定連線是否正常,如果 OK 表示虛擬機器已經在運作了,然後開啟瀏覽器輸入 homestead.app 就可以看到 Laravel 網站了。(其實你也可以打開 VirtualBox,會看到你的 VM 是啟動狀態)

關閉虛擬機器

注意!當你要關閉電腦前或不使用虛擬機器了,記得把它關掉,因為看不到東西,很容易忘記把它關掉,VM 有可能會損壞。關機指令:

vagrant halt

刪除虛擬機器

如果你要把這個虛擬機器刪除:

vagrant destroy --force

當你下次執行 vagrant up 時,它會重新建立一個新的。這裡是刪除 VM 不是 Box,所以你如果把它玩壞掉了,刪掉它重新 up 就好了。如果是要刪除 box 請用 vagrant box remove 指令。

針對專案安裝

現在你知道,所謂的安裝只不過是下載要執行 Homestead Vagrantfile 相關的檔案。

這個方式可以讓你的 Vagrantfile 跟著你的專案被打包,方便在其他地方或其他人直接使用。

安裝方式可以使用 composer 指令:

composer require laravel/homestead --dev

這樣會將工具安裝在 Laravel 專案目錄下的 vendor/laravel/homestead 目錄中,裡面的內容和全域安裝是差不多的,只是 Vagrantfile 只會抓取專案目錄下的配置檔。

這時候,專案根目錄中還沒有 Vagrant 相關的檔案,我們要執行 Homestead 工具來幫我們建立,先切換到本機中 Laravel 專案的根目錄,然後執行 make:

// Mac,Linux
php vendor/bin/homestead make

// Windows
vendor\\bin\\homestead make

現在你會看到專案根目錄多了 Vagrantfile 及 Homestead.yaml,你可以依照前面的說明,設定配置檔及 Hosts 檔,然後就能啟動 vagrant up 它了。

日常使用

全域存取 Homestead

當你要使用指令來啟動 Homestead VM 的時候,你必須先切換到先前 clone 下來的 Homestead 目錄,才能執行 Vagrant 指令。因為很常用,如果每天都要做這個切換目錄的動作,工作實在太沒效率。

你可以加入一段 Bash 函式到你的 Bash profile 檔中,如此就可以讓你在任何目錄中執行 Vagrant 指令。

這個函式的內容其實是將你輸入的 Vagrant 指令指向 Homestead 目錄:

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

將以上程式碼加入(Mac/Linux)使用者家目錄底下的 .bash_profile.bash_aliases 中,這裡記得要將 ~/Homestead 換成你自己的 Homestead 目錄的路徑。儲存後執行 source .bash_profilesource .bash_aliases 重新讀取設定內容。

之後就可以使用 homestead up 指令來啟用 Homestead VM 了。

你可以修改 homestead() 這個函式名稱,例如改成 home(),這樣你的指令就變成 home up ,這個函式等同於切換到 Homestead 目錄後執行 vagrant up

透過 SSH 連線到 Homestead 虛擬機器

通常最常用到的指令就是

  • 開機:vagrant up
  • 關機:vagrant halt

因為你是在本機上寫程式,所以通常不必連線到 VM 上,但有時候你可能需要在 VM 上做一些事情,你可以透過 vagrant ssh 連線到 VM 上。

連線到資料庫

假如你要在本機上使用 Sequel Pro 這類的客戶端軟體,來連線到 Homestead VM 中的 MySQL 或 Postgres 資料庫,你必須設定以下的連線資料:

  • Host:127.0.0.1
  • port: 33060(MySQL) 或 54320(Postgres)
  • Username: homestead
  • Password: secret

這裡要注意的是,33060 和 54320 這兩個 port 是非標準的 port ,只有當你從本機(Host)連線到虛擬機器(VM)時才能使用。如果在 VM 中,MySQL 的 port 是預設的 3306 ,Postgres 則是 5432。

增加新的網站

這裡是指全域安裝的情況下。當你執行 Homestead VM 時,你可以透過修改配置檔(Homestead.yaml)來增加網站。用文字編輯器打開 ~/.homestead/Homestead.yaml 檔,在 sites: 區段內增加一對 - map:, to: 即可,可以參考前面 設定伺服器的網站 的說明。

當你增加了新網站後,必須在命令列執行

vagrant reload --provision

記得要在 Homestead 目錄下執行指令。

Port 的重導向

以下的 Port 預設會重導向到 Homestead VM 環境中:

  • SSH: 2222 → 22
  • HTTP: 8000 → 80
  • HTTPS: 44300 → 443
  • MySQL: 33060 → 3306
  • Postgres: 54320 → 5432

如果你有額外想重導向的 Port ,可以設定 Homestead.yaml,例如:

ports:
 - send: 93000
   to: 9300
 - send: 7777
   to: 777
   protocol: udp

更新 Homestead

1. 更新 Box

使用 Vagrant 指令來更新 Box:

vagrant box update

2. 更新 Homestead 原始碼

假如你是用 clone 的方式全域安裝,只要直接 pull 原始碼即可:

git pull origin master

記得先切換到先前 clone 的 Homestead 目錄。

如果是透過 composer 針對專案安裝,只要直接執行:

composer update laravel/homestead

總結一下使用流程

安裝的部份:

  1. 安裝 VirtualBox
  2. 安裝 Vagrant
  3. 下載 Box:
    vagrant box add laravel/homestead
  4. 下載 Homestead:
    cd ~
    git clone https://github.com/laravel/homestead.git Homestead
  5. 初始化:
    // Mac 或 Linux
    bash init.sh
    
    // Windows
    init.bat
  6. 設定配置檔 Homestead.yaml
  7. 修改 Hosts 檔

使用的部份:

  1. 啟動:
    vagrant up
  2. 在本機寫程式
  3. 在本機瀏覽器觀看網頁執行結果
  4. 關機:
    vagrant halt

參考資料

 
标签: Laravel Vagrant
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • nginx 各类网站设置 (laravel , thinkphp , nod
    基础部分设置[root@centos ~]# vim /opt/nginx/conf/nginx.confuser www www;worker_processes auto;pid logs/nginx.pid;worker_rlimit_nofile 100000;events {use epoll;multi_accept on;worker_connections 65535 ;}http {include mime.types;default_type
    02-09
  • PHP trait 特性在 Laravel 中的使用个人心得
    trait 是在PHP5.4中为了方便代码复用的一种实现方式,但目前我在看的的PHP项目中较少看的有程序员去主动使用这个实现方式,在laravel中有很多 trait 的使用,关于trait 在 laravel 的使用请参看 Laravel 在哪些地方用了 trait?我曾在 Laravel 中大型项目面向
    02-09
  • 让我们用 laravel-mix 为 TypeScript 和 Sass
    介绍前端编译TypeScript、Sass、模板引擎等时经常用到Gulp和webpack。这是我个人的印象,但它们似乎都难以管理,因为它们的描述往往复杂而冗长。我不想积极进行,因为我要担心加载器的顺序并且有很多配置选项,我必须花时间去了解它们。我想推荐那里laravel
  • PHP Laravel软删除的实现方法介绍
    用Laravel 自带的 Eloquent ORM 来实现软删除。首先在数据迁移文件中添加删除时间字段./database/migrations/2014_10_12_000000_create_users_table.php?phpuse Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illu
  • Laravel中如何使用PHP的装饰器模式 php laravel
    本文小编为大家详细介绍“Laravel中如何使用PHP的装饰器模式”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel中如何使用PHP的装饰器模式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。装饰器模式定义:它可以帮助您在
    02-08 laravelphp
  • PHP laravel使用自定义邮件类实现发送邮件
    PHP laravel使用自定义邮件类实现发送邮件
    当登录邮箱为腾讯企业邮箱的时候。Phpmailer发送邮件就不好用了,具体哪里不好用,我没真没找到。但是,邮件得发啊,怎么办呢?我这里搞了一个自定义的发送邮件类,腾讯企业邮箱也可用。但是,邮件发送失败,不会返回报错信息,这个可能是有点坑。源码如下:?
  • 详解PHP laravel中的加密与解密函数
    目录一:简介二:配置三:使用加密/解密1:加密2:不使用序列化进行加密3:解密Laravel为我们提供了完整的加密方法及加密模式。我之前一般在加密的时候使用的是我自己写的加密函数,但是这个玩意,有的位置还是不太使用,当然,破解的话,基本上也是不可能的
  • PHP laravel缓存cache机制详解
    目录一、访问多个缓存存储二、从缓存中获取数据1.获取数据并设置默认值2.检查缓存项是否存在3.数值增加/减少4.获取存储5.获取删除三、缓存中存储数据1.获取存储数据2.缓存不存在时存储数据3.永久存储数据四、从缓存中移除数据Laravel中的cache为我们提供了三
  • PHP laravel实现导出PDF功能
    PHP laravel实现导出PDF功能
    目录一、laravel-tcpdf二、tcpdf三、TCPDF解决保存中文文件名的方法补充一、laravel-tcpdf导出PDF文件Laravel框架为我们集成了一个插件tcpdf。下载地址:https://github.com/elibyy/tcpdf-laravel然后使用composer进行安装就可以了。具体安装过程,请查看文末
  • PHP laravel缓存cache机制怎么实现
    今天小编给大家分享一下PHP laravel缓存cache机制怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Laravel中的cache为我们
点击排行