家園
- 內建軟體
- 安裝& 設定
- 安裝Homestead Vagrant Box
- #安裝Homestead
- ##配置Homestead
- 設定提供器
- #設定共用資料夾 安裝MariaDB
- 安裝MongoDB
- #安裝Elasticsearch
- # #安裝Neo4j ###別名################日常使用##############全域可用的Homestead###############Mac / Linux#############Windows##############透過SSH連接############連接資料庫############資料庫備份############新增額外的網站##### #
- #環境變數
- #設定定時計畫
- Configuring Mailhog
- 設定Minio
- ##連接埠
- #分享你的環境 ##多版本PHP
- Web 伺服器
- 郵件
- 擴展Homestead
- 更新Homestead
- #提供特殊設定
- ##VirtualBox
Laravel Homestead
- 介紹
- #安裝與設定
- 日常使用
- 全域可用的Homestead
- 透過SSH 連線
- 連接資料庫
- 資料庫備份
- 新增其他網站
- 環境變數
- 設定Cron 調度器
- ##設定Mailhog
- 設定Minio
- 連接埠
- 分享你的環境
- 多個PHP 版本
- Web 伺服器
- #網路介面
- 擴充Homestead
- #更新Homestead
- 提供器的特殊設置
簡介
Laravel 致力於讓整個 PHP 開發體驗變更的更愉快,包括你的本機開發環境。 Vagrant 提供了一種簡單、優雅的方式來管理和配置虛擬主機。
Laravel Homestead 是一個官方預先包裝的 Vagrant box ,它為你提供了一個完美的開發環境,你不需要在本地機器安裝 PHP、 web 伺服器和其他的伺服器軟體。你再也不用擔心會弄亂你的作業系統了! Vagrant boxes 是一次性的。如果出現問題, 你可以在幾分鐘內銷毀並重新建立box !
Homestead 可以運行在任何Windows、 Mac、 或Linux 系統, 它包括了Nginx web 伺服器, PHP 7.3、 PHP 7.2、 PHP 7.1 、 MySQL、PostgreSQL、Redis、 Memcached、 Node 以及你開發Laravel 所需要的東西。
{note} 如果你使用的是 Windows, 你可能需要透過 BIOS 來啟用硬體虛擬化 (VT-x)。如果你在Hyper-V 系統上使用UEFI 你可能還需要停用Hyper-V 以便存取VT-x.
- #內建軟體
- Ubuntu 18.04
- Git
- PHP 7.3
- PHP 7.2
- PHP 7.1
- Nginx
- Apache (Optional)
- MySQL
- MariaDB (Optional)
- Sqlite3
- #PostgreSQL
- #Composer
- Node (With Yarn, Bower, Grunt, and Gulp)
- Redis
- Memcached
Elasticsearch (Optional)
Go
Minio
安裝& 設定
vagrant box add laravel/homestead###如果這個指令失敗了,請確保你安裝的是最新版的 Vagrant。 ##########
安裝 Homestead
你可以透過複製程式碼來安裝 Homestead。建議將程式碼克隆到你的"home" 目錄下的Homestead
資料夾中, 這樣Homestead box 就可以作為你的所有Laravel 專案的主機:
git clone https://github.com/laravel/homestead.git ~/Homestead
因為Homestead 的master 分支並不是穩定的,你應該使用打過標籤的穩定版本。你可以在GitHub 發行頁: 上找到最新的穩定版本:
cd ~/Homestead// 克隆期望的发行版本...git checkout v8.0.1
一旦克隆Homestead 程式碼完成以後,在Homestead 目錄中使用bash init.sh
指令來建立 Homestead.yaml
設定檔。 Homestead.yaml
檔案將會被放在Homestead 目錄中:
// Mac / Linux...bash init.sh// Windows...init.bat
設定Homestead
#設定提供器
Homestead.yaml
檔案中的 provider
參數決定了你使用的是哪一個Vagrant 提供者: virtualbox
, vmware_fusion
, vmware_workstation
, parallels
以及hyperv
。你可以根據你的喜好來設定他們:
provider: virtualbox
配置共享資料夾
Homestead.yaml 檔案的folders 屬性裡列出了所有與Homestead 環境共享的資料夾。這些資料夾中的檔案如果發生變更,它們會保持本機與 Homestead 環境之間同步。你可以根據需要配置多個共享資料夾:
folders: - map: ~/code to: /home/vagrant/code
如果你只創建幾個網站,這種通用的映射將運行的很好。但是,隨著網站數量的不斷增加,你可能會開始遇到效能問題。在包含大量文件的低效能機器或專案中,這個問題會非常明顯。如果遇到此問題,請嘗試將每個專案對應到自己的Vagrant 資料夾:
folders: - map: ~/code/project1 to: /home/vagrant/code/project1 - map: ~/code/project2 to: /home/vagrant/code/project2
若要開啟NFS, 你只需要在共用的資料夾設定中新增一個簡單的標誌:
folders: - map: ~/code to: /home/vagrant/code type: "nfs"
{note} 當使用NFS 時,你最好使用vagrant-winnfsd 擴充插件。這個外掛程式會替你處理 Homestead box 中的檔案或目錄權限的問題。
你也可以透過在 options
中列出 Vagrant's 的共享資料夾 支援的任何選項:
folders: - map: ~/code to: /home/vagrant/code type: "rsync" options: rsync__args: ["--verbose", "--archive", "--delete", "-zz"] rsync__exclude: ["node_modules"]#
設定 Nginx 網站
對 Nginx 不熟悉?沒關係。 sites
功能可以讓你在 Homestead 上輕鬆的映射一個 "網域" 到一個資料夾。在 Homestead.yaml
檔案中包含了一個簡單的網站配置範例。同樣,您可以根據需要為您的 Homestead 環境添加大量的網站。 Homestead 可以為你正在開發的每個Laravel 專案提供一個方便的虛擬化環境:
sites: - map: homestead.test to: /home/vagrant/code/my-project/public
如果你在配置Homestead 虛擬機後更改了sites
選項,你需要再次運行vagrant reload --provision
指令去更新虛擬機器上的Nginx 設定.
Hosts 檔案
你必須將Nginx 網站中所新增的域名加到你本機的hosts
檔案中。 hosts
檔案會將存取你 Homestead 網站的請求重新導向到你的 Homestead 虛擬機器上。在 Mac 和 Linux 中,該檔案的位址在 /etc/hosts
,在 Windows 中位於 C:\Windows\System32\drivers\etc\hosts
。新增網站的格式如下所示:
192.168.10.10 homestead.test
確保監聽的 IP 位址是你在 Homestead.yaml
檔案中所設定的。一旦你將將網域加入hosts
檔案並啟動Vagrant Box 後,你就可以透過瀏覽器造訪該網站了:
http://homestead.test
啟動Vagrant Box
根據你的需求編輯完成Homestead.yaml
,在你的Homestead 資料夾中執行vagrant up
指令。 Vagrant 將啟動虛擬機器並自動設定你的共用資料夾和 Nginx 網站。
若要刪除虛擬機,只需執行 vagrant destroy --force
指令。
根據專案安裝
除了全域安裝 Homestead 並且在所有專案共用相同的 Homestead box 之外, 你可以為每個專案配置 Homestead 實例。透過在專案下方建立 Vagrantfile
,其他的專案成員只需執行 vagrant up
就能擁有相同的開發環境。
要將Homestead 直接安裝到專案中,需要使用Composer 指令:
composer require laravel/homestead --dev
Homestead 安裝之後, 使用make
指令在專案根目錄中產生 Vagrantfile
和Homestead.yaml
檔案。 make
指令會自動設定 Homestead.yaml
檔案中 sites
和 folders
指令。
Mac / Linux:
php vendor/bin/homestead make
Windows:
vendor\bin\homestead make
接下來,在命令列中執行vagrant up
命令,然後在瀏覽器中訪問http://homestead.test
。記住,在訪問之前你仍然需要在 /etc/hosts
檔案中加入你的 homestead.test
記錄或其他的網域。
安裝MariaDB
#如果你喜歡使用MariaDB 而不是MySQL,你可以在 Homestead.yaml
檔案中增加一個mariadb
的選項。這個選項會刪除 MySQL 並安裝 MariaDB。 MariaDB 只是作為MySQL 的旁支替代品,所以你還是可以在應用的資料庫設定中使用mysql
# 資料庫驅動:
box: laravel/homestead ip: "192.168.10.10"memory: 2048cpus: 4provider: virtualbox mariadb: true
如果你需要安裝MongoDB 社群版, 你可以在
mongodb: true###MongoDB 預設的安裝方式會將資料庫的使用者名稱設定為###homestead### ,預設密碼為###secret###。 ########################安裝Elasticsearch######如果你要安裝Elasticsearch,你可以在 ###Homestead.yaml###文件中新增 ###elasticsearch### 選項並指定支援的版本號。可以只包含主版本,也可以是某個特定的版本號(major.minor.patch)。預設安裝會建立一個名為 'homestead' 的叢集。注意永遠不要賦予Elasticsearch 超過操作系統一半的內存,因此請確保你的Homestead 至少分配了兩倍於Elasticsearch 的內存:###
box: laravel/homestead ip: "192.168.10.10"memory: 4096cpus: 4provider: virtualbox elasticsearch: 6######{tip} 你可以查看Elasticsearch documentation 文件學習如何自定義你的配置。 #########################
安裝 Neo4j
Neo4j 是一個圖形資料庫管理系統。要安裝Neo4j 社群版,需要更新Homestead.yaml
設定項如下:
neo4j: true
預設安裝的Neo4j 會將資料庫使用者名稱設定為homestead
,對應的密碼設定為secret
。要查看 Neo4j 可以在瀏覽器中存取 http://homestead.test:7474
。 Neo4j 對外提供了三個連接埠: 7687
(Bolt)、 7474
(HTTP)、 7473
(HTTPS) 用於從客戶端存取。
#別名
#你可以透過編輯Homestead 目錄下的aliases
檔案為Homestead 虛擬機器新增Bash 別名:
alias c='clear'alias ..='cd ..'
更新完aliases
檔案後, 你應該使用 vagrant reload --provision
指令重啟Homestead 虛擬機, 以確保新的別名在機器上可用。
#每日使用
vagrant up 指令啟動Homestead 虛擬機器。在 Mac / Linux 系統上可以在 Bash 設定檔(
~/.bash_profile )中新增 Bash 函數 。在 Windows 上, 你可以將「批次」檔案新增至
PATH 。這些腳本允許你在系統的任何位置運行Vagrant 命令並自動將該命令指向Homestead 的安裝路徑:
function homestead() {
( cd ~/Homestead && vagrant $* )
}
確保將該函數中的~/Homestead 路徑調整為實際的Homestead 安裝路徑。這樣你就可以在系統的任何位置運行
homestead up
homestead ssh 等指令。
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 的實際安裝路徑。建立檔案後,將檔案路徑新增至
homestead up
或homestead ssh 等指令。
連接資料庫
homestead
預設已經在虛擬機器中為 MySQL 和 PostgreSQL 資料庫做好了設定。為了方便起見, Laravel 中的 .env
檔案將框架配置成預設使用此資料庫。
要從主機的資料庫用戶端連接到MySQL 或PostgreSQL ,應該連接到127.0.0.1
,連接埠 33060
(MySQL) 或54320
(PostgreSQL)。使用者名稱和密碼分別是 homestead
/ secret
。
{note} 只有從本地連接 Hoemstead 的資料庫時才能使用這些非標準的連接埠。而 Laravel 在虛擬機器中 運行時還是應該使用預設的 3306 和 5432 連接埠進行資料庫連線。
資料庫備份
當你的Vagrant 盒子銷毀時,Homestead 能自動備份你的資料庫。為了利用這個功能,你必須使用 Vagrant 2.1.0 或更高的版本。或者,如果你使用一個舊版的 Vagrant,你必須安裝 vagrant-triggers
外掛程式。為了開啟自動資料庫備份,加入如下的行到你的Homestead.yaml
檔案:
backup: true
一旦配置了,當vagrant destroy
指令被執行時,Homestead將匯出你的資料庫到mysql_backup
和postgres_backup
目錄。如果你使用 每個專案安裝 方法,則可以在克隆的 Homestead 或在你的專案根目錄中找到這些目錄。
添加額外的網站
一旦你的Homestead 環境已配置並運行,你可以為你的Laravel應用程式新增額外的Nginx 網站。你可能希望在單一 Homestead 環境運行多個 Laravel 安裝。要新增額外的站點,到Homestead.yaml
檔案中新增網站:
sites: - map: homestead.test to: /home/vagrant/code/my-project/public - map: another.test to: /home/vagrant/code/another/public
如果Vagrant 不能自動管理你的『hosts』文件,你可能還需要新增一個新的網站到該檔案中:
192.168.10.10 homestead.test 192.168.10.10 another.test
一旦這個網站被加入,從你的Homestead 目錄執行vagrant reload --provision
指令。
站點類型
Homestead 支援多種類型的站點,讓您可以輕鬆運行不是基於 Laravel 的專案。例如,我們可以使用symfony2
網站類型輕鬆地新增一個Symfony 應用到Homestead:
sites: - map: symfony2.test to: /home/vagrant/code/my-symfony-project/web type: "symfony2"
可用的網站類型是:apache
,apigility
,expressive
,laravel
(預設),proxy
,silverstripe
,statamic
,symfony2
,symfony4
,和zf
。
網站參數
你可以透過 params
網站指令新增額外的 Nginx fastcgi_param
到你的網站。例如,我們新增一個值為BAR
的Foo
參數:
sites: - map: homestead.test to: /home/vagrant/code/my-project/public params: - key: FOO value: BAR##環境變數你能透過將如下的值加到
Homestead.yaml 檔案來設定全域環境變數:
variables: - key: APP_ENV value: local - key: FOO value: bar更新
Homestead.yaml 檔案之後,確保透過執行
vagrant reload --provision 指令重新配置機器。這個將更新所有安裝 的 PHP 版本的 PHP-FPM 配置並為
vagrant 使用者更新環境。
schedule:run Artisan 指令去每分鐘運行。
schedule:run 指令將檢查在你在
App\Console\Kernel 類別中定義的計畫來決定要執行哪個作業。
schedule:run 指令運行起來,在定義網站時,你可以設定
schedule 選項為
true:
sites: - map: homestead.test to: /home/vagrant/code/my-project/public schedule: true網站的Cron 作業將被定義在虛擬機器的
/etc/cron.d 目錄中。
.env 檔案:
MAIL_DRIVER=smtp MAIL_HOST=localhost MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null一旦Mailhog 被配置,你可以在
http://localhost:8025上訪問Mailhog 控制台。
配置 Minio
Minio 是一個開源的物件儲存伺服器,具有與 Amazon S3 相容的 API。要安裝 Minio,用以下的設定選項更新你的 Homestead.yaml
檔案:
minio: true
預設情況下,Minio 在連接埠 9600
上是可用的。你可以訪問 Minio 控制面板通過訪問 http://homestead:9600
。預設存取的鍵名是 homestead
,同時預設的金鑰是 secretkey
。當訪問 Minio 時,你應該總是使用 us-east-1
。
為了使用 Minio,你將需要在你的 config/filesystems.php
設定檔中調整 S3 磁碟設定。你將需要添加use_path_style_endpoint
選項到磁碟配置,並將url
鍵更改為endpoint
:
's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'endpoint' => env('AWS_URL'), 'use_path_style_endpoint' => true ]
最後,確保你的.env
檔案有如下的選項:
AWS_ACCESS_KEY_ID=homestead AWS_SECRET_ACCESS_KEY=secretkey AWS_DEFAULT_REGION=us-east-1 AWS_URL=http://homestead:9600
為了配置儲存桶,在Homestead 設定檔中新增一個buckets
指令:
buckets: - name: your-bucket policy: public - name: your-private-bucket policy: none
支援的policy
值包括:none
,download
,upload
和public
。
連接埠
預設情況下,如下的連接埠將轉送到你的Homestead 環境:
- SSH:2222 -> 轉送到22
- ngrok UI:4040 -> 轉送到4040
- #HTTP:8000 -> 轉送到80
- HTTPS:44300 -> 轉送到443
- #MySQL:33060 - > 轉送到3306
- PostgreSQL:54320 -> 轉送到5432
- MongoDB#:27017 -> 轉送到27017
- Mailhog:8025 -> 轉送到8025
- Minio:9600 -> 轉送到9600
#轉送額外的連接埠
如果你願意,你可以轉送額外的連接埠到Vagrant 盒子,同時也指定他們的協定:
ports: - send: 50000 to: 5000 - send: 7777 to: 777 protocol: udp
分享你的環境
有時你希望分享你目前工作的內容跟同事或客戶。 Vagrant 有內建的方法透過 vagrant share
去支援這個;然而,如果在 Homestead.yaml
檔案中有多個網站配置,這個將不會工作。
為了解決這個問題,Homestead 包含它自己的 share
指令。開始時,SSH 通過 vagrant ssh
進入你的 Homestead 機器並運行 share homestead.test
。這個將從你的 Homestead.yaml
設定檔中分享 homestead.test
網站。當然,你可以將任何其它配置的網站替換為homestead.test
:
share homestead.test
運行此命令之後,你將看到一個Ngrok 螢幕出現,其中包含了活動日誌和共享網站的可存取的URLs。如果你想指定一個自訂的區域,子網域,或者其它Ngrok 運行時選項,你可以將他們添加到你的share
指令:
share homestead.test -region=eu -subdomain=laravel
{note} 記住,Vagrant 本質上是不安全的,並且在運行
share
命令時將虛擬機器顯露到互聯網。
多版本PHP
Homestead 6 在同一個虛擬機器上引入了對多個PHP版本的支援。你可以在你的 Homestead.yaml
檔案中指定要用於給定網站的 PHP 版本。可用的PHP 版本是:『7.1’,『7.2』和『7.3』(預設):
sites: - map: homestead.test to: /home/vagrant/code/my-project/public php: "7.1"
另外,你可以透過CLI 使用任何支援的PHP 版本:
php7.1 artisan list php7.2 artisan list php7.3 artisan list
Web 伺服器
預設情況下,Homestead 使用Nginx web 伺服器。然而,如果 apache
是指定的網站類型,它能安裝 Apache。同時兩個 web 伺服器在同時被安裝,他們不能同時運作。 flip
腳本指令可用來輕鬆處理 web 伺服器之間的切換。 flip
指令自動確定正在執行的 web 伺服器,將其關閉。然後啟動其它伺服器。要使用這個命令,SSH 進入到你的Homestead 機器並在終端機運行命令:
flip
網路介面
Homestead.yaml
中的 networks
屬性為 Homestead 環境配置網路介面。你可以根據需要配置多個接口:
networks: - type: "private_network" ip: "192.168.10.20"
要開啟一個橋接 接口,配置bridge
設定並改變public_network
網路類型:
networks: - type: "public_network" ip: "192.168.10.20" bridge: "en1: Wi-Fi (AirPort)"
要開啟DHCP,只從你的設定移除ip
選項:
networks: - type: "public_network" bridge: "en1: Wi-Fi (AirPort)"
擴充Homestead
你能在Homestead 根目錄下使用after.sh
腳本擴充Homestead。在這個檔案中,你可以新增正確配置和自訂虛擬機器所需的任何 shell 命令。
當自訂 Homestead 時,Ubuntu 可能會詢問你是否要保留程式包的原始配置或用一個新的設定檔覆寫它。為了避免這種情況,你應該在安裝軟體包時使用以下的命令,以避免覆寫先前由Homestead 編寫的任何配置:
sudo apt-get -y \ -o Dpkg::Options::="--force-confdef" \ -o Dpkg::Options::="--force-confold" \ install your-package
更新Homestead
你可以透過一些簡單的步驟更新Homestead。首先,你應該使用 vagrant box update
指令更新 Vagrant 盒子:
vagrant box update
接下來,你需要去更新 Homestead 原始碼。如果你複製過倉庫,你能在最初複製倉庫的位置運行如下的指令:
git fetchgit checkout v8.0.1
這些指令從GitHub 倉庫拉取最新的Homestead 程式碼,取得最新的標記,然後檢出最新的標記版本。你能在 GitHub 版本頁面 找到最新穩定的版本。
如果你透過你的專案的composer.json
安裝Homestead,你應該確保你的composer.json
包含"laravel/homestead": " ^8"
並更新你的依賴項:
composer update
最後,你將需要銷毀和重新產生你的Homestead 盒子去利用最新的Vagrant 安裝。為了實現這個,在你的Homestead 目錄運行如下的命令:
vagrant destroy vagrant up
#提供特殊設定
##VirtualBox#natdnshostresolver
預設情況下,Homestead 會natdnshostresolver 設定設定為
on。這允許 Homestead 去使用你的主機作業系統的 DNS 設定。如果你不想覆寫這個行為,加入如下的行到你的
Homestead.yaml 檔案:
provider: virtualbox natdnshostresolver: off
Windows 上的符號連結
如果符號連結在你的Windows 機器上無法正常運作,你可能需要加入以下的區塊到Vagrantfile
檔案:
config.vm.provider "virtualbox" do |v| v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"] end