一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

[教學(xué)]使用Vagrant練習(xí)環(huán)境佈署

 sven_ 2013-08-13

最近對(duì)Rails的佈署有更深一層的體悟,打算花點(diǎn)時(shí)間將佈署心得整理成文章,預(yù)計(jì)大概會(huì)在2050年前完成這部大作,這邊決定先發(fā)布序章,就是教你怎麼使用Vagrant來(lái)打造自己的測(cè)試機(jī)器。

為什麼要用Vagrant

答案很簡(jiǎn)單,因?yàn)殚_遠(yuǎn)端機(jī)器練習(xí)佈署或是機(jī)器架構(gòu)又慢又麻煩又要錢,而且玩壞了或是環(huán)境髒了又得重灌又很慢,如果你想我一樣最近在玩Chef-Server,實(shí)驗(yàn)多機(jī)器環(huán)境架構(gòu),例如一臺(tái)Web Load Balancer、5臺(tái)Application Server、1臺(tái)Master Database 1臺(tái)Slave Database、1臺(tái)Data Analytics Server、1臺(tái) Service Monitor Server,1臺(tái)Redis Server,聽起來(lái)有沒有很牛,但這一切都只要在你那臺(tái)用來(lái)開發(fā)的電腦就做的到,告訴我為何你還不用Vagrant呢?

Vagrant Basic

下載安裝Vagrant與Virtual Box

Vagrant背後用的是Virtual Box作為虛擬機(jī)器,Vagrant只是一個(gè)讓你可以方面做設(shè)定來(lái)開你想要的虛擬機(jī)器的方便工具,所以你必須先安裝Vagrant和Virtual Box,Virtual Box你可以在Virtual Box官網(wǎng)下載適合你平臺(tái)的版本,而Vagrant你可以在Vagrant官網(wǎng)下載打包好的版本,或是如果你跟我一樣是個(gè)玉樹臨風(fēng)的Rubist,你可以打開我們最愛的小黑視窗輸入

1
$ gem install vagrant

Vagrant 1.1後已經(jīng)不支援使用Gem來(lái)安裝了,據(jù)說是因?yàn)镈ependecy太多他受不了了,詳細(xì)可以參考他們的說明,感謝ihower的提示

開始使用Vagrant 新增作業(yè)系統(tǒng)

當(dāng)你已經(jīng)安裝好Virtual Box以及Vagrant後,你要開始思考你想要在你的VM上使用什麼作業(yè)系統(tǒng),一個(gè)打包好的作業(yè)系統(tǒng)環(huán)境在Vagrant稱之為Box,也就是說每個(gè)Box都是一個(gè)打包好的作業(yè)系統(tǒng)環(huán)境,當(dāng)然網(wǎng)路上什麼都有,你不用自己去找作業(yè)系統(tǒng),vagrantbox.es上面就有許多大家熟知且已經(jīng)打包好的作業(yè)系統(tǒng),你只需要下載就可以了,為你的Vagrant增加一個(gè)Box很簡(jiǎn)單

1
$ vagrant box add {你想要的Box名稱} {下載網(wǎng)址}

例如我想要下載我最愛的也只會(huì)這個(gè)的Ubuntu,我只要在vagrantbox.es挑好我想要的版本,一樣在我們的小黑視窗輸入

1
$ vagrant box add {Ubuntu-12-10} {http://cloud-images./quantal/current/quantal-server-cloudimg-vagrant-amd64-disk1.box}

Vagrant就會(huì)開始下載這個(gè)Box,你可以用vagrant box list這個(gè)指令看到你所擁有的所有Box,想像就是你的書架上多了一片Ubuntu 12.10的安裝光碟,以後要安裝機(jī)器就是用這的安裝就可以了,有了Box以後,我們要產(chǎn)生一個(gè)設(shè)定檔來(lái)設(shè)定我們的虛擬機(jī)器,這個(gè)檔案可以透過指令vagrant init Box名稱來(lái)產(chǎn)生,你可以在你的專案中或是另外開個(gè)練習(xí)用的資料夾輸入,這時(shí)候你的資料夾終究會(huì)有一個(gè)名稱為vagrantfile的檔案,這個(gè)檔案就是所有魔法的開始

1
2
3
4
5
~/Dropbox/Projects/Personal/vagrant ? vagrant init ubuntu-12-10                                                                                             gogojimmy@MBP
A `vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the vagrantfile as well as documentation on
`` for more information on using Vagrant.

讓VM動(dòng)起來(lái)

我們晚一點(diǎn)再提設(shè)定檔的部份,讓我們先把VM跑起來(lái),要讓VM跑起來(lái)的指令是vagrant up

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ vagrant up                                                                                                      gogojimmy@MBP
[default] VM already created. Booting if it's not already running...
[default] Clearing any previously set forwarded ports...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] The guest additions on this VM do not match the install version of
VirtualBox! This may cause things such as forwarded ports, shared
folders, and more to not work properly. If any of those things fail on
this machine, please update the guest additions and repackage the
box.

Guest Additions Version: 4.1.18
VirtualBox Version: 4.2.12
[default] Mounting shared folders...
[default] -- v-root: /vagrant

看到以上這段指令跑完後,讓我們用ssh連線到機(jī)器

1
$ vagrant ssh

現(xiàn)在你已經(jīng)在虛擬機(jī)器上了,登入的用戶是預(yù)設(shè)的vagrant,現(xiàn)在你可以開始玩壞你的機(jī)器了,在VM中有個(gè)/vagrant的資料夾會(huì)與你host機(jī)器的vagrant設(shè)定檔所在的資料夾共享資料,現(xiàn)在你可以照你的習(xí)慣把機(jī)器的環(huán)境安裝起來(lái),例如以我來(lái)說我會(huì)先安裝Ruby以及一些基本的系統(tǒng)套件,你可以在我的Gist上看到這個(gè)裝機(jī)步驟,等我一下,讓我先把我的環(huán)境先安裝好,你可以先去玩一下Candy Crush或是看一下Facebook

1
vagrant@vagrant-ubuntu-quantal-64:~$ curl -L https://gist.github.com/gogojimmy/5523985/raw/b9d777bc380ee791c2f4534e9261b4b99289ed9f/bootstrap-chef-solo.sh | sh

將習(xí)慣的環(huán)境打包成Box

我的環(huán)境大概要裝15分鐘左右,有人說一個(gè)程式設(shè)計(jì)師的人生花最多時(shí)間的一件事情就是等,這個(gè)說法真是一點(diǎn)也不為過,每次裝機(jī)都從環(huán)境重新開始Build也不是辦法,我們要讓人生有更多的時(shí)間去處理更多的事情,所以我們可以把一個(gè)已經(jīng)Build好的環(huán)境打包成一個(gè)我們自己的Box,以後我們只要直接使用這個(gè)打包好的版本就可以了,因此讓我們幫自己的人生省點(diǎn)時(shí)間,速速登出VM來(lái)打包這個(gè)Box

1
2
3
4
5
6
7
8
9
10
vagrant@vagrant-ubuntu-quantal-64:~$ exit
logout
Connection to 127.0.0.1 closed.
------------------------------------------------------------
$ vagrant package                                                                                                 gogojimmy@JoycetekiMacBook-Pro
[default] Attempting graceful shutdown of VM...
[default] Clearing any previously set forwarded ports...
[default] Creating temporary directory for export...
[default] Exporting VM...
[default] Compressing package to: /Users/gogojimmy/Dropbox/Projects/Personal/vagrant/package.box

vagrant package這個(gè)指令會(huì)在你目前的資料夾下建立一個(gè)vagrant.box的Box檔案,這時(shí)候我們跟剛剛一樣把它加入到我們的Box List中,以後我們就可以快速使用這個(gè)Box就好了!除此之外,可以自定Box的意義還有讓你的團(tuán)隊(duì)都能用VM來(lái)?yè)碛凶约旱腟taging環(huán)境,例如在Rails專案中我們也可以建立一個(gè)Vagrant的設(shè)定檔來(lái)做一個(gè)給開發(fā)人員測(cè)試用的Staging環(huán)境,這時(shí)候你就可以指定好你自定的機(jī)器設(shè)定,確保每個(gè)開發(fā)人員都能擁有一樣的環(huán)境來(lái)進(jìn)行開發(fā)。

1
2
$ vagrant box add gogojimmy-ubuntu-12-10 package.box
$ vagrant list

Vagrant基本設(shè)定

設(shè)定VM的名稱及記憶體

用你最喜歡的編輯器打開vagrantfilevagrantfile是個(gè)有著詳細(xì)解釋的設(shè)定檔,非常建議妳好好看過一遍來(lái)了解每個(gè)設(shè)定,當(dāng)然我也知道今天你會(huì)來(lái)看這篇文章就表示你根本懶得看英文,就讓我來(lái)幫你一步步走過,在這個(gè)檔案中所有的設(shè)定都被Vagrant::Config.run的Block包起來(lái),在一開始只會(huì)有box的設(shè)定:

1
config.vm.box = "gogojimmy-ubuntu-12-10"

這告訴了Vagrant要去套用哪個(gè)Box作為環(huán)境,也就是你一開始輸入varant init Box名稱時(shí)所指定的Box,如果沒有輸入Box名稱的話就會(huì)是預(yù)設(shè)的base,Virtual Box本身提供了VBoxManage這個(gè)command line tool讓你可以設(shè)定你的VM,用modifyvm這個(gè)指令讓你可以設(shè)定VM的名稱及記憶體大小等等,這裡說的名稱指的是在Virtual Box中顯示的名稱,我們也可以在vagrantfile中進(jìn)行設(shè)定,在你的vagrantfile中加入這行

1
config.vm.customize ["modifyvm", :id, "--name", "gogojimmy", "--memory", "512"]

這行設(shè)定檔意思就是呼叫VBoxManage的modifyvm的指令,設(shè)定VM的名稱為gogojimmy,而設(shè)定VM的記憶體大小為512MB,你可以照這這種作法為你的VM設(shè)定好不同的設(shè)定。

設(shè)定Hostname以及Port forward

設(shè)定hostname非常簡(jiǎn)單,設(shè)定中加入下面這行就好

1
config.vm.host_name = "gogojimmy-app"

設(shè)定hostname非常重要,有很多服務(wù)都仰賴著hostname來(lái)做為辨識(shí),例如Puppet或是Chef,一般一些監(jiān)控服務(wù)像是New Relic之類的也都是以hostname來(lái)做為辨識(shí),設(shè)定那麼簡(jiǎn)單,就別偷懶吧,再來(lái)看到下面這行

1
config.vm.forward_port 80, 8080

這個(gè)設(shè)定非常的厲害,這行的意思就是把Host機(jī)器上8080 port傳來(lái)的東西forward到VM跑的 80 port的服務(wù),例如當(dāng)你練習(xí)Deploy到VM上時(shí),在瀏覽器打開http://localhost:8080時(shí)就會(huì)傳入VM裡跑80 port的服務(wù)像是Nginx或是Apache,因此我們可以透過這個(gè)設(shè)定來(lái)幫助我們?nèi)ピO(shè)定Host與VM間,或是VM與VM間的溝通,像是MySQL通常跑3306之類的

設(shè)定網(wǎng)路橋接方式

Vagrant有兩種橋接方式是,一種是host only,意思是說在你電腦同個(gè)區(qū)網(wǎng)中的其他電腦是看不到你的VM的,只有你一個(gè)人自High,另一種是Bridge,當(dāng)然就是說VM會(huì)跟你區(qū)網(wǎng)的router去要一組IP,區(qū)網(wǎng)中的其他電腦也都能看到他,一般來(lái)說因?yàn)殚_VM的情況都是自High居多,因此我們?cè)谠O(shè)定上都是設(shè)定host only:

1
config.vm.network :hostonly, "192.168.33.10"

這邊將網(wǎng)路設(shè)定成hostonly',並且指定一組IP位址,IP位址的設(shè)定會(huì)建議不要使用192.168..的設(shè)定,因?yàn)楹苡锌赡軙?huì)跟你區(qū)網(wǎng)的IP衝突,你可以改使用像是33.33..`的設(shè)定。

更改vagrantfile的設(shè)定後,記得要用vagrant reload的指令重開VM讓VM可以用新的設(shè)定檔跑起來(lái)

讓我們開始打造多機(jī)器環(huán)境

重頭戲來(lái)了,前面的一切都是為了今天鋪陳,現(xiàn)在我們要建立多個(gè)VM跑起來(lái),並且讓他們互相溝通,有人跑Application、有人跑DB、有人跑Memcached,這一切在Vagrant中非常簡(jiǎn)單,跟剛剛的設(shè)定都一樣,你只需要指定好機(jī)器的角色就可以了,讓我們?cè)俅未蜷_我們的設(shè)定檔來(lái)設(shè)定一臺(tái)APP Server加上一臺(tái)DB Server:

1
2
3
4
5
6
7
8
9
10
11
12
config.vm.define :app do |app_config|
    app_config.vm.customize ["modifyvm", :id, "--name", "app", "--memory", "512"]
    app_config.vm.box = "ubuntu-12-10"
    app_config.vm.host_name = "app"
    app_config.vm.network :hostonly, "33.33.13.10"
end
config.vm.define :db do |db_config|
  db_config.vm.customize ["modifyvm", :id, "--name", "db", "--memory", "512"]
  db_config.vm.box = "ubuntu-12-10"
  db_config.vm.host_name = "db"
  db_config.vm.network :hostonly, "33.33.13.11"
end

這邊的設(shè)定就像是剛剛在設(shè)定的部份教的一樣,只是我們使用了:app以及:db分別做了兩個(gè)VM的設(shè)定,並且給予不同的hostname和IP,設(shè)定好了以後再使用vagrant up將機(jī)器跑起來(lái):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ vagrant up
[app] Importing base box 'ubuntu-12-10'...
[app] Matching MAC address for NAT networking...
[app] Clearing any previously set forwarded ports...
[app] Forwarding ports...
[app] -- 22 => 2222 (adapter 1)
[app] -- 80 => 8080 (adapter 1)
[app] Creating shared folders metadata...
[app] Clearing any previously set network interfaces...
[app] Preparing network interfaces based on configuration...
[app] Running any VM customizations...
[app] Booting VM...
[app] Waiting for VM to boot. This can take a few minutes.
[app] VM booted and ready for use!
[app] Configuring and enabling network interfaces...
[app] Setting host name...
[app] Mounting shared folders...
[app] -- v-root: /vagrant
[db] Importing base box 'ubuntu-12-10'...
[db] Matching MAC address for NAT networking...
[db] Clearing any previously set forwarded ports...
[db] Fixed port collision for 22 => 2222. Now on port 2200.
[db] Fixed port collision for 22 => 2222. Now on port 2201.
[db] Forwarding ports...
[db] -- 22 => 2201 (adapter 1)
[db] Creating shared folders metadata...
[db] Clearing any previously set network interfaces...
[db] Preparing network interfaces based on configuration...
[db] Running any VM customizations...
[db] Booting VM...
[db] Waiting for VM to boot. This can take a few minutes.
[db] VM booted and ready for use!
[db] Configuring and enabling network interfaces...
[db] Setting host name...
[db] Mounting shared folders...
[db] -- v-root: /vagrant

看到上面的訊息跑完後,你就可以跟剛剛一樣使用ssh連到VM裡,但這次不同的是你要加上你所指定的角色告訴你要連線的機(jī)器是哪一臺(tái):

1
2
3
4
5
$ vagrant ssh app
vagrant@app:~$

$ vagrant ssh db
vagrant@db:~$

是不是很酷?。≡賮?lái)我們來(lái)驗(yàn)證一下VM之間的連線,讓我們使用ssh登入db的機(jī)器,然後在db的機(jī)器上使用ssh來(lái)連線到app的機(jī)器(預(yù)設(shè)密碼就是vagrant):

1
2
3
4
5
6
7
8
9
10
$ vagrant ssh db

vagrant@db:~$ ssh 33.33.13.10
The authenticity of host '33.33.13.10 (33.33.13.10)' can't be established.
ECDSA key fingerprint is a7:71:36:4c:01:4a:38:a2:fc:fa:ea:d7:67:63:3c:40.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '33.33.13.10' (ECDSA) to the list of known hosts.
vagrant@33.33.13.10's password:

vagrant@app:~$

看到了嗎,VM之間的溝通也是沒有問題的!,你現(xiàn)在可以開始好好思考你偉大的Infrastructure,讓你的程式跑在多機(jī)器的環(huán)境中,如果你對(duì)於Infrastructure不熟悉,Amazon有提供了不少範(fàn)例可以參考,想像力就是你的超能力,現(xiàn)在唯一侷限你的只會(huì)是你的電腦記憶體了,不要開到跑不動(dòng)都不會(huì)有事的,今天就開始用Vagrant練習(xí)你的機(jī)器佈署吧!

記得設(shè)定多臺(tái)機(jī)器的時(shí)候,剛剛原先在單臺(tái)機(jī)器的設(shè)定必須先清除或是註解掉,如果剛剛的VM還在跑,記得要用vagrant halt先關(guān)機(jī)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    成年人免费看国产视频| 日韩丝袜诱惑一区二区| 97人摸人人澡人人人超碰| 亚洲一区二区三区三州| 高跟丝袜av在线一区二区三区| 欧美精品在线观看国产| 日系韩系还是欧美久久| 亚洲最大的中文字幕在线视频| 欧美人妻免费一区二区三区| 真实国产乱子伦对白视频不卡| 真实国产乱子伦对白视频不卡| 精品国产品国语在线不卡| 五月天丁香婷婷一区二区| 国产丝袜美女诱惑一区二区| 亚洲国产精品久久综合网| 91人妻人人澡人人人人精品| 精品老司机视频在线观看| 国产日韩欧美专区一区| 蜜臀人妻一区二区三区| 草草视频精品在线观看| 欧美精品在线观看国产| 亚洲黄色在线观看免费高清| 国产精品伦一区二区三区四季| 欧美综合色婷婷欧美激情| 69久久精品亚洲一区二区| 精品国产日韩一区三区| 国产内射一级一片内射高清视频 | 日韩精品一区二区三区四区| 中文字幕日韩欧美亚洲午夜| 91在线国内在线中文字幕| 日韩国产中文在线视频| 国产一级一片内射视频在线| 欧美亚洲美女资源国产| 日本高清不卡在线一区| 99精品人妻少妇一区二区人人妻| 免费观看潮喷到高潮大叫| 亚洲一区二区三区三州| 国产又大又猛又粗又长又爽| 国产性色精品福利在线观看| 欧美日韩有码一二三区| 国产又粗又深又猛又爽又黄|