window下的homestead部署
我这个人比较懒,图片我就不上传了基本就说说步骤,记录下安装时遇到的坑,还有各种问题。
系统环境:win7
软件:
VirtualBox 4.2.16(坑1)
Vagrant
Laravel Homestead
Git
首先安装好 VirtualBox
和 Vagrant
,安装完成 Vagrant
后需要重启,重启后执行
vagrant -v
说明安装完成,提示找不到命令的把 vagrant
的bin目录加入环境变量即可。
接下来你需要执行 vagrant box add laravel/homestead
来安装 homestead 的虚拟机文件,但是以目前来看,国内这样做是下载不来的,这是下载链接
https://atlas.hashicorp.com/laravel/boxes/homestead/versions/0.2.6/providers/virtualbox.box
使用下载工具搞定后,就需要安装了
vagrant box add laravel/homestead ./homestead-0-2-6-vb.box
等待数秒即可安装完毕,add 后面两个参数,前面这个名一定要是lavavel/homestead,至于为什么我后面会讲。后面那个是你下载来的 .box
文件路径。如果提示找不到,你可以写绝对路径。如:D:/ homestead-0-2-6-vb.box.
接下来的操作需要用到 git bash
这个工具(或者你自己下个扩展的CMD,例如cygwin),下载安装好 git
之后打开 'git bash', 随便找个盘执行。我是在g盘执行的.
git clone https://github.com/laravel/homestead.git hs
然后进入g:/hs目录 下执行
bash init.sh
会在 C 盘生成一些 homestead 的配置文件,下面后修改这些配置。如果你是用cygwin的话,会在cygwin的安装目录下,有个home文件夹里面才有homestead的配置文件
在C:\Users\samliang\.homestead 找到 Homestead.yaml,下面是我的配置
ip: "192.168.10.10" <!-- 虚拟机 ip --> memory: 2048 cpus: 1 provider: virtualbox authorize: ~/.ssh/id_rsa.pub keys: - ~/.ssh/id_rsa folders: - map: g:\Code <!-- 我的window项目地址 --> to: /home/vagrant/Code <!-- 对应虚拟机的项目地址 --> sites: - map: homestead.app <!-- 添加的第一个站点名称 --> to: /home/vagrant/Code/laravel /public <!-- 该站点对应的虚拟机文件 --> databases: - homestead variables: - key: APP_ENV value: local
现在配置 SSH ,也就是上面配置中看到 ~/.ssh/id_rsa.pub
和 ~/.ssh/id_rsa
在 git bash中运行 ssh-keygen -t rsa -C "you@homestead"
,you@homestead
这里填自己的邮箱就可以了。 接下里几个 回车
,完成配置。
接着去到g:/hs 文件夹下运行vagrant up
,第一次运行时会在 C 盘创建虚拟机文件,所以耐性等待,接下来看到我们的虚拟机启动成功。
很多教程说要运行vagrant init 其实是不用的,因为你用git clone下来的已经有一个写好的Vagrantfile文件了。这个文件是homestead配置好的初始化参数,请不要随便修改除非你明白如何修改。而init命令是为了生成Vagrantfile 文件。这个文件是对虚拟机的启动时用来初始化的参数。有兴趣的同学,可以到vagrant学习,这个文件是用ruby语法写的。
上面不是说vagrant box add laravel/homestead 这个不能更改么。这是因为这个git clone下来的Vagrantfile文件是调用这个名字laravel/homestead的box,如果你前面box add没用这个名字,就会一直提示找不到。当然你可以研究下Vagrantfile文件,找下在那里有这个配置的修改。
启动成功后。在浏览器中打开 localhost:8000
,看到以下画面说明,homestead已经搭建成功。
接下来修改我们 windows 的host文件,在后面加上(坑3)
192.168.10.10 homestead.app
然后访问homestead.app可以看到同样画面。
这里要明白:配置中的
folders: - map: E:\Projects <!-- 我的window项目地址 --> to: /home/vagrant/Code <!-- 对应虚拟机的项目地址 -->
就是将主机与虚拟的这个两个目录共享,里面的文件更新都会同步。
sites: - map: homestead.app to: /home/vagrant/Code/laravel/public
这里/home/vagrant/Code/laravel/public 是homestead.app站点目录,在 g:/Code中新建一个laravel项目名称为 laravel(如何建laravel大家应该知道吧),然后在打开浏览器访问homestead.app,就是我们熟悉的画面了。
当然,你可以不建laravel项目,直接建好G:/Code/laravel/public 这些文件夹,然后在里面写php也是能直接运行的。
接下来可以进入我们的虚拟机看看环境什么的。通过 vagrant ssh
进入到虚拟机
PS:
如何增加站点:
在homestead.yaml修改如下:
sites: - map: homestead.app to: /home/vagrant/Code/laravel/public - map: php.app to: /home/vagrant/Code/phplocal - map: lala.app to: /home/vagrant/Code/lala/public
修改完后,如果虚拟机未运行,你可以执行 vagrant up –provision来更新。
如果已运行,你可以执行vagrant provision更新。
最后总结一下各种坑:
坑1:VirtualBox的版本选择!VirtualBox的版本选择!VirtualBox的版本选择!
为什么我在软件里只有VBOX写明是那个版本呢。是因为我在vbox4.3和5.0里折腾了大半天,每次vagrant up第一次启动有时成功有时失败。而且,就算第一次启动成功,如果你用vagrant halt关机,然后再重新启动,会出现启动不了的情况!你打开vbox界面,你会看到虚拟机是异常退出状态!
所以一定要用我这个版本,当然如果不行你还是老实换版本,不要折腾了。具体怎样解决我也找不到。
坑2:安装intl扩展
当安装intl扩展时,会要求你sudo app-get update.
但是,执行sudo app-get update会报错的。具体是因为DNS解析问题。
解决方法如下:(我用的是第二个)
修改dns:
1,重启生效:
sudo vi /etc/resolvconf/resolv.conf.d/base(这个文件默认是空的)
在里面插入:
nameserver 8.8.8.8
nameserver 8.8.4.4
如果有多个DNS就一行一个
修改好保存,然后执行
sudo resolvconf -u
再看/etc/resolv.conf,最下面就多了2行:
cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 8.8.4.4
可以看到我们的设置已经加上了,然后再ping一个域名,当时就可以解析了,无需重启。
2,重启失效:
配置文件地址 /etc/resolv.conf
使用编辑器打开
改为如下内容:
search localdomain
nameserver 202.96.128.86 希望修改成的DNS
nameserver 202.96.128.166 备用DNS
重启网络:sudo /etc/init.d/networking restart。即可
坑3:host文件修改后也不能正常访问homestead.app
这个是因为window的dns cline服务问题。到管理工具-》选择服务找到dns Cline服务将其停止掉即可。