现在我们已经有了一个运行 Ubuntu 的虚拟机,并且可以在宿主机上编辑文件并自动同步到虚拟机。现在让我们安装一个 web 服务器,通过服务器访问这些文件。
可以通过 SSH 进入并安装一个 web 服务器并开始工作,但每个使用 Vagrant 的人都必须这样做。相反,Vagrant 内置了对自动配置的支持。使用此功能时,Vagrant 将在执行 vagrant up
时自动安装软件,以便 guest 机器可以重复创建并可立即使用。
可以通过 shell 脚本来为刚才的项目设置 Apache。创建下面的 shell 脚本并命名为 bootstrap.sh
,保存在 Vagrantfile 文件相同的目录下:
#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
rm -rf /var/www
ln -fs /vagrant /var/www
fi12345678
然后,配置 Vagrant 在设置机器的时候运行这个脚本。编辑 Vagrantfile 文件:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
config.vm.provision :shell, path: "bootstrap.sh"
end1234
“provision” 行是新添加的,告诉 Vagrant 使用 shell 命令执行 bootstrap.sh
文件来设置虚拟机。文件路径是相对于 Vagrantfile 文件所在的项目根目录的相对路径。
配置写完后,执行 vagrant up
,Vagrant 会自动配置。可以在终端看到 shell 脚本的输出。如果虚拟机已经启动了,则需要执行 vagrant reload --provision
,这会快速重启虚拟机并跳过初始化导入阶段。因为 Vagrant 只会在第一次 vagrant up
启动虚拟机的时候自动运行 provisioner,所以需要在 reload 命令中使用 provision 标志指示 Vagrant 必须运行 provisioner。
Vagrant 运行结束后,web 服务器会成功运行。现在还不能在宿主机的浏览器上查看网页,但可以在通过 SSH 进入虚拟机后,通过加载文件来判断配置是否生效:
$ vagrant ssh
...
vagrant@precise64:~$ wget -qO- 127.0.0.1123
上面例子会正常工作。我们安装 Apache 并设置其默认的 DocumentRoot 指向我们的 /vagrant
这个默认的同步目录。
可以创建更多文件并在终端查看,下一步需要配置网络选项以便用宿主机的浏览器访问虚拟机。
对于复杂的配置脚本,将自定义的 Vagrant box 与预先安装的软件包打包在一起,而不是每次构建它们可能会更高效。入门指南未涵盖此主题,但可以在 自定义 box 文档中找到该主题。
原文:https://www.cnblogs.com/liuwei-xd/p/11020283.html