学习、工作和狗粮

Mac安装Vagrant相关资料记录

2018/01/25 Share

参考

如何使用 vagrant 搭建开发环境

如何使用 vagrant 搭建开发环境 视频下载 密码:65bi

概念

  • vagrant 的基本思路是为每一个项目创建自己的一个虚拟机
  • 默认用户,vagrant ssh 登陆进来的用户名是 vagrant,这个用户挺好,执行 sudo 是不需要输入密码的,开发中实际使用挺好用的。
  • 共享文件夹。默认情况下,Vagrantfile 所在的这个文件夹,会自动对应虚拟机里面的 /vagrant 这个目录。这个意味着我不需要在虚拟机里面配置 sublimeText vim git 搜狗输入法 这些工具了,Mac 依旧是我写代码的环境。ubuntu 虚拟机是项目的安装运行环境。这个分工是太合理了!
    • 通常的做法,项目源码就放在 myproject 目录下,把 Vagrantfile 和源码一起用 git 统一控制。

基本使用

1
2
3
4
5
6
7
8
9
10
11

# 镜像box仓库地址: https://vagrantcloud.com/
# 初始化
vagrant init [box name]

# init完成之后目录中就会多出一个文件叫 Vagrantfile 所有的机关也就都在这里了,比如这里面有一句 config.vm.box = "ubuntu/trusty64"

# 安装
# 执行之后,vagrant cloud 网站上下载 box 进行安装
# 第一次安装需要下载box到本地,下载好之后就会使用本地的box去安装(无论第一次还是第n次)
vagrant up

修改配置

  • Vigrant 有一个好处是所有一切都在命令行和配置文件中搞定,这样比图形界面用起来方便的多,所以一般是不需要启动 virtualbox 图形界面的
  • 修改内存:
1
2
3
config.vm.provider "virtualbox" do |v|
v.memory = 2048
end

创建用户

1
2
3
4
5
6
7
8
# --ingroup 保证具有sudo权限
sudo adduser peter --ingroup sudo

# 登录
# 运行 vagrant up 的时候,可以看到有输出:default: 22 => 2222 (adapter 1)
# 意思是虚拟机的22端口映射到了宿主机的2222端口
# 在宿主机登录:
ssh peter@127.0.0.1 -p 2222

设置ip

1
2
3
4
5
6
# 在Vagrantfile中设置虚拟机的ip
config.vm.network :private_network, ip: "192.168.33.21"

# 这样,就可以到 /etc/hosts 文件下面填写,相等于在本地直接进行了【DNS】的手动指定。
192.168.33.21 myproject
# 以后可以在宿主机浏览器中用 myproject 来访问里面的网站了。

手动修改 修改宿主mac hosts

工具:iHosts

自定义脚本

实际开发情况是复杂的,从 vagrant cloud 下载的 box 中不可能包含我所需要的所有工具。这样,我可以制作自己的 box 上传的 vagrant cloud 上面,以备后面自己用,或者分享给朋友。但是另外一个更为灵活的方式是:我就锁定一个干净的 ubuntu 系统 box 。每个项目的虚拟机都基于这个 box 来做,vagrant 有个叫法 Base Box 。 然后我在上面执行脚本来自定制系统。chef puppet 都是可以的,但是有一定的学习难度,最简单的是直接写 shell 脚本。具体操作是这样。

打开 Vagrantfile 文件,在 do-end 块内部添加

1
config.vm.provision "shell", inline: $script, privileged: false

vagrant命令行参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

Typing `vagrant` from the command line will display a list of all available commands.

Be sure that you are in the same directory as the Vagrantfile when running these commands!

# Creating a VM
- `vagrant init` -- Initialize Vagrant with a Vagrantfile and ./.vagrant directory, using no specified base image. Before you can do vagrant up, you'll need to specify a base image in the Vagrantfile.
- `vagrant init <boxpath>` -- Initialize Vagrant with a specific box. To find a box, go to the [public Vagrant box catalog](https://app.vagrantup.com/boxes/search). When you find one you like, just replace it's name with boxpath. For example, `vagrant init ubuntu/trusty64`.

# Starting a VM
- `vagrant up` -- starts vagrant environment (also provisions only on the FIRST vagrant up)
- `vagrant resume` -- resume a suspended machine (vagrant up works just fine for this as well)
- `vagrant provision` -- forces reprovisioning of the vagrant machine
- `vagrant reload` -- restarts vagrant machine, loads new Vagrantfile configuration
- `vagrant reload --provision` -- restart the virtual machine and force provisioning

# Getting into a VM
- `vagrant ssh` -- connects to machine via SSH
- `vagrant ssh <boxname>` -- If you give your box a name in your Vagrantfile, you can ssh into it with boxname. Works from any directory.

# Stopping a VM
- `vagrant halt` -- stops the vagrant machine
- `vagrant suspend` -- suspends a virtual machine (remembers state)

# Cleaning Up a VM
- `vagrant destroy` -- stops and deletes all traces of the vagrant machine
- `vagrant destroy -f -- same as above, without confirmation

# Boxes
- `vagrant box list` -- see a list of all installed boxes on your computer
- `vagrant box add <name> <url>` -- download a box image to your computer
- `vagrant box outdated` -- check for updates vagrant box update
- `vagrant boxes remove <name>` -- deletes a box from the machine
- `vagrant package` -- packages a running virtualbox env in a reusable box

# Saving Progress
-`vagrant snapshot save [options] [vm-name] <name>` -- vm-name is often `default`. Allows us to save so that we can rollback at a later time

# Tips
- `vagrant -v` -- get the vagrant version
- `vagrant status` -- outputs status of the vagrant machine
- `vagrant global-status` -- outputs status of all vagrant machines
- `vagrant global-status --prune` -- same as above, but prunes invalid entries
- `vagrant provision --debug` -- use the debug flag to increase the verbosity of the output
- `vagrant push` -- yes, vagrant can be configured to [deploy code](http://docs.vagrantup.com/v2/push/index.html)!
- `vagrant up --provision | tee provision.log` -- Runs `vagrant up`, forces provisioning and logs all output to a file

# Plugins
- [vagrant-hostsupdater](https://github.com/cogitatio/vagrant-hostsupdater) : `$ vagrant plugin install vagrant-hostsupdater` to update your `/etc/hosts` file automatically each time you start/stop your vagrant box.

# Notes
- If you are using [VVV](https://github.com/varying-vagrant-vagrants/vvv/), you can enable xdebug by running `vagrant ssh` and then `xdebug_on` from the virtual machine's CLI.
-
CATALOG
  1. 1. 参考
  2. 2. 概念
  3. 3. 基本使用
  4. 4. 修改配置
  5. 5. 创建用户
  6. 6. 设置ip
  7. 7. 自定义脚本
  8. 8. vagrant命令行参考