介绍
Laravel 力争使 PHP 的开发过程变得更加轻松愉快,这其中也包含你的本地开发环境。Vagrant 提供了一个简单、优雅的方式来管理与配置虚拟机。
Laravel Homestead 是一个官方的、预封装的 Vagrant 包,为你提供了一个非常棒的开发环境,你不需要在本地机器上安装 PHP、HHVM、WEB 服务、以及其他任何服务软件。Vagrant 包完全是一次性的,如果有地方出错了,你可以在数分钟内销毁并重新创建环境。
Homestead 可以在任何 Windows、Mac、Linux 系统上运行,里面包含了 Nginx WEB 服务器、PHP 7.0、MySQL、Postgres、Redis、Memcached、Node 以及其他你在开发 Laravel 应用时需要用到的其他软件。
内置软件
- Ubuntu 16.04
- Git
- PHP 7.0
- HHVM
- Nginx
- MySQL
- MariaDB
- Sqlite3
- Postgres
- Composer
- Node (With PM2, Bower, Grunt, and Gulp)
- Redis
- Memcached
- Beanstalkd
安装 & 设置
第一步
在你安装 Homestead 环境之前,须先安装 VirtualBox 5.x 或 VMWare 以及 Vagrant。这些软件对各种系统都提供了简单易用的安装器。
要使用 VMware,你需要购买 VMware Fusion / Workstation 以及 VMware Vagrant 插件。虽然VMware 不是免费的,但它默认就提供了快速的共享文件夹性能。
安装 Homestead Vagrant 包
一旦 VirtualBox / VMware 以及 Vagrant 安装完成,你需要在命令行运行下面的命令来为 Vagrant 添加 laravel/homestead
包。需要花费一些时间来下载这个包,具体时间需要视你的网络连接速度而定:
vagrant box add laravel/homestead
如果这个命令运行失败,请确保 Vagrant 是最新版本。
安装 Homestead
你可以通过手动克隆代码仓库的方式来安装 Homestead。建议将代码仓库克隆至「home」目录中的 Homestead
文件夹,如此一来 Homestead box 就能将主机服务提供给你所有的 Laravel 项目:
cd ~ git clone https://github.com/laravel/homestead.git Homestead
当你克隆完代码仓库后,需要在 Homestead 目录中运行 bash init.sh
命令来创建一个 Homestead.yaml
配置文件。Homestead.yaml
文件将被放置在一个隐藏的 ~/.homestead
目录中。
bash init.sh
配置 Homestead
设置提供者
~/.homestead/Homestead.yaml
文件中的 provider
指定了 Vagrant 使用哪种提供者:virtualbox
、vmware_fusion
或者 vmware_workstation
。你可以把 provider 设置为你喜欢的:
provider: virtualbox
配置共享文件夹
Homestead.yaml
文件中的 folders
属性列出了你希望与 Homestead 共享的文件夹。当这些文件夹中的文件变更时,它们将会在你的本地与 Homestead 环境中自动保持同步。你可以根据需要配置多个共享文件夹:
folders: - map: ~/Code to: /home/vagrant/Code
要启用 NFS,只需要在共享文件夹的设置值中加入一个简单的参数:
folders: - map: ~/Code to: /home/vagrant/Code type: "nfs"
配置 Nginx 站点
对 Nginx 不熟悉?没问题。Homestead 环境中的 sites
属性可以轻松的把一个站点映射到一个文件夹中。Homestead.yaml
文件中已经包含了一个样例站点。你可以根据需要在 Homestead 环境中添加多个站点。Homestead 可以为你正在开发中的所有 Laravel 项目提供方便的虚拟化环境:
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
如果你在准备好 Homestead box 后更改了 sites
属性,你需要运行 vagrant reload --provision
来更新虚拟环境中的 Nginx 配置。
Hosts 文件
你必须把 Nginx 站点的“域名”添加到本机的 hosts
文件中。hosts
文件会重定向 Homestead 站点的请求到 Homestead 机器。在 Mac 和 Linux 中,这个文件位于 /etc/hosts
。在 Windows 中,它位于 C:\Windows\System32\drivers\etc\hosts
。添加的行应该类似于下面这样:
192.168.10.10 homestead.app
确保 IP 地址与 ~/.homestead/Homestead.yaml
文件中设置的相同。当把域名添加到 hosts
文件中后,启动 Vagrant 就可以通过浏览器访问站点了:
http://homestead.app
启动 Vagrant Box
当你把 Homestead.yaml
设置好后,进入 Homestead 文件夹并运行 vagrant up
命令。Vagrant 将启动虚拟机,并自动配置好共享文件夹和 Nginx 站点。
要移除站点,请运行 vagrant destroy --force
命令。
分项目安装
全局安装 Homestead 将会使所有项目共享同一个 Homestead Box。除此之外,你还可以分别为每一个项目配置一个 Homestead 实例。为每一个项目安装 Homestead 的好处是可以为该项目配置一个 Vagrantfile
文件,允许其他人简单的运行 vagrant up
命令在该项目下工作。
要直接安装 Homestead 到你的项目,使用 Composer 添加它:
composer require laravel/homestead --dev
当 Homestead 安装后,使用 make 命令在项目根目录生成 Vagrantfile
和 Homestead.yaml
文件。make
命令将自动配置 sites
和 folders
到 Homestead.yaml
文件。
Mac / Linux:
php vendor/bin/homestead make
Windows:
vendor\\bin\\homestead make
之后在命令行运行 vagrant up
命令并在浏览器访问 http://homestead.app
。记得把 http://homestead.app
或你选择的其他域名添加到 /etc/hosts
文件。
安装 MariaDB
如果你喜欢使用 MariaDB 而非 MySQL,你可以添加 mariadb
选项到 Homestead.yaml
文件。这个选项会移除 MySQL 并安装 MariaDB。MariaDB 是 MySQL 的替代版本,所以在应用的数据库配置中仍可以使用 mysql
:
box: laravel/homestead ip: "192.168.20.20" memory: 2048 cpus: 4 provider: virtualbox mariadb: true
日常使用
全局访问 Homestead
有时候你可能想在你机器的任何位置运行 vagrant up
启动 Homestead,你可以添加一个简单的 Bash 函数到你的 Bash 配置。这个函数允许你在系统的任何位置运行任何 Vagrant 命令,并自动把命令指向 Homestead 的安装位置:
function homestead() { ( cd ~/Homestead && vagrant $* ) }
确保把函数中的 ~/Homestead
路径修改为你真实的 Homestead 安装路径。当这个函数设置好后,你可以在任何地方运行 homestead up
和 homestead ssh
之类的命令。
通过 SSH 连接
你可以通过在 Homestead 目录运行 vagrant ssh
命令来以 SSH 方式访问虚拟机。
但是,你可能经常需要 SSH 到你的虚拟机,所以考虑下把上面提到的函数添加到你的机器中,以便快速通过 SSH 访问 Homestead。
连接数据库
默认已经安装了 MySQL 和 Postgres 两种 homestead
数据库。为了方便起见,Laravel 的 .env
文件默认配置了框架使用的数据库。
要在你的机器通过 Navicat 或 Sequel Pro 访问 MySQL 或 Postgres 数据库,你需要连接 127.0.0.1
及端口 33060
(MySQL) 或 54320
(Postgres)。数据库的用户名和密码都是 homestead / secret
。
3306
和 5432
端口,因为 Laravel 是在虚拟机内运行的。添加额外站点
一旦 Homestead 环境配置完并且在运行时,你可能希望为 Laravel 应用添加额外的 Nginx 站点。在单个 Homestead 环境中你可以安装多个 Laravel 项目。要添加额外的站点,只需把站点添加到 ~/.homestead/Homestead.yaml
文件,并进入 Homestead 目录在命令行运行 vagrant provision
命令。
配置 Cron 任务
Laravel 提供了一个方便的方式调度 Cron 任务,执行 schedule:run
Artisan 命令就可以每分钟运行调度。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 → 转发到 22
- HTTP: 8000 → 转发到 80
- HTTPS: 44300 → 转发到 443
- MySQL: 33060 → 转发到 3306
- Postgres: 54320 → 转发到 5432
转发额外的端口
如果你愿意,你还可以添加额外的端口到 Vagrant 包,并指定它们的协议:
ports: - send: 93000 to: 9300 - send: 7777 to: 777 protocol: udp
网络接口
Homestead.yaml
文件中的 networks
属性为你的 Homestead 环境配置网络接口。你可以根据需要配置多个接口:
networks: - type: "private_network" ip: "192.168.10.20"
要启用 桥接 接口,配置 bridge
选项把网络类型改为 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)"
该篇属于专题:《Laravel 5.3 中文文档》
iGoo 2017/09/16 23:44
homestead里面有redis吗? 我的怎么没有?
Specs 2017/09/18 22:53
@ 有啊
iGoo 2017/09/18 23:59
@ 谢谢 确实有。 大意了