預填充 vagrant 同步文件夾內容
我目前正在建構一個相當複雜的伺服器堆棧(一個 ruby on rails 應用程序),我希望開發人員能夠在無需自己安裝所有內容的情況下進行工作。因此,我使用 Vagrant 來允許他們這樣做。
這個想法是,當您第一次安裝映像時,它將拉取最新的源並安裝依賴項,源由同步文件夾(vagrant 內置的功能)公開,以便開發人員可以送出源並在他們自己的環境中編輯它們。Vagrant-box 僅適用於伺服器。
Vagrantfile 中的同步文件夾條目:
config.vm.synced_folder "gameeso/", "/var/gameeso", :create => "true"
該映像是一個帶有 upstart 腳本的 Ubuntu 伺服器(腳本在啟動時執行,並且僅在 Internet 連接啟動時執行):
- 從 Github 拉取最新的開發分支(如果文件夾不存在)
- 安裝依賴項(這是由腳本完成的)
- 啟動伺服器
所有這些都發生在一個同步的文件夾中。我在使用這種方法時遇到了一些問題,主要是 Vagrant 清除了我的訪客系統上的同步文件夾。 我通過在 upstart 腳本中添加“sleep 10”解決了這個問題,所以它可以等到 Vagrant 設置同步文件夾。
當然,這不是一種安全的方法(如果啟動時間超過 10 秒,雖然現在不太可能,但我不想知道 ;))
我的問題是:有沒有更好的方法讓來賓主機(無業遊民圖像)填充同步文件夾?
當然,提前非常感謝!
Vagrant 的內置配置功能應該非常適合這一點。有很多方法可以做到這一點,但最簡單的可能是利用 Upstart 腳本的核心內容並將它們製作成一個普通的 shell 腳本。然後,將這些塊之一放入您的
Vagrantfile
:
- **使用“內聯”腳本。**Vagrant 會將目錄中的內容複製到目錄中
Vagrantfile
的腳本中/tmp
並執行。$script = <<<SCRIPT // The contents of your script go here SCRIPT config.vm.provision "shell", inline: $script
請注意,此處的腳本位於“heredoc”內,這意味著您需要小心確保
SCRIPT
結束 heredoc 的標記位於正確的位置 - 即單獨一行,沒有額外的空格。(上面關於 heredoc 的連結確實顯示了一種允許空格的方法,但無論如何你都需要小心。) 2. 指向一個腳本文件。Vagrant 會將這個文件複製到/tmp
目錄中並執行它。config.vm.provision "shell", path: "setup.sh"
注意這裡的路徑是相對於
Vagrantfile
位置的。 但是,該文件不是從該位置執行的,因此如果您需要將文件放在某個目錄中,則應遵循方法#3。 3. 使用指向腳本文件的“內聯”腳本。 這樣,您可以在選定的位置執行腳本(在下面的範例中,這是在/vagrant
您完成先決條件chmod
或設置環境變數之後。$script = <<SCRIPT chmod +x /vagrant/setup.sh cd /vagrant ./setup.sh SCRIPT config.vm.provision "shell", inline: $script
您還可以使用一種通過“真實”部署和供應系統工作的供應方法,但取決於您的要求,這可能是多餘的。