Linux中國

開始 Vagrant 之旅

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

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

那麼選擇 Vagrant 吧。由 HashiCorp 在 MIT 許可證下創建,Vagrant 可充當 VirtualBox、Microsoft Hyper-V 或 Docker 容器的包裝器和前端,並且可以通過許多其他供應商的插件進行擴展。你可以配置 Vagrant 以提供可重複的、乾淨的環境,並且已安裝需要的基礎架構。配置腳本是可移植的,因此,如果你的倉庫和 Vagrant 配置腳本位於基於雲存儲上,那麼你只需要很少的限制就可以啟動並在多台機器機器上工作。讓我們來看一看。

安裝

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

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

sudo apt-get install virtualbox vagrant

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

建立一個項目

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

mkdir ~/myproject
cd ~/myproject
vagrant init debian/contrib-jessie64
vagrant up

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

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

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

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

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

vagrant halt

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

對於這個例子,我將使用 ApachePostgreSQL 和 Perl 的 Dancer web 框架進行項目開發。我將修改Vagrant 配置腳本,以便我需要的東西已經安裝。 為了使之稍後更容易保持更新,我將在項目根目錄下創建一個腳本~/myproject/Vagrantfile

$provision_script = <<SCRIPT
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get -y install 
  apache2 
  postgresql-client-9.4 
  postgresql-9.4 
  libdbd-pg-perl 
  libapache2-mod-fastcgi 
  libdata-validate-email-perl  
  libexception-class-perl 
  libexception-class-trycatch-perl 
  libtemplate-perl 
  libtemplate-plugin-json-escape-perl 
  libdbix-class-perl 
  libyaml-tiny-perl 
  libcrypt-saltedhash-perl 
  libdancer2-perl 
  libtemplate-plugin-gravatar-perl  
  libtext-csv-perl 
  libstring-tokenizer-perl 
  cpanminus
cpanm -f -n 
  Dancer2::Session::Cookie 
  Dancer2::Plugin::DBIC 
  Dancer2::Plugin::Auth::Extensible::Provider::DBIC 
  Dancer2::Plugin::Locale 
  Dancer2::Plugin::Growler
sudo a2enmod rewrite fastcgi
sudo apache2ctl restart
SCRIPT

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

  # config.vm.provision "shell", inline: <<-SHELL
  #   sudo apt-get update
  #   sudo apt-get install -y apache2
  # SHELL

相反,將那四行替換為使用你在文件頂部定義為變數的配置腳本:

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 選題:lujun9972 譯者:MjSeven 校對:wxy

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


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國