windows下搭建Vagrant+Virtualbox环境
對于開發(fā)人員來說,Vagrant就是一個(gè)提供標(biāo)準(zhǔn)化開發(fā)環(huán)境的工具。通過Vagrant:
- 使每個(gè)開發(fā)人員電腦上的代碼運(yùn)行環(huán)境一致,再也不會出現(xiàn)“在我電腦上運(yùn)行起來明明沒有問題的”這樣的開發(fā)環(huán)境不一致的問題。
- 你可以使用Vagrant在windows下提供linux運(yùn)行環(huán)境,讓你可以在windows下使用你熟悉的IDE開發(fā),而代碼會同步到Vagrant上運(yùn)行。
- vagrant還支持使用遠(yuǎn)程provider,你在本地編寫代碼,而代碼會自動(dòng)同步到你的遠(yuǎn)程主機(jī)上執(zhí)行
- 因?yàn)閂agrant通過配置文件來定義標(biāo)準(zhǔn)環(huán)境,所以你可以使用git等工具進(jìn)行版本管理
總而言之,Vagrant確實(shí)是個(gè)好東西。不過,裝Vagrant之前也還要考慮一下性能問題,Vagrant需要一個(gè)Provider來提供原型環(huán)境,這個(gè)Provider可以是本地的Virtualbox、VMWare等虛擬機(jī),也可以是遠(yuǎn)程的一臺主機(jī),如果你使用本地虛擬機(jī)作為Provider的話,請確保自己的電腦配置足夠跑一臺虛擬機(jī),并且在BIOS中打開虛擬化。
接下來說一下在windows下使用Virtual box作為Provider,搭建Vagrant開發(fā)環(huán)境的一個(gè)過程。
安裝Virtualbox和Vagrant
到Virtualbox官網(wǎng)下載安裝包,注意目前不要下5.2.X版本的,因?yàn)?.2.x官方包中的Guest Additions有問題(見下圖),而Vagrant剛好要用到。這里我們下載5.1.30版本的。
到Vagrant官網(wǎng)下載安裝包,雙擊安提示安裝即可。
Vagrant基礎(chǔ)使用
1、打開一個(gè)文件夾作為工作目錄,這個(gè)文件夾的內(nèi)容將會被同步到虛擬機(jī)上。本文以D:\myproject作為工作目錄來演示
2、初始化vagrant配置。打開命令行,切換到D:\myproject,輸入命令:
vagrant init ubuntu/xenial64這會在你的工作目錄下生成一個(gè)Vagrantfile文件。參數(shù)ubuntu/xenial64表示使用ubuntu xenial64 鏡像作為基礎(chǔ)環(huán)境,你可以在vagrant boxes search里面找到所有的鏡像
3、啟動(dòng)Vagrant。輸入:
vagrant up4、登錄 vagrant。輸入如下命令,不需要密碼,直接進(jìn)入:
vagrant ssh這里直接在windows命令行中登錄,登錄之后可以直接在命令行使用linux命令,但是長遠(yuǎn)來看,使用Putty等工具來登錄使用起來更方便,后面將會講到如何用Putty登錄。
5、查看同步文件夾
在D:\myproject下新建一個(gè)文件,然后輸入如下命令,在Vagrant中查看:
cd /vagrant ls你會看到你新建的文件出現(xiàn)在/vagrant目錄下。默認(rèn)情況,Vagrant會同步你的工作目錄到/vagrant目錄
常用Vagrant命令
你可以在windows命令行輸入:
vagrant -h查看所有命令,常用的如下:
- vagrant init:初始化vagrant,這會創(chuàng)建一個(gè)Vagrantfile文件
- vagrant up:啟動(dòng)vagrant,這啟動(dòng)virtualbox虛擬機(jī)
- vagrant halt:停止vagrant ,這會停止virtualbox虛擬機(jī)
- vagrant destroy:這會徹底刪除當(dāng)前工作目錄下的vagrant
- vagrant reload:重新加載Vagrantfile文件,在每次修改完Vagrantfile文件之后都要執(zhí)行
- vagrant provision:重新執(zhí)行初始化腳本,在每次修改完初始化腳本文件之后都要執(zhí)行。初始化腳本文件可以在Vagrantfile中指定,后面會講到
- vagrant ssh:登錄到vagrant
- vagrant ssh-config:查看登錄配置,包括用戶名,私鑰存放地址等
配置啟動(dòng)腳本
1、在D:\myproject下創(chuàng)建一個(gè)bootstrap.sh文件,下面是一個(gè)示例腳本,安裝curl、git和 go語言環(huán)境,注意這個(gè)腳本需要從google下載go安裝包,需要設(shè)置外網(wǎng)代理:
#!/bin/sh # 切換到工作目錄 cd /vagrant# 更新系統(tǒng) sudo apt-get -y update && sudo apt-get -y upgrade# 安裝實(shí)用程序 sudo apt-get install -y curl sudo apt-get install -y git# 安裝go ## 注意這里保存環(huán)境變量要使用絕對路徑 /home/ubuntu/.profile ,而不要使用相對路徑 ~/.profile ## 這是因?yàn)閳?zhí)行該腳本的是guest用戶,登錄時(shí)卻是ubuntu用戶 ## go環(huán)境變量也設(shè)置到guest用戶,這樣下次檢查就已經(jīng)有了,不需要每次安裝 if [ -z `which go` ]; then echo "install go ........" wget -q https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.8.linux-amd64.tar.gz echo "export PATH=$PATH:/usr/local/go/bin" >> /home/ubuntu/.profile echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.profile export PATH=$PATH:/usr/local/go/bin fi2、打開Vagrantfile,添加一行provision配置,整個(gè)配置文件看起來如下:
Vagrant.configure("2") do |config|config.vm.box = "ubuntu/xenial64"config.vm.provision "shell", path: "bootstrap.sh" end3、重新加載配置文件并重新執(zhí)行初始化腳本
vagrant reload vagrant provision執(zhí)行完之后,環(huán)境中就帶有了go語言環(huán)境。
使用遠(yuǎn)程啟動(dòng)腳本
可以將path配成一個(gè)URL,這樣大家都從網(wǎng)絡(luò)上統(tǒng)一下載,很方便管理
Vagrant.configure("2") do |config|config.vm.box = "ubuntu/xenial64"config.vm.provision "shell", path: "https://example.com/bootstrap.sh" end設(shè)置Provision其它參數(shù)
provision除了path參數(shù)之外,還有很多參數(shù)可以使用,參考這里。比如要多加一個(gè)binary參數(shù),這個(gè)參數(shù)可以自動(dòng)將windows換行符替換成unix風(fēng)格的換行符,配置如下:
Vagrant.configure("2") do |config|config.vm.box = "ubuntu/xenial64"config.vm.provision :"shell" do |s|s.path="bootstrap.sh"s.binary=trueend end配置端口映射
比如要將虛擬機(jī)的9090端口映射到主機(jī)的19090端口,可以使用如下配置:
Vagrant.configure("2") do |config|config.vm.box = "ubuntu/xenial64"config.vm.provision "shell", path: "bootstrap.sh"config.vm.network "forwarded_port", guest: 9090, host: 19090, host_ip: "127.0.0.1" end這樣就可以直接使用127.0.0.1:19090訪問虛擬機(jī)的9090端口了
使用putty登錄
使用vagrant ssh直接登錄是不需要輸入用戶名密碼的,但是如果你使用Putty直接連接到127.0.0.1:2222,你會發(fā)現(xiàn)它需要你輸入用戶名密碼。那么怎么配置才能讓Putty也能直接登錄進(jìn)去呢?
這里我們將用到putty和puttygen兩個(gè)程序,點(diǎn)擊鏈接可下載。
1、首先查看Vagrant的登錄配置,輸入:
vagrant ssh-config你會看到如下信息:
Host defaultHostName 127.0.0.1User ubuntuPort 2222UserKnownHostsFile /dev/nullStrictHostKeyChecking noPasswordAuthentication noIdentityFile D:/myproject/.vagrant/machines/default/virtualbox/private_keyIdentitiesOnly yesLogLevel FATAL可以看到Port是登錄端口,User是登錄名,IdentityFile是私鑰文件的位置
2、生成putty可識別的私鑰文件。
打開Puttygen.exe,直接點(diǎn)擊load
在彈出框中選擇我們私鑰文件,點(diǎn)擊打開。不知道私鑰文件的位置可以用vagrant ssh-config命令查看,這里我們已經(jīng)查到是放在D:/myproject/.vagrant/machines/default/virtualbox/private_key
直接點(diǎn)擊save private key按鈕,讓后將私鑰放在你想要的位置。
3、使用Putty登錄
設(shè)置登錄地址和端口,可以使用vagrant ssh-config命令查看
設(shè)置登錄用戶名,這個(gè)也可以使用vagrant ssh-config命令查看
設(shè)置私鑰文件地址
記得保存
處理文件結(jié)束符問題
是windows下和在Unix風(fēng)格系統(tǒng)下使用不同的文件結(jié)束符。雖然Vagrant可以自動(dòng)同步文件,但卻不會自動(dòng)替換掉文件結(jié)束符,所以,我們需要自行處理。下面簡單說兩種方法:
使用git進(jìn)行替換
1、執(zhí)行:
git config --global core.autocrlf input這個(gè)命令的意思是在git提交的時(shí)候自動(dòng)將CRLF替換成LF
2、在工作目錄下創(chuàng)建一個(gè).gitattributes文件,添加如下內(nèi)容:
text=auto text eol=lf參考Git End-of-Line Normalization by AutoCRLF with Input
使用編輯器替換
這里介紹使用webstorm自動(dòng)替換,打開file,setting:
這會在每次保存時(shí)自動(dòng)保存為unix風(fēng)格的文件結(jié)束符
總結(jié)
以上是生活随笔為你收集整理的windows下搭建Vagrant+Virtualbox环境的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: koa --- seesion实现登录
- 下一篇: koa --- jwt实现最简单的To