Ubuntu

預填充 vagrant 同步文件夾內容

  • June 19, 2014

我目前正在建構一個相當複雜的伺服器堆棧(一個 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

  1. **使用“內聯”腳本。**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

您還可以使用一種通過“真實”部署和供應系統工作的供應方法,但取決於您的要求,這可能是多餘的。

引用自:https://serverfault.com/questions/605668