1. 程式人生 > >[原創]Homestead 開發環境安裝筆記

[原創]Homestead 開發環境安裝筆記

Vagrant 安裝 Homestead 筆記

參考文章:

1. 預先準備

命令列 說明
vagrant init 初始化 vagrant
vagrant up 啟動 vagrant
vagrant halt 關閉 vagrant
vagrant ssh 通過 SSH 登入 vagrant(需要先啟動 vagrant)
vagrant provision 重新應用更改 vagrant 配置
vagrant destroy 刪除 vagrant
  • Git 360軟體管家

  • composer config -g repo.packagist composer https://packagist.phpcomposer.com #使用國內源
    composer global require hirak/prestissimo   #使composer並行安裝包

2. 安裝Box

安裝Box主要有3種方式

  • 從 Vagrant Cloud 線上安裝 vagrant box add laravel/homestead

    國內網路環境不大容易崩.. 牆內不推薦

  • 從指定url地址安裝(略)

  • 本地資料夾安裝

    先輸入 vagrant box add laravel/homestead

    選擇所需虛擬機器版本(此處選virtualbox), 命令列會輸出下載地址, 下載完畢後會得到一個 laravel-homestead-6.1.0.box(自行重新命名)

    注意 所在目錄必須 沒有 中文名, 否則一定會失敗!!!!

    快速安裝: vagrant box add "laravel/homestead-6.1.0" ./laravel-homestead-6.1.0.box

    或者是建立一個 metadata.json 檔案(與laravel-homestead-6.1.0.box同一目錄 ), 內容為

      {
          "name": "laravel/homestead"
    , "versions": [ { "version": "6.1.0", "providers": [ { "name": "virtualbox", "url": "virtualbox.box" } ] } ] }

    執行新增命令

    vagrant box add metadata.json

    檢視當前已安裝box列表 vagrant box list

    (安裝成功後 metadata.jsonlaravel-homestead-6.1.0.box 可刪除)

3. 安裝Homestead

  1. git clone https://github.com/laravel/homestead.git Homestead 下載Homestead控制指令碼
  2. cd Homestead && git checkout v7.7.0 使用穩定版本
  3. bash init.shinit.bat 建立 Homestead.yaml配置檔案

會生成一下三個檔案

  • Homestead.yaml - 主要配置資訊檔案,我們可以在此檔案中配置 Homestead 的站點和資料庫等資訊;
  • after.sh - 每一次 Homestead 盒子重置後(provision)會呼叫的 shell 指令碼檔案;
  • aliases - 每一次 Homestead 盒子重置後(provision),會被替換至虛擬機器的 ~/.bash_aliases 檔案中,aliases 裡可以放一些快捷命令的定義
  1. 修改 Homestead.yaml 配置檔案

引數說明

  • 虛擬機器配置

    ip: "192.168.10.10"
    memory: 2048
    cpus: 1
    provider: virtualbox    # 虛擬機器提供型別
  • SSH金鑰登陸配置

    • authorize

    主機上的公鑰檔案, 自動複製到虛擬機器的 /home/vagrant/.ssh/authorized_keys檔案中, 用於 SSH免密登陸

    • keys

    主機的SSH私鑰檔案, 自動複製到虛擬機器的 /home/vagrant/.ssh/ 目錄中, 使虛擬機器能共享主機上的金鑰檔案, 具備等同於主機的身份認證(eg. 主機和虛擬機器用同一個ssh私鑰檔案認證github)

    建立金鑰對 ssh-keygen -t rsa -C "[email protected]"

    • provider

    指定虛擬機器: virtualbox, vmware_fusion, vmware_workstation, parallels

  • folders

    指定共享資料夾, 有多種共享方式: 預設, nfs, rsync 等

    注意不要瞎寫, 防止覆蓋一些重要目錄..比如 /home/vagrant. 18-08-02 被坑了1個小時

  • sites

    配置域名對映, 可同時配置多個域名對映.

    記得在主機的 hosts 裡新增 192.168.10.10 測試域名

  • databases

    配置資料庫, 主機若需訪問資料庫則連線 127.0.0.1 和埠 33060(mysql) 或 54320(Postgres), 賬號密碼分別是 homestead/secret. 虛擬機器中訪問仍然使用 預設的 33065432 埠.

  • variables

    配置環境變數

  • ports

    配置埠對映, 預設埠對映:

    SSH: 2222 → 傳送到 22

    HTTP: 8000 → 傳送到 80

    HTTPS: 44300 → 傳送到 443

    MySQL: 33060 → 傳送到 3306

    Postgres: 54320 → 傳送到 5432

    Mailhog: 8025 → 傳送到 8025

    MongoDB: 27017 -> 27017

    Spark: 4040 -> 4040

引數修改後若要重新生效需執行vagrant reload --provisionvagrant provision && vagrant reload

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa
    - ~/.ssh/id_rsa.pub

folders:
    - map: E:\Codes\LearnLaravel
      to: /home/vagrant/code

sites:
    - map: homestead.test
      to: /home/vagrant/code/public
#      php: "7.1"       # 指定php版本
#      schedule: true   # 配置cron排程, 對站點使用 schedule:run 命令
#      params:          # 新增Nginx fastcgi_param 值
#      type: laravel    # 指定站點型別(預設是laravel), 支援 apache, proxy, silverstripe, statamic, symfony2, symfony4
#        - key: FOO
#          value: BAR

databases:
    - homestead

variables:
    - key: APP_ENV
      value: local

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp
  1. (可選)修改對應虛擬機器名(建立多個時防止命名衝突)

    config.vm.provider "virtualbox" do |vb|
     vb.name = "your-specific-project-name"
    end
  2. vagrant up 啟動

第一次啟動時,Vagrant 會做以下這幾件事情:

  • 以匯入的 Homestead 虛擬機器盒子為模板,新建一臺虛擬機器;
  • 並按照 Homestead.yaml 裡的配置資訊,對這臺新建的虛擬機器進行配置;
  • 配置完成後啟動虛擬機器。

vagrant destroy --force 可以刪除虛擬機器

vagrant global-status 可檢視當前系統中所有通過 vagrant建立的虛擬機器

  1. SSH連線虛擬主機 vagrant ssh