Docker大家应该都了解吧,一个非常方便的技术,可以让我们随时随地部署应用。但是部署应用虽然方便了,开发环境的搭建还是那样的,要自己安装一大堆软件。那么有没有类似的工具可以方便我们呢?这就是本文要的介绍的Vagrant。
Vagrant是利用虚拟机技术的一个工具,可以方便我们搭建开发环境,并在虚拟机和本地之间方便的同步文件、开发和调试项目。如果你在Windows下开发程序,但是需要在Linux下调试,那么Vagrant很好用,它的自动同步文件功能可以无缝同步,感觉就好像直接在Linux下开发一样。
安装Vagrant
Vagrant是基于虚拟机的,所以需要首先安装虚拟机软件。Vagrant对于VirtualBox的支持是免费的, 所以我们安装VirtualBox就好了。首先要到VirtualBox官网下载安装VirtualBox。
VirtualBox下载地址:
https://www.vagrantup.com/downloads.html
然后就可以下载安装Vagrant了,它会自动添加环境变量,所以安装完之后就可以直接运行vagrant命令了。下载地址(速度比较慢,最好有代理):
set http_proxy=127.0.0.1:1080set https_proxy=127.0.0.1:1080
配置代理
Vagrant服务器在国外,下载安装和使用的时候速度比较慢。所以最好有一个通畅的网络代理,不然下载速度慢到窒息。
首先是终端代理。在终端使用命令启动和运行Vagrant的时候,它会自动下载镜像,所以首先要设置终端代理。如果你用的是cmd的话,就这样设置代理。
vagrant plugin install vagrant-proxyconf
如果你在Windows上使用Git Bash或者在Linux系统上运行的话,就这样设置代理。
Vagrant.configure("2") do |config| # 配置代理选项 if Vagrant.has_plugin?("vagrant-proxyconf") config.proxy.http = "http://localhost:10800" config.proxy.https = "http://localhost:10800/" config.proxy.no_proxy = "localhost,127.0.0.1,.example.com" end # ... other stuff
假如在虚拟机中需要代理来运行命令的时候,可以在Vagrant中安装以下插件,它会自动设置虚拟机中的代理。
vagrant plugin install vagrant-proxyconf
安装完毕之后,需要在Vagrant配置文件中进行配置。
Vagrant.configure("2") do |config| # 配置代理选项 if Vagrant.has_plugin?("vagrant-proxyconf") config.proxy.http = "http://localhost:10800" config.proxy.https = "http://localhost:10800/" config.proxy.no_proxy = "localhost,127.0.0.1,.example.com" end # ... other stuff
启动项目
配置好了之后就可以创建项目了。首先创建一个空文件夹,然后在其中运行下面的命令来创建Vagrant项目。创建项目的时候需要指定虚拟机使用的系统,Vagrant Cloud上有大量官方镜像和社区镜像,几乎可以满足你的任何需求,CentOS、Arch、Fedora等镜像也都支持,甚至也有一些打包了开发环境的定制镜像。这里我用的镜像是官方的Ubuntu 18.04.
vagrant init ubuntu/bionic64
命令运行完毕会生成一个Vagrant配置文件,指定了Vagrant和底层虚拟机的各项设置。默认配置去掉注释之后应该类似下面这样。这个配置文件其实是一个Ruby文件,Vagrant那一行是Vagrant版本,不用动,我们如果要编辑配置文件的话,直接将选项写到中间的部分就好了。
Vagrant.configure("2") do |config| config.vm.box = "ubuntu/bionic64"end
然后就可以启动Vagrant,相关命令如下,它们实际上对应的也是底层的虚拟机启动和关闭命令。我们要启动项目的话,自然使用第一条命令启动虚拟机就可以了。
vagrant up # 启动/创建虚拟机vagrant halt # 正常关闭虚拟机vagrant suspend # 挂起虚拟机,也就是睡眠功能vagrant destroy # 删除虚拟机和其文件
配置好代理的话,系统镜像应该几分钟内就可以下载完成。然后Vagrant会自动帮我们创建好虚拟机并配置好各种功能。如果这时候打开VirtualBox软件的话,也会看到生成的虚拟机系统。
进入虚拟机系统
Vagrant会自动配置好虚拟机的SSH端口,以及免密登录SSH。所以我们只需要运行下面的命令即可进入Vagrant系统的终端。
vagrant ssh
这样就进入到了一个真正的Linux虚拟机系统中。如果要安装软件的话,也可以使用apt等系统对应的包管理器来安装。
Vagrant还有一个非常好用的功能就是自动同步,现在我们在项目中创建一个文件,例如简单写一个Python脚本。
#! /usr/bin/env python3import platformprint(platform.platform())
然后在虚拟机中切换到/vagrant目录下,可以看到这个目录下也出现了相同的文件。没有错,Vagrant会自动将项目中的所有文件同步到该文件夹下。这是非常方便而且实用的一个功能。有了它,我们可以在Windows中利用任何喜欢的软件来开发程序,然后在虚拟机中调试和运行程序,而完全不用关注底层的工作,因为Vagrant会帮我们做好这一切。
启动脚本
Vagrant还支持一个名为启动脚本的功能,它允许我们在运行vagrant up命令启动虚拟机的时候,自动执行一个脚本,来完成一些任务,这些任务可以是安装某些必备软件,可以是从Github上克隆某些项目,也可以是复制或者删除某些项目文件。总之,我们可以将一些必需任务写成脚本,然后让Vagrant自动执行,这样就可以实现“可移植”的开发环境。当别人使用了我们的Vagrant项目,不需要任何额外工作,直接启动项目,就能得到和我们完全一样的开发环境。而这正是Vagrant的目标之一。
这个功能其实也很简单,首先创建一个shell脚本文件,,假设文件名为bootstrap.sh,在其中编写我们需要的操作。然后只需要在配置文件中添加如下的配置即可。
Vagrant.configure("2") do |config| # 以下这一行是重点 config.vm.provision :shell, path: "bootstrap.sh"end
这样,在启动项目和虚拟机的时候,就会自动执行bootstrap.sh脚本文件。
如果觉得本文有帮助的话,欢迎收藏转发加评论,大家一起交流进步呀!