虛擬開發環境
在項目開發中,我們經常會遇到各種各樣的問題,需要使用虛擬開發環境來完成,虛擬和正式環境一樣的虛擬開發環境,隨著個人開發機硬件的升級,可以在本機跑虛擬機,如VMware、VirtualBox等。因此使用虛擬化開發環境,在本機可以運行自己喜歡的OS(Windows、Ubuntu、Mac等),開發的程序運行在虛擬機中,這樣遷移到生產環境可以避免環境不一致導致的莫名錯誤。
虛擬開發環境有著很多的好處,本文安裝虛擬機的原因在于模擬在遠程服務器上搭建CI,并完成項目中持續集成的一系列工作。故搭建虛擬機只是第一步,在此基礎上,后面還會有一系列的文章,介紹CI相關。
Vagrant
Vagrant is a tool for building and managing virtual machine environments in a single workflow. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases production parity, and makes the "works on my machine" excuse a relic of the past.
Vagrant的設計是為了方便的實現虛擬化環境,使用Ruby開發,基于VirtualBox、VMware等虛擬機管理軟件的接口,提供了一個可配置、輕量級的便攜式虛擬開發環境。使用Vagrant可以很方便的就建立起來一個虛擬環境,而且可以模擬多臺虛擬機,因此可以在開發機模擬分布式系統。
安裝 VirtualBox 和 Vagrant
VirtualBox是一款開源免費的虛擬機軟件,跨平臺,Windows ,OS X 都可以使用。Vagrant 也是跨平臺的。二者都需要到官網進行下載安裝:
安裝好VirtualBox和Vagrant后,就要在VM上使用操作系統了,一個打包好的操作系統在Vagrant中稱為Box,即Box是一個打包好的操作系統環境。可以在Vagrant Cloud選擇系統并進行下載。
安裝Box
這里我選擇的是ubuntu.box系統,并根據官網提示,直接運行如下指令進行安裝。
如圖所示也可以選擇直接修改Vagrantfile
進行配置,修改后使用時如果該box還沒有安裝,Vagrant會自動進行下載安裝。但根據以上步驟,當前Vagrant還未產生Vagrantfile文件,因此該法這里不可行。最簡單的方法是在命令行執行上述兩條命令。
運行該命令后,Terminal結果如下,同時該目錄會自動創建Vagrantfile文件。
==> default: Successfully added box 'ubuntu/trusty64' (v20170918.0.0) for 'virtualbox'!
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: VOS_default_1505893534153_40845
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
default:
default: Guest Additions Version: 4.3.36
default: VirtualBox Version: 5.1
==> default: Mounting shared folders...
default: /vagrant => /Users/bqliu/Documents/VOS
Vagrantfile
Vagrantfile是Vagrant的配置文件,告訴 vagrant 怎樣去運行該虛擬機,主要包括三個方面的配置,虛擬機的配置、SSH配置、Vagrant的一些基礎配置。其存在的目的主要為以下兩方面:
- 標志項目的根目錄,Vagrant的許多配置都與這個根目錄有關。
- 描述項目運行所需的機器和資源類型,包括要安裝的軟件和權限。
Vagrant的內置的命令 vagrant init
會產生一個根目錄,并自動生成Vagrantfile目錄。
Tips: 修改完Vagrantfile的配置后,記得要vagrant reload
命令來重啟VM之后才能使用VM更新后的配置
安裝Box的另一種方法
-
vagrant init
生成Vagrantfile配置文件 -
vagrant box add <box_name>
安裝Box - 修改Vagrantfile配置文件,使用Box
更多詳細步驟見官網文檔
查看可以使用的Box
vagrant box list
配置網絡
如果想讓你的電腦跟虛擬機之間可以相互通信,比如你在虛擬機上安裝了一個 Web 服務器,你打算可以在本地電腦上,或者同一網絡內的其它設備可以訪問到這臺虛擬機上的項目。這需要去做一些配置,有三種方式,端口轉發(Forwarded Ports),私有網絡(Private Network),公有網絡(Public Network)。
下面,可以在 vagrantfile 中配置一個端口轉發:
config.vm.network "forwarded_port", guest: 8080, host: 8080, host_ip: "127.0.0.1"
該配置保證在虛擬機上啟動服務器后,本地電腦可以使用8080端口對該服務器進行訪問。關于私有網絡和共有網絡的配置方法見官網
Tips:在連接虛擬機時,會出現重復retry,但無法成功連接的問題,可以在 vagrantfile 中配置,給virtualbox一個ip地址
config.vm.network "private_network", ip: "192.168.33.10"
啟動虛擬機
vagrant up
選擇一個網絡
若是本地電腦連接虛擬機,選擇wifi模式就可
連接虛擬機
vagrant ssh
設置密碼
sudo passwd
之后就可以根據你安裝的操作系統,正常的使用虛擬機了
常用 Vagrant 命令
初始化box:vagrant init
啟動虛擬機:vagrant up
登錄虛擬機:vagrant ssh
顯示box列表:vagrant box list
添加box:vagrant box add
刪除box:vagrant box remove
關機:vagrant halt
重啟:vagrant reload
銷毀:vagrant destroy
打包虛擬機環境:vagrant package
Special thanks
My pair:Benqing