Vagrant使用说明

创建自己的box

安装

最小化安装

  1. 用户vagrant,密码vagrant

    这个安装的时候设置就好了,如果是CentOS会让你选择是否让这个用户做管理员,勾选就好了。其他的后面再设置。
    
  2. 设置.ssh/authorized_keys

mkdir -p $HOME/.ssh
wget --no-check-certificate https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -O $HOME/.ssh/authorized_keys
chmod 0700 $HOME/.ssh
chmod 0600 $HOME/.ssh/authorized_keys
chown -R vagrant $HOME/.ssh

这里原来就是以vagrant@vagrant为例,后来觉得vagrant这个单词不好拼,索性改用户名吧,为了方便不同用户名的读者复制代码,把里面的绝对路径都改成了带环境变量的。改了用户名以后用vagrant ssh就没法直接登录了,需要在Vagrantfile里面指定
`config.ssh.username = “frost”

更新系统

Debian:
sudo apt-get update && sudo apt-get dist-upgrade

CentOS:
sudo yum update

安装VirtualBox Guest Additions

设备->安装VirtualBox Guest Additions,就可以把相应的iso『放在』虚拟机的光驱里。只有安装了这些附加功能才能正常用端口映射和目录同步功能。

Debian

apt-get install build-essential module-assistant
m-a prepare
cd /media/cdrom
sh VBoxLinuxAdditions-x86.run

CentOS

sudo yum groupinstall "Development Tools"
sudo yum install kernel-devel
sudo mkdir /media/cdrom/
sudo mount /dev/cdrom /media/cdrom/
sudo ./VBoxLinuxAdditions.run

配置用户权限

  1. 设置vagrant用户的sudo权限

    Debian: 
    
    `root@debian:~# gpasswd -a vagrant sudo`
    
  2. 设置vagrant用户的sudo权限无需密码

    `root@debian:~# visudo`
    

把下面这行

`%sudo    ALL=(ALL:ALL) ALL`

改成

`%sudo    ALL=(ALL:ALL) NOPASSWD:ALL`

这是Debian的习惯,CentOS系的用的组是wheel,所以也是一样把相应的wheel组的设置改一下。

其他

如果还要安装其他的包,这时候可以开始了,当然也可以之后用vagrant登陆再安装。

打包

vagrant package --base Debian --output Debian.box

添加

vagrant box add --name Debian Debian.box

设置自己的box

生成配置

到你喜欢的目录执行vagrant init,会生成一个Vagrantfile的文件,按下面的说明做一些修改。

基本配置

config.ssh.insert_key = false
config.vm.box = "Debian"

同步目录

config.vm.synced_folder "./Code", "/home/vagrant/Code"

端口映射

这里只添加一条HTTP用的80端口,需要其他的可以再添加。
config.vm.network "forwarded_port", guest: 80, host: 8000

使用自己的box

开机

正常开机vagrant up

关机

优雅的关机vagrant halt

重启

标准的重启 vagrant reload

注意,以为我的经验来看,如果你直接在虚拟机中用reboot或者shutdown -h了,很可能会引起不可预知的错误,比如镜像恢复到最初状态,所有软件被重置。所以如果可能,请使用上面说的这三个命令。

登陆

vagrant ssh因为前面已经设置了免密码登陆,所以这时候就可以很任性的随意登陆了。

后记

所以现在我们安装完一个完整的方便分发的开发环境了,然而有什么用呢?

想象一下这样的场景,你有一台配置还可以的Windows电脑,然后你需要Linux下的开发环境。这时问题来了,如果你装个虚拟机,在虚拟机里开发,那你就和你喜欢的IDE无缘了—-这么说有点绝对,你还是可以用sftp之类的协议实现文件同步的,但明显没有我们现在这种方式优雅。

设置一个同步目录,你在本地任性的用你喜欢的任何IDE写代码,写完之后访问127.0.0.1:8080就可以访问,这是一种什么样的体验啊?(当然,如果你有多个域名要用,还是配个本地域名比较好)

还有,你说我是Mac,什么服务器,开发语言都可以安装在本地,和Linux也没有什么差别。这个问题我也考虑过,但我个人的爱好是把他们隔离开。你的Mac上安装个Apache了,Nginx了总感觉怪怪的,而且搞不好这些东西哪里配置不好你的宿主机都无法工作了。所以,用虚拟机是成本最低的一种方式了。

我上面总结的这些仅限于个人使用,团队用的话还需要更多的配置,例如前面使用了insecure key,这就是不适合团队用的——但我还没有见过有团队用这个东西,至于puppet/chef更是没见过了。需要用到的时候再了解也不晚。

    原文作者:UnixAgain
    原文地址: https://segmentfault.com/a/1190000004548457
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞