Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead)

PHP admin 598℃ 0评论

装homestead环境不是第一次了,确实,这个环境对开发者的要求会高一些,中间会出现一些大大小小的坑,不过应该还好,兵来将挡,水来土掩,针对每个问题一一解决,应该问题不大,而且安装过程也能增强巩固开发者的技能。

 

简介

Laravel 为开发者提供了一套完善的重量级本地开发环境 —— Laravel Homestead。

Laravel Homestead 实际是一个打包好各种 Laravel 开发所需软件和工具的 Vagrant 盒子(关于 Vagrant 盒子的释义请参考 Vagrant 官方文档),该盒子为我们提供了一个优秀的开发环境,有了它,我们不再需要在本地环境安装 PHP、Composer、Nginx、MySQL、Memcached、Redis、Node 等其它工具软件,我们也完全不用再担心误操作搞乱操作系统 —— 因为 Vagrant 盒子是一次性的,如果出现错误,可以在数分钟内销毁并重新创建该 Vagrant 盒子!

 

安装 Homestead Vagrant 盒子

vagrant box add laravel/homestead

运行命令会列出一个选择列表,选择 virtualbox 对应选项即可,然后进入漫长的下载等待,看看多喜人,还要6小时40分钟才能下载完成,基本上一觉醒来的节奏,还是在使用了 VPN 翻墙的情况下,如果一直提示网络超时的话只能去 Vagrant 官网下载了(下载地址),通过这种方式下载的话需要手动将其添加到 Vagrant:

vagrant box add laravel/homestead ~/Downloads/virtualbox.box
运行上述命令有可能报错:

Check your Homestead.yaml file, the path to your private key does not exist.
解决办法如下:

ssh-keygen -t rsa -b 4096 -C “your_email@example.com”
eval “$(ssh-agent -s)”
ssh-add -K ~/.ssh/id_rsa

安装 Homestead

你可以通过克隆仓库代码来实现 Homestead 安装。将仓库克隆到用户目录下的 Homestead 目录,这样 Homestead 盒子就可以作为所有其他 Laravel 项目的主机:

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

克隆完成后,你需要检查 Homestead 的版本标签,因为 master 分支不会总是稳定版本,你可以在 GitHub Release Page 查找到最新稳定版本然后在本地将其检出:

cd Homestead

// Clone the desired release…
git checkout v6.1.0
接下来,在 Homestead 目录下运行 bash init.sh 命令来创建 Homestead.yaml 配置文件,生成的 Homestead.yaml 配置文件文件位于当前 Homestead 目录

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

配置 Homestead

Homestead.yaml 文件中的 provider 键表示使用哪个 Vagrant 提供者:virtualbox、vmware_fushion、 vmware_workstation 或 parallels,你可以将其设置为自己喜欢的提供者,当然对大部分人来说也没得选:

provider: virtualbox
配置共享文件夹

Homestead.yaml 文件中的 folders 属性列出了所有主机和 Homestead 虚拟机共享的文件夹,一旦这些目录中的文件有了修改,将会在本地和 Homestead 虚拟机之间保持同步,如果有需要的话,你可以配置多个共享文件夹:

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

如果要开启 NFS,只需简单添加一个标识到同步文件夹配置:

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

注:使用 NFS 的话,需要考虑安装 vagrant-bindfs 插件。该插件可用于在 Homestead 盒子中为文件和目录维护正确的用户/组权限。

你还可以通过 options 传递其他 Vagrant 支持的同步文件夹选项:

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

配置 Nginx 站点

对 Nginx 不熟?没关系!通过 sites 属性你可以方便地将“域名”映射到 Homestead 虚拟机的指定目录,Homestead.yaml 中默认已经配置了一个示例站点。和共享文件夹一样,你可以配置多个站点:

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

如果你是在 Homestead 盒子启动之后进行了上述修改,需要运行 vagrant reload –provision 更新虚拟机上的 Nginx 配置。

Hosts文件

不要忘记把 Nginx 站点配置中的域名添加到本地机器上的 hosts 文件中,该文件会将对本地域名的请求重定向到 Homestead 虚拟机,在 Mac 或 Linux上,该文件位于 /etc/hosts,在 Windows 上,位于 C:\Windows\System32\drivers\etc\hosts,添加方式如下:

192.168.10.10 homestead.app

确保 IP 地址和你的 Homestead.yaml 文件中列出的一致,一旦你将域名添加到 hosts 文件,就可以在浏览器中通过该域名访问站点了:

http://homestead.app

注:在真正可以访问之前之前还需要通过 Vagrant 启动虚拟机上的 Homestead 盒子。

启动 Vagrant Box

配置好 Homestead.yaml 文件后,在 Homestead 目录下运行 vagrant up 命令,Vagrant 将会启动虚拟机并自动配置共享文件夹以及 Nginx 站点

启动之后,就可以在浏览器中通过 http://homestead.app 访问 Laravel 应用了(前提是 Web 目录下已经部署 Laravel 应用代码),laravel项目创建很简单,一行命令搞定:

laravel new blog

要登录到该虚拟机,使用 vagrant ssh 命令;

关闭该虚拟机,可以使用 vagrant halt 命令;

销毁该虚拟机,可以使用 vagrant destroy –force 命令。

 

安装MariaDB

如果你希望使用 MariaDB 来替代 MySQL,可以添加 mariadb 配置项到 Homestead.yaml 文件,该选项会移除 MySQL 并安装 MariaDB,MariaDB 是 MySQL 的替代品,完全兼容 MySQL,所以在应用数据库配置中你仍然可以使用 mysql 驱动:

box: laravel/homestead
ip: “192.168.20.20”
memory: 2048
cpus: 4
provider: virtualbox
mariadb: true

 

通过 SSH 连接

你可以在 Homestead 目录下通过运行 vagrant ssh 以 SSH 方式连接到虚拟机。如果你设置了全部访问 Homestead,也可以在任意路径下通过 homestead ssh 登录到虚拟机。

如果你需要以更简捷的方式连接到 Homestead,可以为主机添加一个别名来快速连接到 Homestead 盒子,创建完别名后,可以使用 vm 命令从任何地方以 SSH 方式连接到 Homestead 虚拟机:

alias vm=”ssh vagrant@127.0.0.1 -p 2222″

连接到数据库

Homestead 默认已经在虚拟机中为 MySQL 和 Postgres 数据库做好了配置,更方便的是,这些配置值与 Laravel 的 .env 中默认提供的配置一致。

想要通过本地的 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 命令即可:

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 命令重启虚拟机。

站点类型

Homestead 支持多种框架,所以即使你没有使用 Laravel 的话,也可以使用 Homestead,例如,我们可以通过 symfony2 站点类型轻松添加一个 Symfony 应用:

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

目前支持的站点类型包括 apache、laravel、proxy、silverstripe、statamic、symfony2 和 symfony

端口转发配置

默认情况下,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 本身支持通过 vagrant share 来支持这个功能;不过,如果你在 Homestead.yaml 文件中配置了多个站点的话就不行了。

为了解决这个问题,Homestead 内置了自己的 share 命令,该功能实现的原理是通过 Ngrok将本地服务分享到互联网上进行公开访问,关于该软件的细节我们这里不讨论,大家可以自行百度,我们主要关注在 Homestead 中如何使用这一功能。首先通过 vagrant ssh 登录到 Homestead 虚拟机然后运行 share homestead.app 命令,这样就可以分享 homestead.app 站点了,其他站点分享以此类推:

share homestead.app
运行完该命令之后,你就可以看到一个 Ngrok 界面出现,其中包含活动日志和分享站点所需的公开访问 URL

可以看到我的分享 URL 是 http://95920d84.ngrok.io/ 以及 https://95920d84.ngrok.io/,你可以通过这两个域名在任意联网机器上访问我的 Homestead 站点:

多个 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"

该功能实现的原理是通过 Homestead.yaml 中配置的 PHP 版本在 Homestead 中启动相应的 php-fpm 服务,然后更新 Nginx 中相应的站点配置:

此外,你可以在 CLI 中使用任意版本的 PHP:

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

 

转自中文官网:http://laravelacademy.org/post/7658.html/comment-page-1

这里分享一篇写得比较全面的文章: https://blog.sbot.io/articles/1

转载请注明:朋克网 » Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead)

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址