Mac下部署VirtualBox + Vagrant配置教程

实现从集中化安装 ==> 环境配置 ==> 应用部署 全自动化的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)

[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 输出所有虚拟机当前运行状态,关机、已启动等。

时间: 2024-09-20 00:46:14

Mac下部署VirtualBox + Vagrant配置教程的相关文章

Windows2003下php5.4安装配置教程(IIS)_php技巧

本文与<Windows2003下php5.4安装配置教程(Apache2.4)>(点击打开链接)为姊妹篇,只是php所用的服务器有点不同,这里一个是Apache2.4,一个是Windows2003自带的IIS服务器. 一.在Windows2003安装IIS 1.首先打开Windows2003的控制面板,查看是否有"管理工具",没有也不要紧,点击"添加或删除程序".有的话,可以直接进入第二步,IIS的配置. 2.在弹出的窗口,选择添加/删除Windows组

Windows2003下php5.4安装配置教程(Apache2.4)_php技巧

直接配置php一直使用如同<[php]本地开发环境的部署与helloworld>的一键傻瓜包,被批为极度不专业,关键是这些一键傻瓜包LAMP的版本不好控制,端口什么的也不好调.曾经在Linux系统下自己配置过LAMP的php环境,详见<Ubuntu下LAMP环境配置教程(linux)>(点击打开链接)与<Ubuntu下图形化LAMP环境配置教程(linux)>(点击打开链接),但由于各种原因,在Windows2003系统下如何一步一步地搞出php的环境,一直没有好好研究

Mac下搭建php开发环境教程_服务器其它

Mac OS X 内置了Apache 和 PHP,这样使用起来非常方便.本文以Mac OS X 10.6.3为例.主要内容包括: 启动Apache运行PHP安装MySQL使用phpMyAdmin配置PHP的MCrypt扩展库设置虚拟主机 启动Apache 有两种方法: 打开"系统设置偏好(System Preferences)" -> "共享(Sharing)" -> "Web共享(Web Sharing)"打开"终端(te

CentOS下Web Panel安装配置教程

以前的一篇文章中介绍了一下CentOS Web Panel,以及CWP的安装教程.不过对如何配置和使用并没有说明,今天就具体说一下如何配置CWP,以及CWP的主要功能.   主要设置包括CPW 设置,服务器设置.Apache和PHP设置如果没有特殊需求,采用默认配置就好.     CWP 设置   共享IP   首先需要设置共享IP,在CWP下的Edit Settings 下可以设置.系统会默认识别你的公网IP作为共享IP,如果你有多个IP,或者你需要在局域网内测试使用的话,手动设置为你想要的I

Windows下php+mysql5.7配置教程

WINDOWS 下 PHP+MYSQL配置 下载mysql 地址:https://dev.mysql.com/downloads/ 点击Community 点击DOWNLOAD 选择下载的版本 点击 No thanks, just start my download. 下载得到mysql-5.7.18-winx64.zip 解压到C盘根目录,并改名为mysql57,进入mysql57,新建txt文件,改名为my.ini,打开该文件,添加下列配置信息. [mysqld] #mysql根目录 bas

Linux下ClusterShell安装与配置教程

ClusterShell的安装与配置 ClusterShell的安装很Easy,如果使用APT或YUM包管理方式的话,基本就是一条命令的事儿,我就不说了,这里说一下如何从源代码安装,需要在源代码目录执行如下命令: shell> python setup.py install 为了使用的方便,还需要拷贝配置文件到指定目录: shell> mkdir /etc/clustershell shell> cp conf/* /etc/clustershell 接着配置我们要管理的节点,假设我们配

linux下Gentoo安装kde5配置教程

kde5出来已经很长一段时间了,虽然没有达到完全可用的程度,但从目前个人使用来看,日常使用也基本差不多了.下面把个人安装使用的一些方法做一说明,仅供参考. 参考:https://wiki.gentoo.org/wiki/KDE/Overlay 1.添加kde的overlay: layman -a kde echo -e "-qt5" >> /etc/portage/profile/use.stable.mask 或者在/etc/portage/make.conf的USE中添

Windows7下的php环境配置教程_php技巧

一:下载程序包 首先到php官网下载程序包,官网地址: http://www.php.net/downloads.php 二:解压 解压你的程序包,放在除c盘外的目录下(文件夹非中文命名) 三:修改php安装包文件 在php根目录下找到"php.ini-development"并修改为:"php.ini" php.ini中找到(如下的自己没有设置) 找到下列语句,并将这些语句前的「;」去掉: 复制代码 代码如下: ;extension=php_gd2.dll ;ex

linux下Nginx中文域名配置教程

ginx虚拟主机上绑定一个带中文域名,比如linuxeye.中国,浏览器不能跳转. why? 因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS服务器上并不支持直接的中文域名解析,所有中文域名的解析都需要转成punycode码,然后由DNS解析punycode码.其实目前所说和各种浏览器完美支持中文域名,只是浏览器软里面主动加入了中文域名自动转码,不需要原来的再次安装中文域名转码控件来完成整个流程.  Punycode是一个根据RFC 3492标准而制定的编码系统,