奥门新浦京官方网站Laravel 虚拟开发环境 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。

通过 Vagrant 搭建虚拟机环境

Optical Character Recognition (OCR)即光学字符辨识是把打印文本转换成一个数字表示的过程。它有各种各样的实际应用–从数字化印刷书籍、创建收据的电子记录,到车牌识别甚至破解基于图像的验证码。

内置软件

  • 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

介绍

Laravel 致力于让 PHP 开发体验更愉快,也包含你的本地开发环境。Vagrant
提供了一个简单、优雅的方式来管理与供应虚拟机。

Laravel Homestead 是一个官方预载的
Vagrant「封装包」,提供你一个美好的开发环境,你不需要在你的本机端安装
PHP、HHVM、网页服务器或任何服务器软件。不用担心搞乱你的系统!Vagrant
封装包可以搞定一切。如果有什么地方出现故障,你可以在几分钟内快速的销毁并重建虚拟机。

Homestead 可以在任何 Windows、Mac 或 Linux 上面运行,里面包含了 Nginx
网页服务器、PHP 5.6、MySQL、Postgres、Redis、Memcached
还有所有你要开发精彩的 Laravel 应用程序所需的软件。

附注: 如果您是 Windows 的用户,您可能需要启用硬件虚拟化(VT-x)。通常需要通过 BIOS 来启用它。

Homestead 目前是构建且测试于 Vagrant 1.7 版本。

奥门新浦京官方网站 1

安装与设置

内置软件

  • Ubuntu 14.04
  • PHP 5.6
  • HHVM
  • Nginx
  • MySQL
  • Postgres
  • Node (With Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Laravel Envoy
  • Blackfire Profiler

Tesseract是一个能实现OCR的开源项目。你能在*Nix系统,Mac系统和Windows系统上运行这个项目,但是只要使用一个库,我们就能在PHP项目中使用它了。本教程的目的是教你如何使用。

第一步

在你使用 Homestead 环境之前,你必须先安装 VirtualBox
5.1
、VMWare
或者
Parallels
中的一个,然后再安装
Vagrant。上述软件均提供了针对不同操作系统的可视化安装包。

若要使用 VMware provider,你需要同时购买 VMware Fusion / Workstation
以及 VMware Vagrant
插件
的软件授权,因为它们不是免费的。使用 VMware
的优势是:可以获得开箱即用的共享文件夹特性。

若要使用 Parallels provider,你需要安装 Parallels Vagrant
插件
,这是免费的。

安装与配置

安装

安装 Homestead Vagrant Box

当 VirtualBox / VMware 以及 Vagrant 安装完成后,你可以使用以下命令将
laravel/homestead 这个 box 添加进你的 Vagrant 当中。 homestead box
的下载会花费你一点时间,具体的下载时长由网络速度决定:

vagrant box add laravel/homestead

如果上面的命令运行失败,请先确保你已经安装了最新版本的 Vagrant。

  • 如果使用国内网络,可以复制终端上显示的 homestead box
    下载地址手动下载并重命名。例如重命名为 virtualbox-3.0.0.box。

然后,新建一个 metadata.json 文件,并写入以下示例内容:

{
    "name": "laravel/homestead",
    "versions": 
    [
        {
            "version": "3.0.0",
            "providers": [
                {
                  "name": "virtualbox",
                  "url": "virtualbox-3.0.0.box"
                }
            ]
        }
    ]
}

最后,使用以下命令手动添加 box

vagrant box add metadata.json # 添加 box
vagrant box list # 列出所有 box

安装 VirtualBox / VMWare 与 Vagrant

在启动你的 Homestead 环境之前,你必须先安装 VirtualBox 和 Vagrant.
两套软件在各平台都有提供易用的可视化安装程序。

准备

为了让事情变得简单和一致的, 我们将使用虚拟机(本文使用Vagrant)来运行应用程序,这会涉及到安装PHP和Nginx,我们将安装Tesseract来分别演示过程。如果你想自己基于现有Debian-based系统安装Tesseract,你可以跳过下一部分—或者查看the README来获得在其他*nix上,Mac系统或者Windows的安装指导.

安装 Homestead

你可以简单使用 Git 克隆代码仓库的方式来安装
Homestead。建议将克隆的代码仓库重命名为 Homestead
,并放置到你的「home」目录中,如此一来 Homestead box
就能作为主机,为你的所有 Laravel 项目提供服务:

cd ~

git clone https://github.com/laravel/homestead.git Homestead

由于 Homestead 的 master
分支并不是稳定分支,你应该检出已经标签过的稳定版本。你可以在 Github
Release
Page
找到最新的稳定版本。

cd Homestead

// 检出所需要的版本...
git checkout v5.4.0

一旦你克隆完 Homestead 的代码仓库,就可以在 Homestead 目录中运行 bash
init.sh 命令来创建 Homesstead.yaml 配置文件。 Homesstead.yaml
文件会被放置在你的 Homestead 目录中:

// Mac / Linux...
bash init.sh

// Windows...
init.bat

VMware

除了 VirtualBox 之外, Homestead 也支持 VMware. 如果使用 VMware 作为
provider, 你需要购买 VMware Fusion / Desktop 以及 VMware Vagrant
plug-in. VMware 提供了更快、性能更好的共享文件夹。

配置Vagrant

为了配置Vagrant以跟上本教程,完成如下步骤。或者你也可以简单的从Github获得代码。

 

输入以下命令来下载Homestead Improved Vagrant配置到一个名为orc的文件夹:

git clone https://github.com/Swader/homestead_improved ocr

将Nginx配置文件Homestead.yml中的以下代码:

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public

修改成:

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public

同样要在hosts文件中添加

192.168.10.10       homestead.app

配置 Homestead

增加 Vagrant 封装包

当 VirtualBox / VMware 和 Vagrant 安装完成后,你可以在终端机以下列命令将
‘laravel/homestead’ 封装包安装进你的 Vagrant
安装程序中。下载封装包会花你一点时间,时间长短将依据你的网络速度决定:

vagrant box add laravel/homestead

如果这个命令失败了, 你可能安装的是一个老版本的 Vagrant
需要指定一个完整的 URL:

vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead

安装Tesseract

下一步是安装Tesseract

因为Homestead Improved 使用debian,我们可以在使用vagrant ssh登陆虚拟机后使用apt-get 来安装它,简单运行如下命令:

sudo apt-get install tesseract-ocr

正如上文提到的,在the README中有其他的操作系统对应教程。

配置你的提供者

Homestead.yaml 中的 provider 参数设置取决于你用的是哪一个 Vagrant 提供者
virtualbox 、vmware_fusion 、vmware_workstation 或者
parallels。你可以根据自己的实际情况来设置提供者:

provider: virtualbox

安装 Homestead

你可以简单地通过手动复制资源库的方式来安装 Homestead。将资源库复制至你的
“home” 目录中的 Homestead 文件夹,如此一来 Homestead
封装包将能提供主机服务给你所有的 Laravel(及 PHP)应用:

git clone https://github.com/laravel/homestead.git Homestead

一旦你克隆完 Homestead 仓库,从 Homestead 目录中执行 bash init.sh
命令来创建 Homestead.yaml 配置文件:

bash init.sh

Homestead.yaml 文件,将会被放置在你的 ~/.homestead 目录中。

测试并定制安装

我们将使用PHP包装,但是之前我们可以在命令行测试Tesseract。

首先保存这个图片sign.png

在虚拟机中,执行如下命令来从图片中读取文字

tesseract sign.png out

这将在当前文件夹创建一个文件:out.txt里面应该有单词:CAUTION

现在尝试sign2.jpg

tesseract sign2.jpg out

这次产生单词Einbahnstral’ie。很接近但不正确—虽然图像中的文字相当清晰,它没能识别字符ß。

为了获使Tesseract正常读取字符串,我们需要安装一些新的语言文件—就本例来说,德语。

这里有一个全面的可用语言文件列表,但我们直接下载所需的文件:

wget https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.deu.tar.gz

解压:

tar zxvf tesseract-ocr-3.02.deu.tar.gz

然后把文件复制到如下目录:

/usr/share/tesseract-ocr/tessdata

例如

cp deu-frak.traineddata /usr/share/tesseract-ocr/tessdata
cp deu.traineddata /usr/share/tesseract-ocr/tessdata

现在我们再次执行原来的命令但是要用 –l

tesseract sign2.jpg out -l deu

“deu” 是德语的 ISO 639-3码.

这次,文字应该是Einbahnstraße(正确的)。

可以通过重复上述过程来使用任意语言。

配置共享文件夹

你可以在 Homestead.yaml 文件的 folders 属性里列出所有想与 Homestead
环境共享的文件夹。这些文件夹中的文件若有变更,它们将会在你的本机电脑与
Homestead 环境自动更新同步。你可以在这里设置多个共享文件夹:

folders:
    - map: ~/Code
      to: /home/vagrant/Code

若要启动
NFS
,只需要在共享文件夹的设置值中加入一个简单的参数:

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: "nfs"
  • 如果使用 NFS ,建议你安装
    vagrant-bindfs
    插件。 这个插件会替你处理 box 中的文件或目录权限问题。

你也可以在配置中传递任何 Vagrant
共享文件夹
支持的参数,在 options 配置项下列出它们:

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: "rsync"
      options:
          rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
          rsync__exclude: ["node_modules"]

配置你的 Provider

Homestead.yaml 文件中的 provider 键表明需要使用的 Vagrant
prodiver:virtualboxvmware_fusion (Mac OS X)、或者
vmware_workstation (Windows),你可以根据自己的喜好设定 provider 。

provider: virtualbox

配置应用程序

我们将使用这个库来用PHP使用Tesseract。

我们将建立一个极简的web应用:用户上传图片,并查看OCR处理结果。我们将使用Silex microframework 来实现。不要担心你不熟悉它,这个应用本身很简单。

记住这篇教程的所有代码都能在Github上获得。

第一步是用Composer来安装依赖文件:

composer require silex/silex twig/twig thiagoalessio/tesseract_ocr:dev-master

然后建立三个文件夹:

- public
- uploads
- views

我们需要上传表单(viewsindex.twig):

<html>
  <head>
    <title>OCR</title>
  </head>
  <body>

    <form action="" method="post" enctype="multipart/form-data">
      <input type="file" name="upload">
      <input type="submit">
    </form>

  </body>
</html>

需要一个结果展示页面(viewsresults.twig)::

<html>
  <head>
    <title>OCR</title>
  </head>
  <body>

    <h2>Results</h2>

    <textarea cols="50" rows="10">{{ text }}</textarea>

    <hr>

    <a href="/">← Go back</a>

  </body>
</html>

现在建立skeleton Silex app (publicindex.php):

<?php 

require __DIR__.'/../vendor/autoload.php'; 

use SymfonyComponentHttpFoundationRequest; 

$app = new SilexApplication(); 

$app->register(new SilexProviderTwigServiceProvider(), [
  'twig.path' => __DIR__.'/../views',
]);

$app['debug'] = true; 

$app->get('/', function() use ($app) { 

  return $app['twig']->render('index.twig');

}); 

$app->post('/', function(Request $request) use ($app) { 

    // TODO

}); 

$app->run();

如果你在浏览器访问这个应用,你应该能看到一个文件上传表单。如果你在使用Homestead Improved Vagrant,你可以通过如下链接访问该应用。

http://homestead.app/

下一步是实现文件上传。Silex使得这项工作非常简单;$request包含一个files组件,我们可以通过它来获得任意上传的文件,代码:

// Grab the uploaded file
$file = $request->files->get('upload'); 

// Extract some information about the uploaded file
$info = new SplFileInfo($file->getClientOriginalName());

// Create a quasi-random filename
$filename = sprintf('%d.%s', time(), $info->getExtension());

// Copy the file
$file->move(__DIR__.'/../uploads', $filename);

如你所见,我们产生随机文件名来减少文件名冲突—但在本应用中,我们怎么命名文件是不重要的。一旦我们在本地有一份文件拷贝,我们就可以产生一个Tessearct库的实例,然后进行分析:

// Instantiate the Tessearct library
$tesseract = new TesseractOCR(__DIR__ . '/../uploads/' . $filename);

在图像上实现OCR相当简单,我们只需调用方法recognize()。

// Perform OCR on the uploaded image
$text = $tesseract->recognize();

最后我们把结果展示到结果页面:

return $app['twig']->render(
    'results.twig',
    [
        'text'  =>  $text,
    ]
);

在一些图片上尝试,看看它效果怎样。如果你有困难,可以参考这个

配置 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 配置到虚拟机上。

配置你的 SSH 密钥

然后你需要编辑 Homestead.yaml。可以在文件中配置你的 SSH
公开密钥,以及主要机器与 Homestead 虚拟机之间的共享目录。

如果没有 SSH 密钥的话, 在 Mac 和 Linux
下,你可以利用下面的命令来创建一个 SSH 密钥组:

ssh-keygen -t rsa -C "[email protected]"

在 Windows 下,你需要安装 Git 并且使用包含在 Git 里的 Git Bash
来执行上述的命令。另外你也可以使用 PuTTY 和 PuTTYgen。

一旦你创建了一个 SSH 密钥,记得在你的 Homestead.yaml 文件中的
authorize 属性指明密钥路径。

一个实际的例子

让我们来看OCR一个更实用的例子。在本例中,我们尝试在图像中找到一个格式化的电话号码。

看看下面一幅图,上传到你的应用:

奥门新浦京官方网站 2

结果应该如下:

:ii‘i
Customer Service Helplines

British Airways Helpline

09040 490 541

它没有挑出正文文本,这是我们能料到的,因为图片质量太差。虽然识别了号码但是也有一些“噪声”。

为了提取相关信息,有如下几件事我们可以做。

你可以让Tesseract 把它的结果限制在一定的字符集内,所以我们告诉它只返回数字型的内容代码如下:

$tesseract->setWhitelist(range(0,9));

但这样有个问题。它常常把非数字字符解释成数字而非忽略它们。比如“Bob”可能被解释称数字“808”。

所以我们采用两步处理。

  1. 尝试提取可能是电话号码的数字串。
  2. 用一个库轮流评估每一个候选字符,一旦找到一个有效电话号码则停止。

第一步,我们可以用一个基本的正则表达式。可以用谷歌电话库来确定一个数字串是否是合法电话号码。

备注:我已在Sitepoint 写过关于谷歌电话库的内容。

让我们给谷歌电话库添加一个PHP 端口,修改composer.json,添加:

"giggsey/libphonenumber-for-php": "~7.0"

别忘了升级:

composer update

现在我们可以写一个函数,输入为一个字符串,尝试提取一个合法的电话号码

/**
 * Parse a string, trying to find a valid telephone number. As soon as it finds a 
 * valid number, it'll return it in E1624 format. If it can't find any, it'll 
 * simply return NULL.
 * 
 * @param  string   $text           The string to parse
 * @param  string   $country_code   The two digit country code to use as a "hint"
 * @return string | NULL
 */
function findPhoneNumber($text, $country_code = 'GB') {

  // Get an instance of Google's libphonenumber
  $phoneUtil = libphonenumberPhoneNumberUtil::getInstance();

  // Use a simple regular expression to try and find candidate phone numbers
  preg_match_all('/(+d+)?s*((d+))?([s-]?d+)+/', $text, $matches);

  // Iterate through the matches
  foreach ($matches as $match) {

    foreach ($match as $value) {

      try {

        // Attempt to parse the number
        $number = $phoneUtil->parse(trim($value), $country_code);    

        // Just because we parsed it successfully, doesn't make it vald - so check it
        if ($phoneUtil->isValidNumber($number)) {

          // We've found a telephone number. Format using E.164, and exit
          return $phoneUtil->format($number, libphonenumberPhoneNumberFormat::E164);

        }

      } catch (libphonenumberNumberParseException $e) {

        // Ignore silently; getting here simply means we found something that isn't a phone number

      }

    }
  }

  return null;

}

希望注释能解释这个函数在干什么。注意如果这个库没能从字符串中解析出一个合法的电话号码它会抛出一个异常。这不是什么问题;我们直接忽略它并继续下一个候选字符。

如果我们找到一个电话号码,我们以E.164的形式返回它。这提供了一个国际化的号码,我们可以用来打电话或者发送SMS。

现在我们可以如下使用:

$text = $tesseract->recognize();

$number = findPhoneNumber($text, 'GB');

我们需要给谷歌电话库提供一个提示来说明这个号码是哪个国家的。你也可以改成你自己的国家。

我们把所有的这些打包在一个新的路由中:

$app->post('/identify-telephone-number', function(Request $request) use ($app) { 

  // Grab the uploaded file
  $file = $request->files->get('upload'); 

  // Extract some information about the uploaded file
  $info = new SplFileInfo($file->getClientOriginalName());

  // Create a quasi-random filename
  $filename = sprintf('%d.%s', time(), $info->getExtension());

  // Copy the file
  $file->move(__DIR__.'/../uploads', $filename); 

  // Instantiate the Tessearct library
  $tesseract = new TesseractOCR(__DIR__ . '/../uploads/' . $filename);

  // Perform OCR on the uploaded image
  $text = $tesseract->recognize();

  $number = findPhoneNumber($text, 'GB');

  return $app->json(
    [
      'number'     =>  $number,
    ]
  );

});

我们现在有简单的API的基础—-也就是JSON响应-—我们可以用来作为一个简单的移动应用的后端,这款应用可以用来从一幅图中添加联系人,打电话。

关于 Hosts 文件

你必须将在 Nginx sites 中所添加的「域名」也添加到你本机电脑的 hosts 上。
hosts 文件会将请求重定向至 Homestead 环境中设置的本地域名。在 Mac 或
Linux 上,该文件通常会存放在 /etc/hosts。在 Windows 上,则存放于
C:WindowsSystem32driversetchosts。设置内容如下所示:

192.168.10.10  homestead.app

请务必确认 IP 地址与 Homestead.yaml 文件中设置的相同。将域名设置在 hosts
文件之后,你就可以通过网页浏览器访问你的网站。

http://homestead.app

配置你的共享文件夹

Homestead.yaml 文件中的 folders 属性列出了所有你想在 Homestead
环境共享的文件夹列表。这些文件夹中的文件若有变动,他们将会同步在你的本机与
Homestead 环境里。你可以将你需要的共享文件夹都配置进去。

如果要开启 NFS,只需要在 folders 中加入一个标识:

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: "nfs"

总结

OCR有许多应用——并且很容易整合进你的应用(超过你的预期)。本文中,我们安装了开源OCR包;并使用一个包装器库,把它整合进一个非常简单的PHP应用。我们只是触及到了所有可能性的表面,希望这能给你一些想法,帮你想想怎么在你自己的应用中使用OCR。

启动 Vagrant Box

根据你的喜好完成 Homestead.yaml 编辑后,进入你的 Homestead 目录并运行
vagrant up 命令。 Vagrant 就会根据 Homestead.yaml
里的配置信息启动,并为虚拟机设置共享文件夹和 Nginx 网站。

如果要移除虚拟机,你可以使用 vagrant destroy –force 命令

配置你的 Nginx 站点

对 Nginx 不熟悉?没关系。sites 属性允许你简单的对应一个 域名 到一个
homestead 环境中的目录。一个例子的站点被配置在 Homestead.yaml
文件中。同样的,你可以加任何你需要的站点到你的 Homestead
环境中。Homestead 可以为你每个进行中的 Laravel
应用提供方便的虚拟化环境。

你可以通过配置 hhvm 属性为 true 来让虚拟站点支持 HHVM:

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
      hhvm: true

Each site will be accessible by HTTP via port 8000 and HTTPS via port
44300.

为每个项目分开安装

除了在全局范围内安装 Homestead 环境,所有项目共享相同的 Homestead box
外,你还可以为每一个项目配置一个独立的 Homestead 实例。通过传递
Vagrantfile ,可以实现为每个项目分别安装上 Homestead
,其他项目成员只需要通过简单的 vagrant up 即能跟你拥有一样的 Homestead
环境。

要将 Homestead 直接安装到项目中,需要使用 Composer:

composer require laravel/homestead --dev

一旦 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 或其它想要使用的域名。

如果你希望使用 MariaDB 来替换 MySQL,你可以在 Homestead.yaml
文件中增加一个 mariadb 的选项,这个选项会移除 MySQL 并安装 MariaDB。因为
MariaDB 可用作 MySQL 的替代品,所以在你的数据库配置信息里,可继续使用
mysql 数据库驱动。

box: laravel/homestead
ip: "192.168.20.20"
memory: 2048
cpus: 4
provider: virtualbox
mariadb: true
  • 安装 MariaDB 需要连接境外网络,请确保网络畅通!

Bash Aliases

如果要增加 Bash aliases 到你的 Homestead 封装包中,只要将内容添加到
~/.homestead 目录最上层的 aliases 文件中即可。

常见用法

启动 Vagrant 封装包

当你根据你的喜好编辑完 Homestead.yaml 后,在终端机里进入你的 Homestead
文件夹并执行 vagrant up 命令。

Vagrant 会将虚拟机开机,并且自动配置你的共享目录和 Nginx
站点。如果要移除虚拟机,可以使用 vagrant destroy --force 命令。

为了你的 Nginx 站点,别忘记在你的机器的 hosts
文件将「域名」加进去。hosts 文件会将你的本地域名的站点请求指向你的
Homestead 环境中。在 Mac 和 Linux,该文件放在 /etc/hosts。在 Windows
环境中,它被放置在
C:WindowsSystem32driversetchosts。你要加进去的内容类似如下:

192.168.10.10  homestead.app

务必确认 IP 地址与你的 Homestead.yaml
文件中的相同。一旦你将域名加进你的 hosts
文件中,你就可以通过网页浏览器访问到你的站点。

http://homestead.app

继续读下去,你会学到如何连接到数据库!

全局使用

有时候你希望在文件系统的任何地方都可以使用 vagrant up
命令启动虚拟机,那么你需要添加以下代码到你的 Mac / Linux 系统的 Bash
profile 文件里面。对于 Windows 系统,您可以通过在 PATH
环境变量中添加「批处理」文件的方式来实现此目的。下面这些脚本让你可以在文件系统的任何位置都能运行
Vagrant 命令,它相当于切换到 Homestead 目录运行 Vagrant 命令:

常见用法

Mac / Linux
function homestead() {
    ( cd ~/Homestead && vagrant $* )
}

请将 ~/Homestead 这个路径修改为你的实际 Homestead
的安装路径,一旦这个函数安装成功,就可以在系统的任意位置运行 homestead
up 或 homestead ssh 命令。

通过 SSH 连接

要通过 SSH 连接上您的 Homestead 环境,在终端机里进入你的 Homestead
目录并执行 vagrant ssh 命令。

因为你可能会经常需要通过 SSH 进入你的 Homestead
虚拟机,可以考虑在你的主要机器上创建一个”别名” 用来快速 SSH 进入
Homestead 虚拟机:

alias vm="ssh [email protected] -p 2222"

一旦你创建了这个别名,无论你在主要机器的哪个目录,都可以简单地使用 “vm”
命令来通过 SSH 进入你的 Homestead 虚拟机。

你也可以在 Homestead 目录使用 vagrant ssh 命令。

Windows

在系统的任意位置创建一个批处理文件 homestead.bat ,并添加如下内容:

@echo off

set cwd=%cd%
set homesteadVagrant=C:Homestead

cd /d %homesteadVagrant% && vagrant %*
cd /d %cwd%

set cwd=
set homesteadVagrant=

请确保将 C:Homestead 这个路径修改为你的实际 Homestead
的安装路径,创建完这个文件后,将这个文件路径添加到 PATH
环境变量中,就可以在系统的任意位置运行 homestead up 或 homestead ssh
命令。

连接数据库

Homestead 封装包中,已经预了 MySQL 与 Postgres
两种数据库。为了更简便,Laravel 的 local
数据库配置已经默认将其配置完成。

如果想要从本机上通过 Navicat 或者 Sequel Pro 连接 MySQL 或者 Postgres
数据库,你可以连接 127.0.0.1 的端口 33060 (MySQL) 或 54320
(Postgres)。而帐号密码分别是 homestead / secret

附注: 从本机端你应该只能使用这些非标准的连接端口来连接数据库。因为当 Laravel 运行在虚拟机时,在 Laravel 的数据库配置文件中依然是配置使用默认的 3306 及 5432 连接端口。

通过 SSH 连接

你可以在 Homestead 目录运行 vagrant ssh 命令来连接虚拟主机。

但是,由于您可能需要频繁地使用 SSH 来连接 Homestead
主机,请考虑将上述「function」添加到你的主机,以便可以快速的通过 SSH
进入你的 Homestead box

增加更多的站点

在 Homestead 环境上架且运行后,你可能会需要为 Laravel 应用程序增加更多的
Nginx 站点。你可以在单一个 Homestead 环境中运行非常多 Laravel
安装程序。有两种方式可以达成:第一种,在 Homestead.yaml
文件中增加站点然后在 Homestead 目录中执行 vagrant provision

Note: 这个操作是具有破坏性的,当执行 provision 命令,你现有的数据库会被摧毁并重新创建。

另外,也可以使用存放在 Homestead 环境中的 serve 命令文件。要使用
serve 命令文件,请先 SSH 进入 Homestead 环境中,并执行下列命令:

serve domain.app /home/vagrant/Code/path/to/public/directory 80

附注: 在执行 serve 命令过后,别忘记将新的站点加进本机的 hosts 文件中。

连接数据库

在 box 中已经为 MySQL 和 Postgres 配置好了一个开箱即用的数据库 homestead
,为了更方便的使用它,Laravel 中的 .env
文件将这个数据库设置成了框架默认使用的数据库。

如果想要从你主机上的数据库客户端连接 MySQL 或 Postgres,可以通过
127.0.0.1 来使用端口 33060(MySQL) 或 54320(Postgres)
连接。账号密码分别是 homestead / secret

  • 因为虚拟机做了端口转发,所以在本机电脑上你应当只使用这些非标准的连接端口。但在
    Laravel 数据库配置文件中,你依然要使用默认的 3306 及 5432 连接端口。

连接端口

以下的端口将会被转发至 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

增加更多网站

一旦 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.10  homestead.app
192.168.10.10  another.app

当你的网站添加完成后,切换到 Homestead 目录运行 vagrant reload
–provision 命令就可以应用新的更改。

增加额外端口

你也可以自定义转发额外的端口至 Vagrant box,只需要指定协议:

ports:
    - send: 93000
      to: 9300
    - send: 7777
      to: 777
      protocol: udp

网站类型

Homestead 支持多种类型的网站,允许您轻松地运行那些不基于 Laravel
的项目。 例如,我们可以使用「symfony2」配置项,轻松地在 Homestead 中添加
Symfony 应用程序:

sites:
    - map: symfony2.app
      to: /home/vagrant/Code/Symfony/web
      type: symfony2

支持的站点类型有:
apache、laravel(默认)、proxy、silverstripe、statamic、symfony2 和
symfony4。

Blackfire Profiler

Blackfire Profiler 是由 SensioLabs
创建的一个分析工具,它会自动的收集代码执行期间的相关数据,比如 RAM, CPU
time, 和 disk I/O. 如果你使用 Homestead
,那么使用这个分析工具会变得非常简单。

blackfire 所需的包已经安装在 Homestead box 中,你只需要在
Homestead.yaml 文件中设置 Server ID 和 token :

blackfire:
    - id: your-server-id
      token: your-server-token
      client-id: your-client-id
      client-token: your-client-token

当你设定完 Blackfire 的凭证信息,使用 vagrant provision
令配置生效。当然,你也需要通过阅读Blackfire 文档
来学习如何在你的浏览器中安装 Blackfire 扩展。

如何使用vagrant在虚拟机安装Hadoop集群

Vagrant 中高效的 Puppet 模块管理

使用 Vagrant 和 Fabric 用于集成测试

使用 Vagrant 搭建开发环境

Windows 下配置 Vagrant 环境

使用 Vagrant 搭建开发环境

本文永久更新链接地址:

Vagrant 搭建虚拟机环境 介绍 Laravel 致力于让
PHP 开发体验更愉快,也包含你的本地开发环境。Vagrant
提供了一个简单、优雅的方式来管…

网站参数

你还可以使用「params」配置项,添加额外的 Nginx fastcgi_param
值到你的网站。例如添加一个名称为「FOO」值为「BAR」的额外配置。

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
      params:
          - key: FOO
            value: BAR

配置 Cron 调度器

Laravel 提供了便利的方式来 调度 Cron
任务
,通过 schedule:run Artisan 命令,调度便会在每分钟被运行。
schedule:run 命令会检查定义在你 AppConsoleKernel
类中调度的任务,判断哪个任务该被运行。

如果你想为 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
  • Mailhog: 8025 → Forwards To 8025

转发更多端口

如果需要的话,你可以转发更多端给 Vagrant box
,甚至可以指定它们的协议类型。

ports:
    - send: 50000
      to: 5000
    - send: 7777
      to: 777
      protocol: udp

共享你的环境

有时候你想跟你的同事或者是客户共享你目前的工作进度。Vagrant
为此提供了一个内置方法 vagrant share;不过,如果你在 Homestead.yaml
文件中配置了多个站点,那么这条命令将会变得没多大用处。

为了解决这个问题,Homestead 提供了自己的 share 命令。开始之前,通过
vagrant ssh 命令 SSH 进你的 Homestead 机器中,然后运行 share
homestead.app。这会从你的 Homestead.yaml 配置文件中共享 homestead.app
站点。当然了,你也可以用其他已经配置的站点来代替 homestead.app。

share homestead.app

运行完命令之后,你可以看到一个包含活动日志和共享站点外网访问路径的 Ngrok
界面。如果你想要自定义地区或者其他 Ngrok 选项,你可以添加到 share
命令后面:

share homestead.app -region=eu -subdomain=laravel
  • 谨记,Vagrant 本质上是不安全的,当你运行 share
    命令的时候,你会把你的虚拟机暴露在互联网中。

多个 PHP 版本

  • 这个特性仅与 Nginx 兼容。

Homestead 6 支持在同一个虚拟机上引入多个不同版本的 PHP。您需要在
Homestead.yaml 配置文件中为某个站点指明需要使用的 PHP 版本即可。 可用的
PHP 版本有:「5.6」、「7.0」、「7.1」

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
      php: "5.6"

此外,您还可以通过 CLI 使用任何支持的 PHP 版本:

php5.6 artisan list
php7.0 artisan list
php7.1 artisan list

网络接口

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

你可以简单的用两个步骤来更新 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

历史版本

如果你需要一个旧版本的 PHP ,请在尝试使用旧版本 Homestead
之前,先阅读文档 多个 PHP
版本。

你可以通过添加以下配置到你的 Homestead.yaml 文件来方便的覆盖 Homestead
使用的 box 版本:

version: 0.6.0

例如:

box: laravel/homestead
version: 0.6.0
ip: "192.168.20.20"
memory: 2048
cpus: 4
provider: virtualbox

当你使用旧版本的 box 时,你需要确保 Homestead
源代码的版本与之对应,下面的图表展示了支持的 box 版本,以及与之对应的
Homestead 的源代码版本和 box 所提供的 PHP 版本:

Homestead Version Box Version
PHP 7.0 3.1.0 0.6.0
PHP 7.1 4.0.0 1.0.0

Provider 的特殊设置

VirtualBox

Homestead 默认将 natdnshostresolver 设置为 on。这允许 Homestead
使用你的主机系统中的 DNS 设置。如果你想重写这行为,你可以在你的
Homestead.yaml 文件中添加下面这几行:

provider: virtualbox
natdnshostresolver: off

译者署名

用户名 贡献
WangYan 翻译

原文链接:http://shouce.jb51.net/laravel-5-5/source/homestead.html#configuring-homestead

发表评论

电子邮件地址不会被公开。 必填项已用*标注