Docker 解决了同一机器上的环境隔离问题,提高了运维部署的效率。 Vagrant 给开发提供一个统一的开发、测试、接近于完全隔离的环境。本文,主要讨论如何使用 Vagrant 搭建 Django 开发环境。版本:VirtualBox 5.0,Vagrant 1.8。
1. 基本概念
1.1 Vagrant
Vagrant 是一个用来构建虚拟开发环境的工具,其本身并不提供虚拟化功能,而是通过管理虚拟机以实现开发环境的构建。Vagrant 基于 Ruby ,主要以命令行的方式运行。Vagrant 底层支持 VirtualBox、VMware 甚至 AWS 作为虚拟机系统,可以非常方便地设置各种虚拟机环境。
1.2 Boxes
Boxes 是一个后缀为 box 的文件,实际上它是一个包含了虚拟机配置、虚拟机硬盘镜像和 Vagrant 配置的压缩包。
2. 使用 Vagrant
2.1 安装 Vagrant
- 安装 VirtualBox, https://www.virtualbox.org/
- 安装 Vagrant, https://www.vagrantup.com/
2.2 选择镜像并启动
通常,需要基于某一个基础镜像去构建需要的软件环境,比如,CentOS、Ubuntu 等。官网上提供了大量的镜像, 可以前往 http://www.vagrantbox.es/ 选择合适的镜像 Boxes 文件。第一步,添加 box
|
|
这里的 name 是给 path 指向的 Boxes 的本地名称, path 使用远程的 URL 或者 本地路径均可。第二步,初始化环境
|
|
使用 name 镜像初始化当前目录,在工作目录创建一个 Vagrantfile 配置文件。第三步,启动环境
|
|
启动一个虚拟机。虚拟机是使用 Boxes 文件创建的,首先根据 Vagrantfile 文件中 config.vm.box 的配置找到 Boxes 文件,如果本地没有,将会从官网查找下载。第四步,SSH 登录Windows 终端并不支持 ssh,所以需要安装第三方 SSH 客户端。笔者使用的是 Xshell。
2.3 常用 Vagrant 命令
|
|
2.4 配置代理
针对无法自由访问外网的开发环境,可以通过配置代理解决网络问题。
|
|
安装 vagrant-proxyconf
|
|
配置 Vagrantfile全局配置新建 $HOME/.vagrant.d/Vagrantfile,编辑内容
|
|
2.5 Vagrant 的网络配置
Vagrant 通过配置文件能够支持 VirtualBox 的 NAT、Bridged 以及 Hostonly 网络。
- NAT 网络
默认情况,Vagrant 建立的 VM 具有一个 NAT 网卡。
- Bridged 网络
当采用如下配置语句时,Vagrant 建立的 VM 具有一个 Bridged 网络
|
|
此时,VM 在宿主机所在的 LAN 中相当于一台物理机器。可以通过路由器的 MAC 绑定,为 VM 保留一个固定的 DHCP 地址,这样 VM 无论何时启动都会获取到相同的IP地址。
- Hostonly 网络
当采用如下配置语句时,Vagrant 建立的 VM 具有两个 Hostonly 网络
|
|
- 混合网络
当采用如下配置语句时,Vagrant 建立的 VM 具有一个 NAT 和一个 Hostonly 网络
|
|
标识符 private_network 总是被映射为 VirtualBox 的 Hostonly 模型。Vagrant 在创建网卡时,如果配置文件仅配置了一个 private_network,则 Vagrant 自动创建 NAT 网卡,然后在创建配置文件所描述的网络;而如果配置文件指定了两个以上的 private_network 的话,Vagrant 不再自动创建 NAT 网卡了。混合网络非常适合开发和测试环境,可以通过 NAT 和 Internet 相通,多个 VM 之间也能相互通信。
- 内外网络
当采用如下配置语句时,Vagrant 建立的 VM 具有一个 Bridged 和一个 Hostonly 网络
|
|
这是比较通用的配置模式,VM 既有 Host 主机所在局域网的 IP ,又有一个私有网络的 IP 地址,因此这些 VM 之间具有全连通性。
2.6 端口转发
当采用如下配置语句时,Vagrant 将 host 机器上 80 端口的访问请求转发到虚拟机的 80 端口的服务上
|
|
例如,在虚拟机上使用 Nginx 跑了一个 Django 应用,那么在 host 机器上的浏览器中打开http://localhost:80 时,Vagrant 就会把这个请求转发到 VM 里面跑在 80 端口的 Nginx 服务上,因此可以通过这个设置设定 host 和 VM 之间,或是 VM 和 VM 之间的信息交互。
2.7 挂载目录
Vagrant 启动时,默认将当前目录挂载在 /vagrant。 还可以通过配置来设置额外的挂载目录:
|
|
上面这个设定,第一个参数是主机的目录,第二个参数是虚拟机挂载的目录
3. Django 的 Vagrant 环境
3.1 本地安装
从 http://pypi.o.tc.com/vagrant/xx-django1.8-u3.box 下载 Box 文件 xx-django1.8-u3.box。这个镜像包含了MySQL、RabbitMQ 等 Django 开发所需环境。数据库 root 账户默认密码为空。
|
|
3.2 Vagrantfile 配置
|
|
宿主机 hosts 配置,便于使用域名直接访问
|
|
|
|
使用账户 vagrant:vagrant SSH 登录 127.0.0.1:2222。
3.3 Django 配置
Vagrant 默认将本地目录挂载在 /vagrant 目录。在本地目录新建 app 目录,将 Django 工程拷贝到 app 中。切换到应用工作目录
|
|
安装依赖包
|
|
创建数据库
|
|
启动 Django
|
|
通过 Navicat 访问数据库需要授权
|
|
4. 参考
- https://blog.hedzr.com/2017/05/02/vagrant-%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE/