三十而立

vagrant下的文章

通过Vagrant部署开发环境,使用目录共享模式,在本地磁盘进行开发,通过虚拟机环境运行开发的页面。
但如果出现:修改替换了一个css,一张图片,然后刷新浏览器,发现什么都没有变,然后你有非常猛烈、使劲的F5,依旧还是没有改变,是的,你看看编辑器,似乎替换是正常的,在看看VM上的文件,也都是对的,尝试重启nginx依旧没有任何变化,你开始怀疑php5-fpm甚至于毫不相干的memcached和mysql,但都无济于事,也不知道是什么让这些文件被“缓存”了呢。

当你尝试修改一个js,并且用同样的方法更新之后,会遇到类似的问题,是的,就算重启VM上任何服务,甚至重启VM,依旧没有用
,尝试花费很多时间,试验各种各样的方法去解决这个问题,其实对于nginx来说,你只需要修改配置文件(nginx.conf)中的一行重启就能简单的解决这个问题:

sendfile off;  //搜索sendfile

//找到 nginx.conf ,把里面的 “sendfile on” 修改为 “sendfile off”。

当然,如果你使用Apache也可能遇到类似的问题,那么同样也有类似的配置需要修改:

EnableSendfile off

vagrant可以创建局域网,以完成协作开发,具体配置如下:

//打开vagrantfile,添加1台名为phpstudy的虚拟主机,并且设定ip为192.168.0.200,映射目录为D盘下的phpstudy
//注意:ip地址可以为本地局域网192.168.0.***中的任意数字,不冲突就行
config.vm.define "phpstudy" do |phpstudy|
    phpstudy.vm.network "private_network",ip:"192.168.0.200"
    config.vm.synced_folder  "phpstudy", "/vagrant"
    phpstudy.vm.hostname ="phpstudy"
  end

//重启虚拟主机
vagrant reload phpstudy

//创建一个网站
sudo vi /etc/nginx/conf.d/phpstudy.conf
//绑定域名为www.phpstudy.local
server {
  listen        80;
  server_name   www.phpstudy.local;
  root          /vagrant/default;
  index         index.php index.html;
 location / {
    try_files $uri $uri/ /index.php?$query_string;
  }
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
  }
}
//接下来个改hosts文件
//win10在:C:\Windows\System32\Drivers\etc
//winxp在:C:/Windows/System32/drivers/etc/
//win7在: C:\Windows\system32\drivers\etc\hosts
192.168.0.200       www.phpstudy.local

局域网内的电脑,只要修改hosts就能访问虚拟机了。

vagrant在windows下的使用

添加镜像

vagrant box add abc boxpath[url|path] #abc为box名称
vagrant init abc #初始化
vagrant up #启动</code>
vagrant ssh #ssh登录

网络配置
Vagrant的网络有三种模式

1、较为常用是端口映射,就是将虚拟机中的端口映射到宿主机对应的端口直接使用 ,在Vagrantfile中配置:

config.vm.network :forwarded_port, guest: 80, host: 8080

guest: 80 表示虚拟机中的80端口, host: 8080 表示映射到宿主机的8080端口。
开启这个后,如果vagrant已经启动了,在命令行输入 vagrant reload 重启机器,就可以再宿主机伤使用 localhost:8080来访问虚拟机的localhost:80 。
2、如果需要自己自由的访问虚拟机,但是别人不需要访问虚拟机,可以使用private_network,并为虚拟机设置IP ,在Vagrantfile中配置:

config.vm.network :private_network, ip: "192.168.1.104"

192.168.1.104 表示虚拟机的IP,多台虚拟机的话需要互相访问的话,设置在相同网段即可
3、如果需要将虚拟机作为当前局域网中的一台计算机,由局域网进行DHCP,那么在Vagrantfile中配置:

config.vm.network :public_network

目录映射:
既然是开发环境,那么开发工作肯定还是需要在本地完成,而不是都要进到虚拟机中去完成,虚拟机就好好在后台运行服务就好了,不然就本末倒置了,所以这里就需要使用目录映射功能,将本地的目录映射到虚拟机的对应目录。
默认情况下,当前的工作目录,会被映射到虚拟机的 /vagrant 目录,当前目录下的文件可以直接在 /vagrant 下进行访问,当然也可以在通过 ln 创建软连接,如

ln -fs /vagrant/wwwroot /var/www

来进行目录映射,当然,从自动化配置的角度,能不进系统就不需要进系统,所以在Vagrant也可以进行目录映射的操作:

config.vm.synced_folder "wwwroot/", "/var/www"

前面的参数 “wwwroot/” 表示的是本地的路径,这里使用对于工作目录的相对路径,这里也可以使用绝对路径,比如: “d:/www/”
后面的参数 “/var/www” 表示虚拟机中对应映射的目录。
常用命令

vagrant up //(启动虚拟机)
vagrant halt //(关闭虚拟机——对应就是关机)
vagrant suspend //(暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用)
vagrant resume //(恢复虚拟机 —— 与前面的暂停相对应)
vagrant destroy //(删除虚拟机,删除后在当前虚拟机所做进行的除开Vagrantfile中的配置都不会保留)
vagrant reload //(重启)