通过 Vagrant 搭建虚拟机环境

本文由码农网 –
邱康原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!

( 以下的安装过程简书是以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 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:WindowsSystem32driversetchosts。设置内容如下所示:

192.168.10.10homestead.app

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

启动 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并通过网页浏览器访问

安装
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命令会检查定义在你AppConsoleKernel类中调度的任务,判断哪个任务该被运行。

如果你想为 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#

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

Provider
的特殊设置#

VirtualBox#

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

provider:virtualboxnatdnshostresolver:off

介绍

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 版本。

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

内置软件

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

澳门新浦京电子游戏 1

安装与配置

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

安装 VirtualBox / VMWare 与 Vagrant

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

安装

VMware

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

准备

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

增加 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

配置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

你可以简单地通过手动复制资源库的方式来安装 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 目录中。

安装Tesseract

下一步是安装Tesseract

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

sudo apt-get install tesseract-ocr

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

配置你的 Provider

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

provider: virtualbox

测试并定制安装

我们将使用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(正确的)。

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

配置你的 SSH 密钥

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

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

ssh-keygen -t rsa -C "you@homestead"

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

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

配置应用程序

我们将使用这个库来用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,
    ]
);

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

配置你的共享文件夹

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

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

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

一个实际的例子

让我们来看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响应-—我们可以用来作为一个简单的移动应用的后端,这款应用可以用来从一幅图中添加联系人,打电话。

配置你的 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.

总结

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

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

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

常见用法

通过 SSH 连接

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

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

alias vm="ssh vagrant@127.0.0.1 -p 2222"

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

你也可以在 Homestead 目录使用 vagrant 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 连接端口。

增加更多的站点

在 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
文件中。

连接端口

以下的端口将会被转发至 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 box,只需要指定协议:

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

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集群
http://www.linuxidc.com/Linux/2013-04/82750.htm

Vagrant 中高效的 Puppet 模块管理
http://www.linuxidc.com/Linux/2014-05/101873.htm

使用 Vagrant 和 Fabric 用于集成测试
http://www.linuxidc.com/Linux/2014-07/104113.htm

使用 Vagrant 搭建开发环境
http://www.linuxidc.com/Linux/2014-07/104116.htm

Windows 下配置 Vagrant 环境
http://www.linuxidc.com/Linux/2014-07/104115.htm

使用 Vagrant 搭建开发环境
http://www.linuxidc.com/Linux/2014-07/104116.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-08/121985.htm

澳门新浦京电子游戏 3

发表评论

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