← Writing

Laravel: Laravel Homestead 環境建置

預備知識! 在開始介紹 Laravel Homestead 之前,需要先了解以下內容: Vagrant:Vagrant 是 open source,讓開發者在虛擬機器上管理和配置虛擬機器,而 Laravel Homestead 是建立在 Vagrant 官方預載的 Vagrant box,為開發者提...

laravelhomesteadparallels

預備知識!

在開始介紹 Laravel Homestead 之前,需要先了解以下內容:

  • Vagrant:Vagrant 是 open source,讓開發者在虛擬機器上管理和配置虛擬機器,而 Laravel Homestead 是建立在 Vagrant 官方預載的 Vagrant box,為開發者提供完善的開發環境。

  • Virtual Machine (VM) 虛擬機器:Homestead 是一個虛擬機器,藉由 Vagrant 管理,可以在虛擬環境中進行開發,而不會影響本機系統。

  • Homestead.yaml 設定檔:透過 Homestead.yaml 設定檔,可以調整 Homestead 的設定,例如:新增 Nginx 網站或設定 Cron 排程器。

Laravel Homestead 是什麼?

Laravel Homestead 以下以 Homestead 作為說明,是一個官方預載的 Vagrant box,提供開發者一個完善的開發環境,無需在本機安裝 PHP、網頁伺服器或其他伺服器軟體,避免影響本機系統;使用 Homestead 可透過 Vagrant 管理虛擬機器,並透過 Homestead.yaml 設定檔來調整設定。

在安裝 Homestaed 之前,需要在本機上先安裝:

安裝的事先準備

本身使用 MacBook Air M2 (Apple Silicon M2 晶片) 以下是我個人的安裝方式:

  • Install Vagrant
brew tap hashicorp/tap
brew install hashicorp/tap/hashicorp-vagrant
  • Install Parallels *官方文件有說明:If you are using Apple Silicon the Parallels provider is required. Parallels Desktop 19 for Mac 要使用 Pro or Business Edition 才能啟動! 點進 Parallels 官網找到下載之後按下, 接著會跳出要你安裝 Window 的畫面,可以不用安裝,直接到左上角有一個 Parallels Desktop -> About Parallels Desktop -> Account & License... step for parallels 點進去之後要輸入你的 Parallels License Key 然後點 Activate,這樣才算有使用成功, 因為用免費版的話會無法啟用!
  • Install Vagrant Parallels 使用 Parallels 要再多安裝這個! 打開終端機輸入 vagrant plugin install vagrant-parallels

如果都成功,我們就已經完成了 Homestead 安裝的事先準備了! 進入正題,來安裝 Homestead 吧!

安裝 Homestead

跟著官方文件一起操作,安裝 Homestead 可透過複製 repository, 以下指令會在本機的 home 裡建立一個 Homestead 的資料夾:

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

接著,到 Homestead 資料夾並且 checkout 到 release branch (這分支會包含最新且穩定的 Homestead 版本):

cd ~/Homestead
git checkout release

接著,根據自己本身的環境執行以下指令,這指令是生成 Homestead.yaml 設定檔:

# macOS / Linux...
bash init.sh

# Windows...
init.bat

有了 Homestead.yaml 設定檔,就可以用指令 open Homestead.yaml, 將 provider 修改為你先前安裝的 provider,我是使用 parallels

  provider: parallels

配置 Vagrant box

根據 vagrant + parallels usage 文件, 藉由 vagrant init 指令來生成 Vagrantfile,並且指定 boxbento/ubuntu-20.04-arm64,並以 vagrant up 啟動:

$ vagrant init bento/ubuntu-20.04-arm64
$ vagrant up #先不用 `vagrant up`,因為在這之前我們要先編輯 Homestead.yaml 設定檔!

編輯 Homestead.yaml 設定檔

# 補充

也可以到 Vagrant Cloud 尋找較為多人使用或者有持續維護的 box!

因此我用以下指令來使用我要的並啟動 box:

$ vagrant init laravel/homestead

*透過 vagrant box list 可以檢視所有的 box 有哪些, *如果要加入新的 box 可以透過 vagrant box add


編輯 Homestead.yaml 設定檔

在配置 Homestead box 後,接著就是要來編輯 Homestead.yaml 設定檔,需設定:

  • Shared Folders 以下就是設定本機與虛擬機的共享資料夾,在本機和 Homestead 虛擬環境之間保持同步。

    folders:
        - map: ~/code/project1
          to: /home/vagrant/project1
        - map: ~/code/project2
          to: /home/vagrant/project2
    
  • Nginx Sites 如果不熟悉 Nginx,Homestead.yaml 中的 sites 屬性可以簡單地將 domain 映射到 Homestead 環境中的 folder。

    sites:
      - map: homestead.test
        to: /home/vagrant/project1/public
    

    要記得到本機的 sudo vim /etc/hosts 將網域對應,

    192.168.56.56  homestead.test
    

    通常在專案上, site 也要在專案中的 .env 檔案做設定

  • Services Homestead 默認啟動多個服務,也可以自定義啟用或禁用哪些服務。 例如,來啟用 PostgreSQL 並禁用 MySQL:

    services:
      - enabled:
          - "postgresql"
      - disabled:
          - "mysql"
    

啟動 Vagrant box

編輯了 Homestead.yaml 設定檔,接著在 Homestead 目錄中運行 vagrant up 命令。

通常在 vagrant up 之後,會有提示說明接著下 vagrant up --provision ,這指令可以使 Vagrant 在啟動虛擬機時,執行所有定義在 Vagrantfile 中配置共享文件夾和 Nginx 站點,以確保虛擬機的環境是最新的。

根據剛剛示範的 site,就可以從 http://homestead.test 開啟網頁了!

*如果要銷毀虛擬機,可以使用 vagrant destroy


設定時區

在安裝好 Homestead 之後,透過 vagrant ssh 進入 VM(虛擬機),可以看見如下畫面: original timezone

在 Parallels 的 Control Center,有一個設定的 icon,點進去到 Options -> More Options -> Time,即便有選擇 Sync for Mac (也就是跟著 Mac 的設定),還是顯示不對的時區。

因此,為了調整 timezone 設定,先 vagrant ssh 進入 VM(虛擬機),接著,用 sudo dpkg-reconfigure tzdata 去調整所在時區:

  • 選擇區域 tzdata01
  • 選擇城市 tzdata02
  • 設定成功的輸出結果 set timezone

參考資料

vagrant-parallels vagrant-parallels-providers Vagrant 學習筆記 Homestead - wrong time answered from danielcoimbra