歡迎光臨
每天分享高質量文章

開始 Vagrant 之旅 | Linux 中國

用管理虛擬機器和容器的工具 Vagrant 清理你的開發環境和依賴。
— Ruth Holloway


致謝
編譯自 | https://opensource.com/article/18/4/getting-started-vagrant 
 作者 | Ruth Holloway
 譯者 | MjSeven ? ? ? ? 共計翻譯:39 篇 貢獻時間:113 天

用管理虛擬機器和容器的工具 Vagrant 清理你的開發環境和依賴。

如果你和我一樣,你可能在某一個地方有一個“沙盒”,你可以在那裡進行你正在做的任何專案。隨著時間的推移,沙盒會變得雜亂無章,充斥著各種想法、工具鏈元素、你不使用的程式碼模組,以及其他你不需要的東西。當你完成某件事情時,這會使你的部署變得複雜,因為你可能不確定專案的實際依賴關係 —— 隨著時間推移你在沙盒中已經有了一些工具,但是你忘了必須安裝它。你需要一個乾凈的環境,將所有的依賴關係放在一個地方,以便以後更方便。

或者你可能工作在 DevOps 中,你所服務的開發人員用模糊的依賴關係來編寫程式碼,這使得測試變得更加困難。你需要一種方法來獲得一個乾凈的盒子,將程式碼放入其中,並透過它執行程式碼,而且你希望這些環境是一次性的和可重覆的。

那麼選擇 Vagrant[1] 吧。由 HashiCorp 在 MIT 許可證[2]下建立,Vagrant 可充當 VirtualBox、Microsoft Hyper-V 或 Docker 容器的包裝器和前端,並且可以透過許多其他供應商[3]的外掛進行擴充套件。你可以配置 Vagrant 以提供可重覆的、乾凈的環境,並且已安裝需要的基礎架構。配置指令碼是可移植的,因此,如果你的倉庫和 Vagrant 配置指令碼位於基於雲儲存上,那麼你只需要很少的限制就可以啟動併在多臺機器機器上工作。讓我們來看一看。

安裝

對於本次安裝,我的環境是 Linux Mint 桌面,版本是 18.3 Cinnamon 64 位,在其他大多數 Debian 派生系統上安裝非常類似。在大多數發行版中,對於基於 RPM 的系統也有類似的安裝程式。Vagrant 的安裝頁面[4]為 Debian、 Windows、 CentOS、 MacOS 和 Arch Linux 都提供下載,但是我在我的軟體包管理器中找到了它,所以我在那進行了安裝。

最簡單的安裝使用了 VirtualBox 作為虛擬化提供者,所以我需要安裝它:

  1. sudo apt-get install virtualbox vagrant

安裝程式將會獲取依賴項 —— 主要是 Ruby 的一些東西,安裝它們。

建立一個專案

在設定你的專案之前,你需要瞭解一些你想要執行它的環境。你可以在 Vagrant Boxes 倉庫[5]中找到為許多虛擬化供應商提供的大量預配置的系統box。許多會預先配置一些你可能需要的核心基礎設定,比如 PHP、 MySQL 和 Apache,但是對於本次測試,我將安裝一個 Debian 8 64 位 “Jessie” 裸機沙盒並手動安裝一些東西,這樣你就可以看到具體過程了。

  1. mkdir ~/myproject

  2. cd ~/myproject

  3. vagrant init debian/contrib-jessie64

  4. vagrant up

最後一條命令將根據需要從倉庫中獲取或更新 VirtualBox 映象,然後執行啟動器,你的系統上會出現一個執行的系統!下次啟動這個專案時,除非映象已經在倉庫中更新,否則不會花費太長時間。

要訪問該沙盒,只需要輸入 vagrant ssh,你將進入虛擬機器的全功能 SSH 會話中,你將會是 vagrant 使用者,但也是 sudo 組的成員,所以你可以切換到 root,併在這裡做你想做的任何事情。

你會在沙盒中看到一個名為 /vagrant 目錄,對這個目錄小心點,因為它與你主機上的 ~/myproject 檔案夾保持同步。在虛擬機器 /vagrant 下建立一個檔案它會立即複製到主機上,反之亦然。註意,有些沙盒並沒有安裝 VirtualBox 的附加功能,所以複製只能在啟動時才起作用。有一些用於手動同步的命令列工具,這可能是測試環境中非常有用的特性。我傾向於堅持使用那些有附加功能的沙盒,所以這個目錄可以正常工作,不必考慮它。

這個方案的好處很快顯現出來了: 如果你在主機上有一個程式碼編輯工具鏈,並處於某種原因不希望它出現在虛擬機器上,那麼這不是問題 —— 在主機上進行編輯,虛擬機器會立刻更改。快速更改虛擬機器,它也將其同步到主機上的“官方”副本 。

讓我們關閉這個系統,這樣我們就可以在這個系統裡提供一些我們需要的東西:

  1. vagrant halt

在虛擬機器上安裝額外的軟體

對於這個例子,我將使用 Apache[6]、 PostgreSQL[7] 和 Perl 的 Dancer[8] web 框架進行專案開發。我將修改Vagrant 配置指令碼,以便我需要的東西已經安裝。 為了使之稍後更容易保持更新,我將在專案根目錄下建立一個指令碼~/myproject/Vagrantfile

  1. $provision_script = <<SCRIPT

  2. export DEBIAN_FRONTEND=noninteractive

  3. apt-get update

  4. apt-get -y install \

  5.  apache2 \

  6.  postgresql-client-9.4 \

  7.  postgresql-9.4 \

  8.  libdbd-pg-perl \

  9.  libapache2-mod-fastcgi \

  10.  libdata-validate-email-perl  \

  11.  libexception-class-perl \

  12.  libexception-class-trycatch-perl \

  13.  libtemplate-perl \

  14.  libtemplate-plugin-json-escape-perl \

  15.  libdbix-class-perl \

  16.  libyaml-tiny-perl \

  17.  libcrypt-saltedhash-perl \

  18.  libdancer2-perl \

  19.  libtemplate-plugin-gravatar-perl  \

  20.  libtext-csv-perl \

  21.  libstring-tokenizer-perl \

  22.  cpanminus

  23. cpanm -f -n \

  24.  Dancer2::Session::Cookie \

  25.  Dancer2::Plugin::DBIC \

  26.  Dancer2::Plugin::Auth::Extensible::Provider::DBIC \

  27.  Dancer2::Plugin::Locale \

  28.  Dancer2::Plugin::Growler

  29. sudo a2enmod rewrite fastcgi

  30. sudo apache2ctl restart

  31. SCRIPT

在 Vagrantfile 結尾附近,你會發現一行 config.vm.provision 變數,正如你在示例中看到的那樣,你可以在此處以行內方式進行操作,只需透過取消註釋以下行:

  1.  # config.vm.provision "shell", inline: <SHELL

  2.  #   sudo apt-get update

  3.  #   sudo apt-get install -y apache2

  4.  # SHELL

相反,將那四行替換為使用你在檔案頂部定義為變數的配置指令碼:

  1. config.vm.provision "shell", inline: $provision_script

你可能還希望將轉發的埠設定為從主機訪問虛擬機器上的 Apache。尋找包含 forwarded_port的行並取消註釋它。如果你願意,也可以將埠從 8080 更改為其他內容。我通常使用埠 5000,併在我的瀏覽器瀏覽 http://localhost:5000 就可以訪問我虛擬機器上的 Apache 伺服器。

這裡有一個設定提示:如果你的倉庫位於雲儲存上,為了在多臺機器上使用 Vagrant,你可能希望將不同機器上的 VAGRANT_HOME 環境變數設定為不同的東西。以 VirtualBox 的工作方式,你需要分別為這些系統儲存狀態資訊,確保你的版本控制系統忽略了用於此的目錄 —— 我將 .vagrant.d* 新增到倉庫的 .gitignore 檔案中。不過,我確實讓 Vagrantfile 成為倉庫的一部分!

好了!

我輸入 vagrant up,我準備開始寫程式碼了。一旦你做了一兩次,你可能會想到你可以迴圈利用很多的 Vagrantfile 模板檔案(就像我剛剛那樣),這就是 Vagrant 的優勢之一。你可以更快地完成實際的編碼工作,並將很少的時間花在基礎設施上!

你可以使用 Vagrant 做更多事情。配置工具存在於許多工具鏈中,因此,無論你需要複製什麼環境,它都是快速而簡單的。


via: https://opensource.com/article/18/4/getting-started-vagrant

作者:Ruth Holloway[10] 選題:lujun9972 譯者:MjSeven 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂