快速打造跨平臺開發環境 vagrant + virtualbox + box

工欲善其事必先利其器,開發環境 和 開發工具 就是 我們開發人員的劍,所以我們需要一個快并且好用的劍


關于本篇博文有視頻講解的:vagrant打造跨平臺可移動的開發環境


剛開始做開發的時候的都是把開發環境 配置在 自己的電腦上,隨著后面我們接觸的東西越來越多,慢慢的電腦上都是各種環境了,php,java,python,nodejs等等,非常麻煩,并且經常由于某種原因就把電腦重裝了,ORZ,所以環境都要重來。所以打造一個屬于自己并且可以移動的環境是非常重要的。

vagrant就是一款構建虛擬開發環境的工具,支持window,linux,mac,總有一款適合你。并且vagrant 可以把配置好的環境打包成一個box,分享給其他人直接使用,非常方便

vagrant-virtualbox-ubuntu-post-title.png

系統要求:(本人mac系統)

機器支持虛擬化,有時候需要調整bios開啟cpu虛擬化。

第一步:安裝virtualbox (本人virtualbox版本 4.3.30)

               具體安裝包請直接從官網下載:https://www.virtualbox.org/wiki/Downloads

第二步:  安裝 vagrant (本人vagrant 版本 Vagrant 1.6.3)

$ vagrant -v
Vagrant 1.6.3
具體安裝包請直接從官網下載:

第三步:vagrant 基本命令

官網文檔:https://www.vagrantup.com/docs/getting-started/index.html


vagrant init        初始化vagrantfile
vagrant add box     添加box,自動幫你生成vagrantfile
vagrant halt        關閉虛擬機
vagrant destroy     銷毀虛擬機
vagrant ssh         連接虛擬機
vagrant reload      重新加載vagarntfile文件
vagrant suspend     暫時掛起虛擬機
vagrant status      查看虛擬機運行狀態

第四步:示例演示

4.1 下載box

下面是ubuntu的兩個官方地址:
Ubuntu precise 32 VirtualBox http://files.vagrantup.com/precise32.box
Ubuntu precise 64 VirtualBox http://files.vagrantup.com/precise64.box
如果你要其他系統的鏡像,可以來這里下載:http://www.vagrantbox.es/             
$ mkdir -p  ~/vagrant/boxes
$ cd ~/vagrant/boxes && wget  
$ vagrant box add ubuntu64 precise64.box //添加box

4.2 新建一個lnmp(linux + nginx + mysql + php-fpm)虛擬機

$ cd ~/vagrant && mkdir lnmp
$ cd lnmp
$ vagrant init ubuntu64 //初始化
$ vagrant up //啟動虛擬機lnmp
$ vagrant ssh //進入虛擬機lnmp

這個虛擬機就新建好了,是不是很快??!熟悉linux的就可以修改源,安裝軟件了

$ sudo apt-get install  keychain nginx mysql-server mysql-client  php5-cli php5-fpm php5-gd php5-mysql

具體過程還可以參考我的博文:ubuntu12.04 安裝 php5.4/php5.5


第五步:個性化配置Vagrantfile

在進行 vagrant init 之后我們會發現對應的目錄下有個Vagrantfile文件

直接上截圖,就不一個一個解釋了



第六步:導出自己的box

$ cd ~/VirtualBox\ VMs/phponubuntu64
$ vagrant package  --output lamp5_5onubuntu64.box --base phponubuntu64


注意事項

問題一)使用 Apache/Nginx 時會出現諸如圖片修改后但頁面刷新仍然是舊文件的情況,是由于靜態文件緩存造成的。需要對虛擬機里的 Apache/Nginx 配置文件進行修改:

#nginx配置
sendfile off
#apache 配置
EnableSendFile off 

問題二:啟動多個虛擬機提示錯誤“2222 端口 in use”

解決辦法:(參考文章:Vagrant SSH errors with multiple VMs: Port 2222 in use)

config.vm.network "forwarded_port", guest: 22, host: 2220 ,id: 'ssh'


問題三:如果遇到 php 代碼也感覺被緩存起來了,請關閉apc,opcode(從php5.5及以后版本默認開啟opcode)


問題四:config.vm.boot_timeout


Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.

If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.

If you're using a custom box, make sure that networking is properly
working and you're able to connect to the machine. It is a common
problem that networking isn't setup properly in these boxes.
Verify that authentication configurations are also setup properly,
as well.

If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value.

類似如上的錯誤日志,本人解決方案是,設置=>網絡=>高級=>選中 cable connected


問題五:GUI模式waiting for network configuration

waiting for network configuration
waiting an additional 60 seconds for network configuration

這個是網絡配置有問題,直接進去虛擬機 編輯 /etc/network/interfaces 刪除不需要的,


問題六:Warning: Authentication failure. Retrying...

那么把 https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub   公鑰放到authorized_keys 文件中,重新vagrant reload 

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key


我個人操作步驟是

  1. 刪除authorized_keys 

  2. vagrant reload

  3. 在上述鏈接的內容 放到 虛擬機 authorized_keys 中

  4. vagrant reload


問題七:mount: unknown filesystem type 'vboxsf' centos ubuntu 處理方案

Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

mount: unknown filesystem type 'vboxsf'


可能大家在使用vagrant的時候經常遇到以上提示,這個時候只是共享目錄無法使用,虛擬機已經在運行了


下面是我處理的方法,貼出來與大家分享;


ubuntu系統處理方案

sudo apt-get update
sudo apt-get install virtualbox-guest-utils

以上兩條代碼,ubuntu系統我就處理好了。重啟虛擬機


<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>