学习、工作和狗粮

Mac安装Vagrant相关资料记录

2018/01/22 Share

参考

如何使用 vagrant 搭建开发环境

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

使用 Vagrant 创建 Ubuntu Desktop 虚拟机

概念

  • 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/xenial64"

# 安装
# 执行之后,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进行服务器和宿主机开发项目构建前端开发测试环境

利用共享目录,那么我们就可以在mac上面进行开发、编译,之后把项目跑在虚拟机的服务器(如:nginx)之上

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
# 宿主机存储虚拟机的`Vagrantfile`的目录即是共享目录,在虚拟机中映射到`/vagrant`
vagrant@ubuntu-xenial:/vagrant$ ll
total 52
drwxr-xr-x 1 vagrant vagrant 192 Jan 28 12:52 ./
drwxr-xr-x 24 root root 4096 Jan 27 05:12 ../
drwxr-xr-x 1 vagrant vagrant 96 Jan 20 02:28 .vagrant/
-rw-r--r-- 1 vagrant vagrant 3388 Jan 21 12:13 Vagrantfile
-rw-r--r-- 1 vagrant vagrant 14 Jan 28 12:52 index.html
-rw------- 1 vagrant vagrant 38334 Jan 27 05:12 ubuntu-xenial-16.04-cloudimg-console.log

# 配置nginx
cd /etc/nginx/sites-enabled
# 因为nginx.conf默认包含:include /etc/nginx/sites-enabled/*; 这样的配置;
vim project.conf
# 编辑指定/vagrant/为默认server的根目录
server {
listen 80 default;
#root /home/vagrant/project/vue-webpack-tmpl/dist;
root /vagrant/dist/;
}

sudo -su

nginx -t

service nginx -reload

因为我们上面修改了宿主机的hosts文件,那么我们直接就可以得到vagrant中的index.html:

自定义脚本

实际开发情况是复杂的,从 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
# vagrant box add {your_box_name} {your_box_path} // 添加一box到自己的box列表,{your_box_path}可以是本地的,也可以是网络上的box地址。
# vagrant box list // 列出自己所有添加的box
# vagrant init {your_box_name} // 使用box在当前目录下初始化一个machine,如果此处的box是网络上的box地址,则此命令会慢慢把box下载过来之后才执行init,所以建议先下载box
# vagrant up // 启动以上init的machine
# vagrant halt // 优雅地关闭当前目录下启动的machine
# vagrant halt - f // 强制关闭当前目录下启动的machine
# vagrant status // 打印当前machine的状态
# vagrant package // 把当前的运行的虚拟机环境进行打包
# vagrant destroy // 删除当前machine
# vagrant reload // 重启当前machine,重新载入Vagrantfile配置
# vagrant suspend // 挂起当前machine
# vagrant resume // 从挂起恢复
# vagrant plugin // 用于安装/卸载插件
# vagrant ssh // 使用SSH链接machine,宿主机是Windows的需要使用Putty之类的SSH工具链接。
# vagrant ssh -config // 打印当前machine的SSH链接信息。
CATALOG
  1. 1. 参考
  2. 2. 概念
  3. 3. 基本使用
  4. 4. 修改配置
  5. 5. 创建用户
  6. 6. 设置ip
  7. 7. 使用共享目录vagrant进行服务器和宿主机开发项目构建前端开发测试环境
  8. 8. 自定义脚本
  9. 9. vagrant命令行参考