laravel Homestead window安装过程
( 以下的安装过程简书是以5.4文档的Homestead的安装过程进行详细更改而成,原文请链接:http://d.laravel-china.org/docs/5.4/homestead )
Laravel 致力于让 PHP 的开发过程更加轻松愉快,这其中也包括你的本地开发环境。Vagrant提供了一种简单,优雅的方式来管理和调配虚拟机。
Laravel Homestead 是一个官方预封装的 Vagrant box,它为你提供了一个完美的开发环境,你无需在本地安装 PHP ,web 服务器,或其他服务软件。并且不用担心系统被搞乱! Vagrant box 是完全一次性的。如果有什么地方出错了,你也可以在几分钟内销毁并重建 box !
Homestead 可以运行在 Windows 、 Mac 或 Linux 系统上,并且里面包含了 Nginx Web 服务器、 PHP 7.1 、 MySQL 、 Postgres 、 Redis 、 Memcached 、 Node 、 以及所有利于你开发 laravel 应用的其他程序。
如果你是 Windows 用户,你可能需要启用硬件虚拟化(VT-x)。这通常需要通过 BIOS 来启用它。如果你在一个 UEFI 系统上使用的是 Hyper-V,你需要关闭 Hyper-V 才能启用 VT-x。
内置软件#
Ubuntu 16.04
Git
PHP 7.1
Nginx
MySQL
MariaDB
Sqlite3
Postgres
Composer
Node (With Yarn, Bower, Grunt, and Gulp)
Redis
Memcached
Beanstalkd
Mailhog
ngrok
第一步# (本步骤就是安装虚拟机<VirtualBox 5.1或VMWare或Parallels>和虚拟机的管理工具<Vagrant>,提示机子必须支持虚拟技术,且通过blos开机选项开启)
在你启动你的 Homestead 环境之前,你必须安装VirtualBox 5.1、VMWare或Parallels的其中之一,以及Vagrant。这些软件在各个常用的平台都有提供简单易用的界面安装包。
若要使用 VMware provider,你需要同时购买 VMware Fusion / Workstation 以及VMware Vagrant plug-in. 的软件授权。使用 VMware 可以在共享文件夹上获得较快的性能。
若要使用 Parallels provider,你需要安装Parallels Vagrant plug-in。这是免费使用的。
安装 Homestead Vagrant Box#
当 VirtualBox / VMware 以及 Vagrant 安装完成后,你使用以下命令将 laravel/homestead 这个 box 安装进你的 Vagrant 程序中。 box 的下载会花费你一点时间,具体的下载时长由网络速度决定:
vagrant box add laravel/homestead (这个过墙太恶心了,所以最好是先下载好国内的box再执行 “vagrant box add laravel/homestead D:/downloaad/laravel.box” ;其中的 D:/downloaad/laravel.box 是刚才提及事先下载好的box包在本地的绝对地址,安装完后会显示已安装完的box的相关信息)
如果上面的命令运行失败,代表你使用的可能是旧版的 Vagrant,请升级你的 Vagrant。
安装 Homestead#
你可以通过手动克隆代码仓库的方式来安装 Homestead。建议将代码仓库克隆至「home」目录中的 Homestead 文件夹,如此一来 Homestead box 就能将主机服务提供给你所有的 Laravel 项目:
cd~git clone https://github.com/laravel/homestead.git Homestead
由于 Homestead 的master分支并不是稳定分支,你应该检出已经标签过的稳定版本。你可以在Github Release Page找到最新的稳定版本。
cd Homestead// 检出所需要的版本...git checkout v4.0.5 (window系统最好不要使用该句,因为使用该句后,相应的init.bat初始化出问题,可以不执行)
一旦你克隆完 Homestead 的代码仓库,即可在 cmd 转到你的 Homestead 目录中运行bash init.sh命令 来创建Homesstead.yaml配置文件。Homesstead.yaml文件会被放置在你的 Homestead 目录中:
// Mac / Linux...
bash init.sh
// Windows...
init.bat
配置 Homestead#
配置你的提供者#
使用powershell 转到 Homestead目录 执行
ssh-keygen -t rsa -C "laravel/homestead" (window的cmd不能执行该语句的。注意大小写,注意box安装时的,名字,如果不知道名字可以使用vagrant list 来查看)
config.ssh.username = "vagrant"
config.ssh.password = "vagrant"
config.ssh.insert_key = false
Homestead.yaml中的provider参数设置取决于你用的是哪一个 Vagrant 提供者virtualbox、vmware_fusion、vmware_workstation,或者parallels。你可以根据自己的喜好来设置提供者:
provider:virtualbox
配置共享文件夹#
你可以在Homestead.yaml文件的folders属性里列出所有想与 Homestead 环境共享的文件夹。这些文件夹中的文件若有变更,它们将会在你的本机电脑与 Homestead 环境自动更新同步。你可以在这里设置多个共享文件夹:
folders:-map:~/Code to:/home/vagrant/Code
若要启动NFS,只需要在共享文件夹的设置值中加入一个简单的参数:
folders:-map:~/Code to:/home/vagrant/Code type:"nfs"
你也可以在配置中传递任何 Vagrant 中的共享文件夹支持的参数,在options参数下列出它们:
folders:-map:~/Code to:/home/vagrant/Code type:"rsync"options:rsync__args:["--verbose","--archive","--delete","-zz"]rsync__exclude:["node_modules"]
配置 Nginx 站点#
对 Nginx 不熟悉吗?没关系。sites属性可以帮助你可以轻易指定一个域名来对应到 homestead 环境中的一个目录上。在Homestead.yaml文件中已包含了一个网站设置范本。同样的,你也可以增加多个网站到你的 Homestead 环境中。 Homestead 可以同时为多个 Laravel 应用提供虚拟化环境:
sites:-map:homestead.app to:/home/vagrant/Code/Laravel/public
如果你在 Homestead box 配置之后更改了sites属性,那么应该重新运行vagrant reload --provision来更新 Nginx 配置到虚拟机上。
关于 Hosts 文件#
你必须将在 Nginx sites 中所添加的「域名」也添加到你本机电脑的hosts上。hosts文件会将请求重定向至 Homestead 环境中设置的本地域名。在 Mac 或 Linux 上,该文件通常会存放在/etc/hosts。在 Windows 上,则存放于C:\Windows\System32\drivers\etc\hosts。设置内容如下所示:
192.168.10.10homestead.app
务必确认 IP 地址与Homestead.yaml文件中设置的相同。将域名设置在hosts文件之后,你就可以通过网页浏览器访问你的网站。
http://homestead.app
启动 Vagrant Box#
编辑完Homestead.yaml后,进入你的 Homestead 目录并运行vagrant up命令。 Vagrant 就会根据Homestead.yaml里的配置信息,为虚拟机设置共享文件夹和 Nginx 网站。
如果要移除虚拟机,你可以使用vagrant destroy --force命令
为每个项目分开安装#
除了全局使用同一个 Homestead 环境, Homestead 还允许你为项目独立配置一个独占的 Homstead 。
通过传递Vagrantfile,可以实现为每个项目分别安装上 Homestead ,其他项目成员只需要通过简单的vagrant up即能跟你拥有一样的 Homestead 环境。
使用 Composer 将 Homestead 直接安装至项目中:
composerrequirelaravel/homestead--dev
一旦 Homestead 安装完毕,可以使用make命令生成Vagrantfile与Homestead.yaml文件,并存放于项目的根目录。
make命令将会自动在 Homestead.yaml 文件中配置sites及folders:
Mac / Linux:
php vendor/bin/homestead make
Windows:
vendor\\bin\\homesteadmake
接下来,在命令行中运行vagrant up并通过网页浏览器访问http://homestead.app。再次提醒,你仍然需要在/etc/hosts里配置homestead.app或其它想要使用的域名。
安装 MariaDB#
如果你希望使用 MariaDB 来替换 MySQL,你可以在Homestead.yaml文件中增加一个mariadb的选项,这个选项会移除 MySQL 并安装 MariaDB。因为 MariaDB 可用作 MySQL 的替代品,所以在你的数据库配置信息里,还是选用mysql配置项。
box:laravel/homesteadip:"192.168.20.20"memory:2048cpus:4provider:virtualboxmariadb:true
全局使用#
如果你希望在文件系统的任何地方都可以vagrant up开启 Homestead 虚拟机,你可以把以下代码放到你的 Bash profile 里面,这个函数允许你在文件系统的任何位置都可以对 Homestead 运行 Vagrant 命令:
Mac / Linux#
functionhomestead(){(cd~/Homestead&&vagrant $*)}
请将~/Homestead这个路径修改为你的实际 Homestead 的安装路径,一旦这个函数安装成功,就可以在系统的任意位置运行homestead up或homestead ssh命令
Windows#
在系统的任意位置创建一个批处理文件homestead.bat,并添加如下内容:
@echooffset cwd=%cd%set homesteadVagrant=C:\Homesteadcd/d%homesteadVagrant%&&vagrant%*cd/d%cwd%set cwd=set homesteadVagrant=
请将C:\Homestead这个路径修改为你的实际 Homestead 的安装路径,创建完这个文件后,将这个文件路径添加到PATH环境变量中,就可以在系统的任意位置运行homestead up或homestead ssh命令
通过SSH连接#
在 Homestead 目录运行vagrant ssh命令来连接虚拟主机。
你可能会经常需要使用 SSH 来连接 Homestead 主机,你可以考虑将上述「function」添加到你的主机,以便快速的通过 SSH 进入你的 Homestead box
连接数据库#
在 box 中已经为 MySQL 和 Postgres 配置好了一个开箱即用的数据库homestead,为了更方便的使用它,Laravel 中的.env文件将这个数据库设置成了框架默认使用的数据库。
如果想要从你主机上的数据库客户端连接 MySQL 或 Postgres,可以通过127.0.0.1来使用端口33060(MySQL) 或54320(Postgres) 连接。账号密码分别是homestead/secret
因为虚拟机做了端口转发,所以本机电脑上你应当只使用这些非标准的连接端口,虚拟机里依然使用默认的 3306 及 5432 连接端口。
增加更多网站#
一旦 Homestead 环境配置完毕且成功运行后,你可能会想要为 Laravel 应用程序增加更多的 Nginx 网站。你可以在单个 Homestead 环境中运行多个 Laravel 程序。要添加额外的网站,只需将网站添加到您的Homestead.yaml文件中:
sites:-map:homestead.app to:/home/vagrant/Code/Laravel/public-map:another.app to:/home/vagrant/Code/another/public
如果 Vagrant 没有自动管理你的「hosts」文件,你可能需要手动把新增的站点加入到「hosts」文件中:
192.168.10.10homestead.app192.168.10.10another.app
当你的网站添加完成,从你的 Homestead 目录运行vagrant reload --provision命令就可以应用新的更改。
Site Types#
Homestead supports several types of sites which allow you to easily run projects that are not based on Laravel. For example, we may easily add a Symfony application to Homestead using thesymfony2site type:
sites:-map:symfony2.app to:/home/vagrant/Code/Symfony/publictype:symfony2
The available site types are:apache,laravel(the default),proxy,silverstripe,statamic, andsymfony2.
配置 Cron 调度器#
Laravel 提供了便利的方式来调度 Cron 任务,通过schedule:runArtisan 命令,调度便会在每分钟被运行。schedule:run命令会检查定义在你App\Console\Kernel类中调度的任务,判断哪个任务该被运行。
如果你想为 Homestead 网站使用schedule:run命令,你可以在定义网站时将schedule选项设置为true
sites:-map:homestead.app to:/home/vagrant/Code/Laravel/publicschedule:true
该网站的 Cron 任务会被定义在虚拟机的/etc/cron.d文件夹中。
连接端口#
以下本地电脑连接端口将会被转发至 Homestead 环境:
SSH:2222 → Forwards To 22
HTTP:8000 → Forwards To 80
HTTPS:44300 → Forwards To 443
MySQL:33060 → Forwards To 3306
Postgres:54320 → Forwards To 5432
Mailhog:8025 → Forwards To 8025
转发更多的端口#
如果你需要的话,也可以借助指定连接端口的通信协议来转发更多额外的连接端口给 Vagrant box :
ports:-send:93000to:9300-send:7777to:777protocol:udp
共享你的环境#
有时候你想跟你的同事或者是客户共享你目前的工作进度。Vagrant 为此提供了一个内置方法vagrant share;不过,如果你在你的Homestead.yaml文件中配置了多个站点则这条命令将会变得没多大用处。
为了解决这个问题,Homestead 提供了自己的share命令。开始之前,通过vagrant ssh命令 SSH 进你的 Homestead 机器中,然后运行share homestead.app。这会从你的Homestead.yaml配置文件中共享homestead.app站点。当然,你也可以用其他已经配置的站点来代替homestead.app。
运行完命令之后,你可以看到一个包含活动日志和共享站点外网访问路径的 Ngrok 界面。
谨记,Vagrant 本质上是不安全的,当你运行share命令的时候,你会把你的虚拟机暴露在互联网中。
Network Interfaces#
Homestead.yaml文件里的networks配置项允许你为 Homestead 环境配置网络接口。你可以任意配置多个网络接口:
networks:-type:"private_network"ip:"192.168.10.20"
想要配置一个桥接接口的话,增加bridge配置项,然后type填写为public_network:
networks:-type:"public_network"ip:"192.168.10.20"bridge:"en1: Wi-Fi (AirPort)"
想要配置一个DHCP接口的话,请从配置中移除ip选项:
networks:-type:"public_network"bridge:"en1: Wi-Fi (AirPort)"
你可以简单的用两个步骤来更新 Homestead ,第一步,使用vagrant box update命令更新 Vgrant box :
vagrant box update
接下来。你需要更新 Homestead 的源代码,如果你是通过克隆仓库的方式安装的 Homestead ,你可以简单的运行git pull origin master命令在你最初克隆仓库的位置。
如果你已经通过你的项目中的composer.json文件安装了 Homestead ,你应该确认你的composer.json文件中是否包含"laravel/homestead: "^4"并且更新你的依赖:
composer update
你可以通过添加以下配置到你的Homestead.yaml文件来方便的覆盖 Homestead 使用的 box 版本
version:0.6.0
例如:
box:laravel/homesteadversion:0.6.0ip:"192.168.20.20"memory:2048cpus:4provider:virtualbox
当你使用旧版本的 box 时,你需要确保 Homestead 源代码的版本与之对应,下面的图表展示了支持的 box 版本,以及与之对应的 Homestead 的源代码版本和 box 所提供的 PHP 版本:
Homestead VersionBox Version
PHP 7.03.1.00.6.0
PHP 7.14.0.01.0.0
VirtualBox#
Homestead 默认将natdnshostresolver设置为on。这允许 Homestead 使用你的主机系统中的 DNS 设置。如果你想重写这行为,你可以在你的Homestead.yaml文件中添加下面这几行:
provider:virtualboxnatdnshostresolver:off