百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>服务器> Mac下部署VirtualBox + Vagrant配置教程
分享文章到:

Mac下部署VirtualBox + Vagrant配置教程

发布时间:01/15 来源: 浏览: 关键词:
Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境

实现从集中化安装 ==> 环境配置 ==> 应用部署 全自动化的auto deployment.

一. 环境部署
Local system: MAC OS X 10.10.5
VirtualBox: VirtualBox-4.3.30
Vagrant: vagrant_1.7.3
Vagrant sample system: CentOS6.7 x64
1.本地安装VirtualBox
下载地址: http://download.virtualbox.org/virtualbox/4.3.30/VirtualBox-4.3.30-101610-OSX.dmg
2.本地安装Vagrant(需VPN)
下载地址: https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.3.dmg
TIPS: 这里如果之前安装过低版本的vagrant, 务必使用自带uninstall.tool卸载低版本, 并删除家目录下vagrant.d与vagrant目录, 避免出现随后的秘钥认证BUG.
二. Vagrant配置
开发人员使用Vagrant的初衷是获取运维人员定制好的box模板, CLI进入开发环境.
这里我们可以去官方下载现成模板文件(http://vagrantcloud.com), 也可以自己定制的模板文件.
由于远程下载模板会耗费大量的时间, 笔者这里会详细配置如何本地定制vagrant模板文件, 这样也可以避免使用第三方的box带来的安全隐患
1.在Virtualbox新建虚拟机并安装CentOS 6.7 x64(略)
安装完毕后, 我们可以定制这个系统需要配置系统参数以及需要安装的所有程序, 例如JAVA, PHP, PYTHON, Apache, Nginx etc…
方便我们给程序员构建一个完整的系统平台.
2.配置虚拟机网卡为NAT模式, 并设置端口映射(port forwarding)

QQ20151019-1@2x

[Name: SSH, Protocol: TCP, Host IP: 127.0.0.1, Host Port: 2222, Guest IP: blank, Guest Port: 22]
QQ20151019-1@2x
3.进入安装好的CentOS控制台命令行
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
删除所有, 加入以下内容
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
# service network restart
3.查看本地2222端口是否映射到虚拟机22端口
# lsof -i:2222
SSH登陆虚拟机映射端口
# ssh -p2222 root@127.0.0.1
成功登陆则NAT配置完成
Tip: 这里vagrant的SSH认证是通过vbox NAT的方式进行连接, 不可以用桥接模式, 配置完成保证虚拟机可以连接外网.
4.封装打包
这里进入虚拟机
1).创建一个用户名密码都为vagrant的账户.
# adduser vagrant && passwd vagrant
2).忽略vagrant账户的密码提示.
# visudo
添加:
vagrant ALL=(ALL) NOPASSWD:ALL
3).修改root密码为vagrant
# passwd
4).为vagrant创建一个本地MAC到CentOS的秘钥认证
# cd /home/vagrant
# mkdir .ssh
# vi .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key
# chmod 700 .ssh
# chmod 600 .ssh/authorized_keys
# chown -R vagrant:vagrant .ssh
# service sshd restart
5).安装GUEST TOOLS
a.下载VBoxGuestAdditions并在创建的虚拟机内加载该镜像
http://download.virtualbox.org/virtualbox/4.3.30/VBoxGuestAdditions_4.3.30.iso
# mkdir /mnt/cdrom && mount /dev/cdrom /mnt/cdrom
# cd /mnt/cdrom
安装GUEST TOOLS依赖包
# yum install gcc kernel-devel-2.6.32-573.el6.x86_64 perl -y
执行安装脚本
# ./VBoxLinuxAdditions.run
重启系统使其生效
5.在MAC上执行最终的打包工作
# sudo vi /opt/vagrant/embedded/gems/gems/vagrant-1.7.3/plugins/communicators/ssh/communicator.rb
找到171行,将该行替换成:
@machine.env.data_dir.join("private_key").open("w+") do |f|
TIPS: Fix在vagrant1.73在MAC上使用vagrant package的BUG(已被逼到砸键盘...)
# cd ~/Work/vagrant
# vagrant package --base "centos6.7_x64 Clone" from virtualbox --output CentOS-6.7-x86_64-201511015.virtualbox.box
Tips: centos6.7_x64 Clone为在virtual box创建的虚拟机名, 可用VBoxManage list vms获取.
==> centos6.7_x64 Clone: Attempting graceful shutdown of VM...
    centos6.7_x64 Clone:
    centos6.7_x64 Clone: Vagrant insecure key detected. Vagrant will automatically replace
    centos6.7_x64 Clone: this with a newly generated keypair for better security.
    centos6.7_x64 Clone:
    centos6.7_x64 Clone: Inserting generated public key within guest...
    centos6.7_x64 Clone: Removing insecure key from the guest if it's present...
    centos6.7_x64 Clone: Key inserted! Disconnecting and reconnecting using new SSH key...
    centos6.7_x64 Clone: Guest communication could not be established! This is usually because
    centos6.7_x64 Clone: SSH is not running, the authentication information was changed,
    centos6.7_x64 Clone: or some other networking issue. Vagrant will force halt, if
    centos6.7_x64 Clone: capable.
==> centos6.7_x64 Clone: Forcing shutdown of VM...
==> centos6.7_x64 Clone: Clearing any previously set forwarded ports...
==> centos6.7_x64 Clone: Exporting VM...
==> centos6.7_x64 Clone: Compressing package to: /Users/leonli/Work/vagrant/CentOS-6.7-x86_64-201511015.virtualbox.box
最终生成CentOS-6.7-x86_64-201511015.virtualbox.box模板文件.
3.使用该模板
# cd ~/Work/vagrant
# vagrant box add -name CentOS-6.7 ./CentOS-6.7-x86_64-201511015.virtualbox.box
# vagrant init CentOS-6.7
# vi Vagrantfile
TIPS: Fix vagrant1.73 for mac极其坑人的BUG, 原因就是加入这两行会阻止vagrant up时重新向虚拟机模板更新vagrant用户的公钥, 如果不阻止则在启动虚拟机的时候会出现"Authentication failure. Retrying..."的错误, 这个New feature我理解的初衷应该是为了提高安全性, 但你模板的公钥更新了, MAC的私钥呢亲?  ?(???)? 也是醉了...
老外吐槽版传送门: https://github.com/mitchellh/vagrant/issues/5186
倒数第二行, 即end前添加
config.ssh.insert_key = false
config.ssh.pty= true
# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> 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 => 2222 (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: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /Users/leonli/Work/vagrant
# vagrant ssh
若直接登录虚拟机成功, 则大功告成.
TIPS: 程序员如果是windows平台, 则可以直接去下载安装win版本的vagrant和virtualbox, 然后cmd进行模板加载操作.
常见命令
vagrant suspend 将虚拟机置于休眠状态。这时候主机会保存虚拟机的当前状态。再用vagrant up启动虚拟机时能够返回之前工作的状态。这种方式优点是休眠和启动速度都很快,只有几秒钟。缺点是需要额外的磁盘空间来存储当前状态。
vagrant halt 则是关机。如果想再次启动还是使用vagrant up命令,不过需要多花些时间。
vagrant destroy 则会将虚拟机从磁盘中删除。如果想重新创建还是使用vagrant up命令。
vagrant reload 从Vagrantfile重新启动虚拟机。
vagrant global-status 输出所有虚拟机当前运行状态,关机、已启动等。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有3人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板