Windows上使用Vagrant打造Laravel Homestead可协同跨平台开发环境
1、简介
Laravel 致力于让整个 PHP 开发过程变得让人愉悦,包括本地开发环境,为此官方为我们提供了一整套本地开发环境 —— Laravel Homestead。
Laravel Homestead 是一个打包好各种 Laravel 开发所需要的工具及环境的 Vagrant 盒子(Vagrant 提供了一个便捷的方式来管理和设置虚拟机),该盒子为我们提供了优秀的开发环境,有了它,我们不再需要在本地环境安装 PHP、HHVM、Web服务器以及其它工具软件,我们也完全不用再担心误操作搞乱操作系统 —— 因为 Vagrant 盒子是一次性的,如果出现错误,可以在数分钟内销毁并重新创建该 Vagrant 盒子!
Homestead可以运行在 Windows、Mac 以及 Linux 系统上,其中已经安装好了Nginx、PHP7.0、MySQL、Postgres、Redis、Memcached、Node以及很多其它开发 Laravel 应用所需要的东西。
注:如果你使用的是Windows,需要开启系统的硬件虚拟化(VT-x),这通常可以通过BIOS来开启。
预装软件
- Ubuntu 14.04
- Git
- PHP 7.0
- HHVM
- Xdebug
- Nginx
- MySQL
- SQLite 3
- Postgres
- Composer
- Node(With PM2, Bower, Grunt, and Gulp)
- Redis
- Memcached
- Beanstalkd
- Blackfire Profiler
环境准备
- Git
- PHP
- Laravel
- Composer
- Vagrant
- VirtualBox
安装git
1.下载GitHub for Windows
安装php
建议大家尽量安装当前最新版本的 PHP
1.下载PHP
http://windows.php.net/download/
2.解压目录
我的路径D:\php
3.添加环境变量
右键计算机->高级系统设置->环境变量->系统变量->PATH
C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\nodejs\;D:\php;C:\ProgramData\ComposerSetup\bin
4.设置php.ini
进入 PHP 安装目录(例如 D:\php
)。找到 php.ini-development
文件并复制一份到当前目录,重命名为 php.ini
,修改以下配置
去掉extension=php_mbstring.dll
前面的分号(888 行左右)
去掉extension=php_openssl.dll
前面的分号(893 行左右)
去掉extension_dir = "ext"
前面的分号(736 行左右)
5.使环境变量生效
重启explorer.exe
安装Laravel
1.下载Laravel
http://www.golaravel.com/download/
2.解压目录
我的路径D:\laravel-v5.1.4
3.启动Laravel
d: cd laravel-v5.1.4 D:\laravel-v5.1.4>php artisan serve Laravel development server started on http://localhost:8000/
在浏览器中访问http://localhost:8000/
artisan
的 serve
命令还支持两个参数:
host
设置主机地址
port
设置 web server 监听的端口号
例如:php artisan serve --port=8888
安装Composer
1.下载Composer-Setup.exe
https://getcomposer.org/doc/00-intro.md#installation-windows
2.配置Composer
Loading composer repositories with package information Installing dependencies (including require-dev) SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed”
如果安装过程提示报错为缺少CA证书,下载cacert.pem
到自定义路径
http://curl.haxx.se/docs/caextract.html
然后修改php.ini文件(1983行左右)
openssl.cafile=D:\php\verify\cacert.pem
3.测试Composer
composer -V
Composer version 1.0-dev (d79427f1a7b15e8f4d46ce8124a4d0c58ba1479c) 2016-01-27 13:01:22
windows安装可参考
http://pkg.phpcomposer.com/
2、安装 & 设置
准备工作
- VirtualBox 虚拟机,基础依赖
- Vagrant 基于VirtualBox或vmware的虚拟化环境部署工具,可以将一个虚拟机打包(简称vbox)给别人。
- Homestead laravel官方vbox,集成环境以及一套特制的命令行工具。
- xshell 这是一款windows下的ssh & shell工具,同类的有securecrt、putty等。
在使用 Homestead 之前,需要先安装 Virtual Box/VMWare 和 Vagrant,所有这些软件包都为常用操作系统提供了一个便于使用的可视化安装器。
安装完以后重启一下,再打开cmd
vagrant --version
Vagrant 1.8.1
下载安装 Homestead Vagrant 盒子
通过命令
VirtualBox/VMWare 和 Vagrant 安装好了之后,在终端中使用能如下命令将 laravel/homesterad
添加到 Vagrant 中。下载该盒子将会花费一些时间,时间长短主要取决于你的网络连接速度:
vagrant box add laravel/homestead
如果上述命令执行失败,可以使用 Vagrant 老版本的方式,这需要输入完整的 URL:
vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead
可以自动下载homestead的vbox,然而国内网络大家懂的,龟速。
建议自己有vps的同学,在vps上通过
wget -O homestead.box https://atlas.hashicorp.com/laravel/boxes/homestead/versions/0.4.1/providers/virtualbox.box
手动下载后,再从vps上将box下载到本地,或者可以试试用迅雷下载。总之,想办法把这个box文件下载下来,然后通过以下命令添加到vagrant
vagrant box add laravel/homestead file:///d:/homestead.box
通过 GitHub 安装 Homestead命令行工具
你还可以通过简单克隆仓库代码来实现 Homestead 安装。将仓库克隆到用户目录下的 Homestead 目录,这样 Homestead 盒子就可以会作为所有其他 Laravel 项目的主机:
cd ~ git clone https://github.com/laravel/homestead.git Homestead
克隆完成后,在 Homestead 目录下运行 bash init.sh
命令来创建 Homestead.yaml
配置文件,Homestead.yaml
配置文件文件位于 ~/.homestead
目录:
bash init.sh
安装依赖
composer install
在Homestead目录执行
php homestead
Laravel Homestead version 3.0.1
配置 Homestead
设置 Provider
Homestead.yaml
文件中的 provider
键表示使用哪个 Vagrant 提供者:virtualbox
、vmware_fushion
或者vmware_workstation
,你可以将其设置为自己喜欢的提供者:
provider: virtualbox
配置共享文件夹
C:\Users\stone\.homestead\Homestead.yaml
Homestead.yaml
文件中的 folders
属性列出了所有主机和 Homestead 虚拟机共享的文件夹,一旦这些目录中的文件有了修改,将会在本地和 Homestead 虚拟机之间保持同步,如果有需要的话,你可以配置多个共享文件夹(一般一个就够了):
folders: - map: d:/app to: /home/vagrant/Code
如果要开启 NFS,只需简单添加一个标识到同步文件夹配置:
folders: - map: ~/Code to: /home/vagrant/Code type: "nfs"
配置 Nginx 站点
对 Nginx 不熟?没问题,通过 sites
属性你可以方便地将“域名”映射到 Homestead 虚拟机的指定目录,Homestead.yaml
中默认已经配置了一个示例站点。和共享文件夹一样,你可以配置多个站点:
sites: - map: homestead.app to: /home/vagrant/Code/Laravel/public
你还可以通过设置 hhvm
为 true
让所有的 Homestead 站点使用 HHVM:
sites: - map: homestead.app to: /home/vagrant/Code/Laravel/public hhvm: true
默认情况下,每个站点都可以通过 HTTP(端口号:8000)和 HTTPS(端口号:44300)进行访问。
修改Hosts文件|访问网站
不要忘记把 Nginx 站点配置中的域名添加到本地机器上的 hosts
文件中,该文件会将对本地域名的请求重定向到 Homestead 虚拟机,在 Mac 或 Linux上,该文件位于 /etc/hosts
,在 Windows 上,位于C:\Windows\System32\drivers\etc\hosts
,添加方式如下:
域名需要在本机绑定hosts:192.168.10.10 homestead.app
确保 IP 地址和你的 Homestead.yaml
文件中列出的一致,一旦你将域名放置到 hosts 文件,就可以在浏览器中通过该域名访问站点了!
http://homestead.app
启动 Vagrant Box
配置好 Homestead.yaml
文件后,在 Homestead 目录下运行 vagrant up
命令,Vagrant 将会启动虚拟机并自动配置共享文件夹以及 Nginx 站点。
销毁该机器,可以使用 vagrant destroy –force
vagrant up Box 'laravel/homestead' could not be found
问题解决办法
Box 'laravel/homestead' could not be found
收到在homestead目录下创建metadata.json文件,内容为
{
"name": "laravel/homestead",
"versions": [{
"version": "0.4.1",
"providers": [{
"name": "virtualbox",
"url": "file:///F:/VirtualBox/homestead.box"
}]
}]
}
Then run vagrant box add metadata.json
This will install the box with a version and can be confirmed by:
$ vagrant box list
laravel/homestead (virtualbox, 0.4.0)
You will now be able to perform vagrant up using your local box.
Default login and password is just vagrant.
参考:
http://stackoverflow.com/questions/34946837/box-laravel-homestead-could-not-be-found
GuestAdditions versions on your host (5.0.14) and guest (5.0.6) do not match.问题解决办法
This works for me in linux, I think this will solve the problem in windows as well.
Quick Solution for Failed to mount folders in Linux guest issue.
Add the following line to your Homestead/Vagrantfile:
config.vbguest.auto_update = false
Your d:\VirtualBox/Homestead/Homestead/Vagrantfile should looks like this:
/... Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # To avoid install and uninstall VBoxGuessAdditions during vagrant provisioning. config.vbguest.auto_update = false .../
Save it and execute
$ vagrant destroy --force
$ vagrant up
参考:
http://stackoverflow.com/questions/30175290/laravel-homestead-vagrant-vboxsf-not-available-issue
为指定项目安装 Homestead
全局安装 Homestead 将会使每个项目共享同一个 Homestead 盒子,你还可以为每个项目单独安装 Homestead,这样就会在该项目下创建 Vagrantfile
,允许其他人在该项目中执行 vagrant up
命令,在指定项目根目录下使用 Composer 执行安装命令如下:
composer require laravel/homestead --dev
这样就在项目中安装了 Homestead。Homestead 安装完成后,使用 make
命令生成 Vagrantfile
和Homestead.yaml
文件,make
命令将会自动配置 Homestead.yaml
中的 sites
和 folders
属性。
Mac/Linux:
php vendor/bin/homestead make
Windows:
vendor\bin\homestead make
接下来,在终端中运行 vagrant up
命令然后在浏览器中通过 http://homestead.app
访问站点。不要忘记在/etc/hosts
文件中添加域名 homestead.app
。
3、日常使用
全局访问 Homestead
有时候你想要在文件系统的任意位置运行 vagrant up
启动 Homestead 虚拟机,要实现这一目的需要将 Homestead 安装目录添加到系统路径。这样你就可以在系统的任意位置运行 homestead
或 homestead ssh
来启动/登录虚拟机。
通过 SSH 连接虚拟机
你可以在 Homestead 目录下通过运行 vagrant ssh
以 SSH 方式连接到虚拟机
vagrant ssh
但是如果你需要以更平滑的方式连接到 Homestead,可以为主机添加一个别名来快速连接到 Homestead 盒子,创建完别名后,可以使用 vm
命令从任何地方以 SSH 方式连接到 Homestead 虚拟机:
alias vm="ssh vagrant@127.0.0.1 -p 2222"
可以通过virtualbox打开虚拟机
用户名和密码: vagrant.
连接到数据库
默认已经在 Homestead 虚拟机中为 MySQL 和 Postgres 数据库做好了配置,更方便的是,Laravel的 .env
还为连接 Homestead 数据库做好了配置。
想要通过本地的 Navicat 或 Sequel Pro 连接到 Homestead 上的 MySQL 或 Postgres 数据库,可以通过新建连接来实现,主机 IP 都是 127.0.0.1
,对于 MySQL 而言,端口号是33060
,对 Postgres 而言,端口号是54320
,用户名/密码是 homestead
/secret
。
注意:只有从本地连接 Homestead 的数据库时才能使用这些非标准的端口,在 Homestead 虚拟机中还是应该使用默认的 3306 和 5432 端口进行数据库连接配置。
添加更多站点
Homestead 虚拟机在运行时,可能需要添加额外 Laravel 应用到 Nginx 站点。如果是在单个 Homestead 环境中运行多个 Laravel 应用,添加站点很简单,只需将站点添加到 Homestead.yaml
文件,然后在 Homestead 目录中运行vagrant provision
命令即可。
- Homestead 中新增一个domain的步骤是
- 在homestead.ymal 文件里面编辑好sites和folders这两个项目
- 执行vagrant provision
配置 Cron 调度任务
Laravel 提供了很方便的方式来调度 Cron 任务:只需每分钟调度运行一次 Artisan 命令 schedule:run
即可。schedule:run
会检查定义在 App\Console\Kernel
类中定义的调度任务并判断运行哪些任务。
如果想要为某个 Homestead 站点运行 schedule:run
命令,需要在定义站点时设置 schedule
为 true
:
sites: - map: homestead.app to: /home/vagrant/Code/Laravel/public schedule: 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
转发更多端口
如果你想要为 Vagrant 盒子添加更多端口转发,做如下转发协议设置即可:
ports: - send: 93000 to: 9300 - send: 7777 to: 777 protocol: udp
4、使用 Blackfire Profiler 进行性能分析
SensioLabs 开发的 Blackfire Profiler 能自动收集代码执行数据,比如内存、CPU 时间、硬盘 I/O 等,Homestead 使得在应用中使用该性能分析器变得轻而易举。
Blackfire Profiler 需要的软件包已经预安装到 Homestead 盒子,你只需要在 Homestead.yaml
文件中设置 Blackfire Server ID 和 token:
blackfire: - id: your-server-id token: your-server-token client-id: your-client-id client-token: your-client-token
配置好 Blackfire 的凭证之后,在 Homestead 目录下使用 vagrant provision
重新启动 Homestead。在此之前,确保你已经查看过 Blackfire 文档了解了如何在浏览器安装相应的 Blackfire 扩展。
相关密码
Ubuntu
用户名:vagrant
密码:vagrant
mysql密码
homestead / secret
root / secret
虚拟机操作
在不进入虚拟机的情况下,还可以使用下面的命令对 虚拟机进行管理:
vagrant up (启动虚拟机)
vagrant halt (关闭虚拟机——对应就是关机)
vagrant suspend (暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用)
vagrant resume (恢复虚拟机 —— 与前面的暂停相对应)
vagrant destroy (删除虚拟机,删除后在当前虚拟机所做进行的除开Vagrantfile中的配置都不会保留)
以上命令需在Homestead目录下执行
参考:
http://stackoverflow.com/questions/26655516/how-to-install-manually-downloaded-box-for-vagrant
http://stackoverflow.com/questions/34946837/box-laravel-homestead-could-not-be-found
http://stackoverflow.com/questions/25981735/laravel-homestead-stuck-on-vm-login
http://os.51cto.com/art/201507/484834.htm
http://yaojinbu.com/post/2749.html
http://x-bird.qiubs.com/laravel-homestead-intro.html?utm_source=tuicool&utm_medium=referral
http://blog.csdn.net/small_rice_/article/details/45366299
http://blog.csdn.net/markely/article/details/49585887
http://www.ekan001.com/articles/40
http://www.tuicool.com/articles/rIVJRvm