首页 » Laravel 5.3 中文文档 » 正文

「Laravel 5.3 中文文档」开发环境 – Homestead

介绍

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 应用时需要用到的其他软件。

如果你使用 Windows 系统,你需要启用硬件虚拟化(VT-x)。它通常是通过 BIOS 来启用。如果你正在一个 UEFI 系统上使用 Hyper-V,那你可能需要禁用 Hyper-V 以便能够使用 VT-x。

内置软件

  • 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.xVMWare 以及 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 使用哪种提供者:virtualboxvmware_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

在你的主机连接数据库你只能使用这些非标准接口。但在你的 Laravel 数据库配置中你仍要使用默认的 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 中文文档

本文共 3 个回复

  • iGoo 2017/09/16 23:44

    homestead里面有redis吗? 我的怎么没有?

发表评论