创建自己的box
安装
最小化安装
-
用户vagrant,密码vagrant
这个安装的时候设置就好了,如果是CentOS会让你选择是否让这个用户做管理员,勾选就好了。其他的后面再设置。
设置.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
配置用户权限
-
设置vagrant用户的sudo权限
Debian: `root@debian:~# gpasswd -a vagrant sudo`
-
设置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更是没见过了。需要用到的时候再了解也不晚。