2016年3月7日 星期一

【Laravel/Homestead】簡易快速安裝 Laravel - Homestead

Laravel 官方提供了 Homestead
(官方教學文 - https://laravel.com/docs/master/homestead)
Homestead 是一個 使用Ubuntu 的 VM, Laravel 已經為用家們預先安裝了 Laravel 所需要的環境及 Server, 例如 Nginx, MYSQL等等, 在 Windows 及 Mac OSX 上都能夠使用



前置工作:
在安裝 Laravel - Homestead 之前, 我們需要先依次安裝composer及Laravel:




(1) 使用 VM 就當然需要安裝 VM 軟件嚕



(2) 然後需要安裝 Vagrant
想了解什麼是 Vagrant? 請參考【Vagrant】簡單介紹 Vagrant

(3) 安裝完成後, 使用 vagrant 指令把 "laravel/homestead" 這個 box 安裝至 Vagrant     中
      (安裝這個挺花時間的喔~)
vagrant box add laravel/homestead 

(4) 使用 git 指令把 Homestead clone 下來
cd ~
git clone https://github.com/laravel/homestead.git Homestead
clone 下來後, Homestead 資料夾中會有一個 Vagrantfile 檔案, 基本上要執行 vagrant命令就是要透個這個檔案執行, 所以當我的要用 vagrant 指令時, 都要先進到這個目錄才能執行嚕~

(5) 新增 SSH 金鑰
ssh-keygen -t rsa -C "username@homestead"
      *不要忘記把 username  改成自己的使用者帳號喔*
      輸入了這個指令之後一直按 enter 就可以了

(6) 初始化 Homestead

  • 移至 Homestead 目錄
cd ~/Homestead 

  • 使用以下指令來建立 Homestead.yaml 設定檔案, 這個檔案將放置在 ~/.homestead 目錄裡 


bash init.sh
(7)  設定 Homestead
打開 Homestead.yaml (在finder裡按commad+shift+g, 輸入 ~/.homestead), 或直接在終端機輸入以下指令
vim ~/.homestead/Homestead.yaml
 在 Homestead.yaml 設定檔裡:

  • 設定提供者 (provider), 可以是 virtualbox, vmware_fusion, vmware_workstation
provider: virtualbox

  • 設定共享目錄, 設定後將同步更新本機環境與 Homestead 環境 (可設定多個共享環境) 


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

  •  設定 sites, sites 幫助我們可以輕易指定網域對應至 homestead 環境目錄中
sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
* map 代表本機資料夾, to 代表 VM 資料夾* 
* sites 設定的 map 的值代表 homestead.app 網址, to 的值代表把 map 網址導致哪一個資料夾, 也就是我們在瀏覽器輸入 http://homestead.app, 瀏覽器會顯示 VM 的 /home/vagrant/Code/Laravel/public 網頁* 
 (8) 設定 hosts 檔案

我們需要在 hosts 檔案裡增加網域, 這個檔案會把我們的 Homestead 網站的請求重導至 Homestead 機器
Mac 的用家請到 /etc/hosts 尋找 hosts 檔案 (在 finder 裡按 command+shift+g, 輸入 /etc/hosts), 或使用 sudo vim /etc/hosts 指令直接在終端機修改
 Windows 的路徑是 C:\Windows\System32\drivers\etc\hosts
打開 hosts 檔案後, 請在最底增加以下一列  (不是使用終端機的用家, 建議先把檔案拖曳至桌面, 改動後再拖回去取代喔~)
192.168.10.10  homestead.app
*此 IP 必須與 Homestead.yaml 裡的 IP 相同*
(9) 啟動 Vagrant Box

  • 進入 Homestead 目錄
cd ~/Homestead 

  • 輸入以下指令
vagrant up 



  • 輸入後 Vagrant 會啟動虛擬主機並共享目錄, 輸入 vagrant status, 看到 running就代表你成功了!
(10) 新增 Laravel 專案
如果在新增 Homestead 後改動過 yaml 檔案的 sites 路徑設定, 你會發現該路徑空白一片, 這時候我們就要新增 Laravel 專案了!
composer create-project laravel/laravel project-name --dev-develop
把 project-name 改成自己想要的專案名稱 

完成以上 9 項設定後, 就可以造訪網站了!
http://homestead.app
看到有 Laravel 這個字就代表成功了!

******
備註:
如果沒有修改預設的 Homestead.yaml
那請在 /User/{user-name} 加入 Code 這個資料夾 (因為 Homestead.yaml 裡的預設共享目錄是設定在 Code 裡的)
弄好後再執行一次 vagrant up, 搞定!
******

~。~。~。Homestead 進階小知識~。~。~。

(1) vagrant 捷徑
剛剛提及過, vagrant 指令是透過 vagrantfile 而執行的, 所以每次要啟動 vagrant box 時, 都需要移至 vagrantfile 所在的目錄, 那如果想在不同目錄都能使用 vagrant 指令呢?只需要執行以下指令, 我們就可以在任何位置使用 vagrant 了!
alias homestead='function __homestead() { (cd ~/Homestead && vagrant $*); unset -f __homestead; }; __homestead' 
(2) 連接資料庫
Homestead  的資料庫設定了 MySQL 及 Postgres 兩種, 要從本機電腦做用Navicat 連接資料庫, 我們需要連接 127.0.0.1 的連接埠 33060 (MySQL) 或 54320 (Postgres)
帳號:homestead
密碼:secret 
(3) 使用 SSH 連接 Homestead
除了在終端機使用 vagrant ssh 之外, 我們可以使用 IDE (例如 Netbeans, Eclipse 等等) 來 SSH 進去
如何使用 Eclipse 遠端請參考: 
【Eclipse】遠端同步修改(RSE: Remote System Explorer)
host name 輸入 192.168.10.10
user id 輸入 vagrant
密碼是根據新增 SSH 金鑰時輸入的密碼, 如果沒有新增過 SSH 金鑰, 那預設的密碼就是 vagrant
(4) Homestead 的連接埠
  • SSH2222 轉發至 22
  • HTTP8000 轉發至 80
  • HTTPS44300 轉發至 443
  • MySQL33060 轉發至 3306
  • Postgres54320 轉發至 5432
(5) 一個 Homestead 只能新增一個網域嗎?如果我想把幾個網站放進去那怎辦?
一個 Homestead 能新增多個網域的啊~就打開 homestead.yaml 新增 folders 和 sites, 儲存後執行 vagrant provision 指令就可以了!




5 則留言:

  1. 你好,我完成(10)後打開http://homestead.app/ 時出現No input file specified.
    我的設定如下:
    Project Name: First-Web
    Setting of Homestead.yaml:

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

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

    ===============================
    在 /User/{user-name} 加入 Code 這個資料夾 (因為 Homestead.yaml 裡的預設共享目錄是設定在 Code 裡的) <-------(也加了)


    有什麼出錯呢?

    回覆刪除
    回覆
    1. Homestead directory: /User/{my user name}/Homestead
      first-web directory: /User/{my user name}/Homestead/first-web
      加入 Code 這個資料夾: /User/{my user name}/Code <------*Empty folder

      刪除
    2. 把first-web放在Code folder裡
      因為你的project放了在Homestead folder裡,所以他找不到唷

      抱歉抱歉 原來是我打少了QAQ

      刪除
    3. 也是一樣呢。。我怎樣知道yaml的mapping 對呢??
      Homestead directory: ~/Homestead
      first-web directory : move to ~/Code/first-web

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

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


       打擾了,謝謝

      刪除
  2. 時出現No input file specified
    解法方法
    vagrant -up --provision

    回覆刪除