之前学习过一段时间的 Laravel ,换 mac 后一直没空做相关的事情,而且刚使用 mac 有点不习惯,怕坑太多,所以环境搭建就一直耽搁了下来。终于今天有一个比较完整的时间,一狠心就把这件事做了。一共花了差不多 5 个小时,回头看看其实还是非常简单的,主要是因为之前在 win 上面搭建环境的经验有一些先入为主的错误想法还有网上资料时效性导致绕了一些弯路。
homestead 是什么
Laravel 官方推荐使用 homestead 搭建环境,那么这个 homestead 究竟是什么鬼?相信很多和我一样不是专门搞服务器的同学看过各种资料后还会有点迷糊。刚开始看了一些介绍后我以为 homestead 是一个整合了 Nginx + PHP + MySQL + Composer 还有其他 Laravel 需要环境的安装包加管理器的概念,类似 win 平台上的 wnmp 之类的东西。不过装一半就发现完全是另一回事。
实际上 homestead 是一台虚拟机的原型,类似我们买电脑后预装的系统,只是这个系统预装了一切 Laravel 需要的东西。而我们最先进行的步骤安装 VirtualBox 和 Vargrnt 实际上就是安装了虚拟机。这意味着实际上 homestead 安装完成后我们的 mac 上并没有也不需要安装 PHP、Nginx、MySQL 等等的东西,所有东西都安装在另一台机器上(虚拟机)。
安装VirtualBox、Vargrant
VirtualBox 下载地址
Vagrant下载地址
这一步非常简单,官网都有 dmg 安装包,正常安装即可。
验证是否安装成功在终端使用以下命令行,显示版本信息就 OK 了。
vagrant -v
安装 Homestead Vagrant Box
直接输入以下命令行:
vagrant box add laravel/homestead
然后会提示选择版本,选择 virtualbox 版本相应序号即可。
这个步骤相当于下载虚拟机的预装系统,文件超过 1G,全程最耗时的步骤,请挂 VPN,你懂的。另外实在不行也可以考虑对 homestead.box 直接进行下载,并且手动导入。由于我自己是挂了 VPN 直接下了,手动导入的内容就不多说,文末会给出相应教程链接。
安装 Homestead
#切换到用户文件夹
cd ~
#克隆homestead项目 到 home/Homestead 文件夹
git clone https://github.com/laravel/homestead.git Homestead
git 项目克隆完成后,切换到 Homestead 文件夹,创建相关配置文件:
#切换到homestead目录
cd ~/Homestead
# Mac / Linux...
bash init.sh
编辑 Homestead.yaml
走完上面步骤后 Homestead 文件夹里会出现一个 Homesstead.yaml 配置文件。这个文件可以配置 mac 与虚拟机的共享文件夹、Nginx 站点、数据库等等、虚拟机使用 cpu 数、内存等等。 现在我们的目的是先安装并运行 Laravel 就行了,先使用其预设值即可,先不进行修改。但是我们需要根据其预设值对 mac 进行一些操作。
打开 Homesstead.yaml,先看一眼 folders 的值:
folders:
- map: ~/Code
to: /home/vagrant/Code
folders 决定了 mac 与虚拟机的共享文件夹,以上预设值指:mac 的 ~/Code
目录与虚拟机的 /home/vagrant/Code
是映射的关系。这时我们的 mac 上并没有 ~/Code
这个目录,自行新建即可。
#切换到用户目录
cd ~
#创建文件夹
mkdir -p code/lexing
编辑 /etc/hosts 文件
这时我们再看一看 Homesstead.yaml 的 ip 和 sites 两项:
ip: "192.168.10.10"
......
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
......
ip 是指 Homestead 的 ip,sites 则是指定域名去对应虚拟机的文件目录。记住这两个值,相应的去 /etc/hosts
文件最后添加如以下格式内容即可。另外提一下 etc 文件夹使用 Fider 的前往文件夹,输入/etc/
就可以进入了。
192.168.10.10 homestead.app
到这里准备工作就已经完成了,我们可以启动虚拟机了。
启动虚拟机
由于进入虚拟机就都要用命令行干活了,这里推荐一下可以使用 iTerm 这个命令行工具。
在mac命令行中输入 cd ~/Homestead
,切换到homestead项目所在到目录,然后输入 vagrant up
,启动画面如下图:
SSH 登入虚拟机
启动成功之后,输入vagrant ssh
登陆到 vagrant 虚拟机,如下图所示:
在虚拟机中安装 Laravel
成功登入后使用以下命令在虚拟机中使用 Composer(虚拟机中已经预装好了) 下载 Laravel。当然,VPN 不能停。如果使用 VPN 还是不行的话可能需要挂国内镜像,网上有部分资料比较陈旧,导致镜像网址 https 少了个 s,注意确认。
镜像用法点我!
cd Code
composer create-project laravel/laravel Laravel --prefer-dist
这里切换到的 Code 目录就是预设与 mac 用户目录下 Code 文件夹映射的文件夹。Composer 会在 Code
里新建一个 Laravel 文件夹,下载 Laravel 所需文件。也正好和 Homesstead.yaml
的 sites
指定的文件路径吻合。
–prefer-dist
: 意思是下载用于 distribution 的稳定版本,而不是开发中的版本。
下载完成后就大功告成了,浏览器里输入 homestead.app
(预设值的域名),出现以下画面就没问题了。
到这里我们的环境就已经搭建完成了。下面再补充一下 Homestead 的关机等必须知道的操作,还有就是我们要运行自己的项目必须要使用到的数据库连接和 Nginx 新增站点的操作。
关闭/删除/重建 Homestead
Homestead 相当于另一个系统,所以理所当然也是一个耗电小能手,所以不用的时候千万要记得关闭。以下是退出登陆并关闭虚拟机命令。
# 命令行工具退出对虚拟机系统登陆
eixt
# 虚拟机关机(位置要在 Homestead 文件夹)
vagrant halt
下次需要使用时,从 vagrant up
步骤开始即可。
在测试中因为各种原因导致虚拟机坏掉的时候,只需要对虚拟机进行删除、重建即可,非常方便。
# 删除当前虚拟机(需要在 Homestead 文件夹下)
vagrant destroy --force
# 重建虚拟机
vagrant up
注意删除指的是删除 vagrant up
建立的虚拟机,和删除整个 Homestead 是不同概念。如果完全不想使用 Homestead 了,想要删除可以参考下面链接。
删除 Homestead 与须知
连接数据库
实际上在虚拟机中已经为 MySQL 和 Postgres 配置好了一个开箱即用的数据库 homestead
。Laravel 中的 .env
文件的默认值正是使用了这个数据库。
数据库既然有了,那问题是怎么连接上呢?现在我们看一看刚才我们运行的 Laravel 项目原型中的 .env
文件中关于数据库的内容。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
可以看出连接指向了本机地址的 3306 端口,数据库名为 homestead,账号密码分别是 homestead / secret。有了这些信息,我们就能连接上数据库了,比较简单的情况下我们只需要修改数据库名为我们自己创建的数据库名。
如果想要从你主机上的数据库客户端连接 MySQL 或 Postgres,可以通过 127.0.0.1 来使用端口 33060(MySQL) 或 54320(Postgres) 连接。
注意是端口是 33060,不是文件上的 3306。我自己是使用 Workbench 连接数据库,少了一个 0 貌似连不上。
新增站点
使用 Homestead 的一大好处就是不用去折腾 Nginx 配置文件。要添加额外的网站,只需将网站添加到您的 Homestead.yaml 文件中:
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
- map: test.com
to: /home/vagrant/Code/test/public
然后在 /etc/hosts
文件中添加相应内容:
192.168.10.10 homestead.app
192.168.10.10 test.com
然后在 Homestead 文件夹下,使用 vagrant reload --provision
命令就完事了。网上有一些资料说这个命令会摧毁并重新创建现有的数据库,建议手动去修改 Niginx 的配置文件。我自己试了一下是没有这个情况出现的,不知道是因为版本还是我理解错误的原因。手动修改的方法我也试了一下,但是在虚拟机里没有权限导致失败,暂时没有解决。方法可以参考文末的链接。反正这个问题官方文档也并没有提及,我是不太想去折腾 Nginx 文件就是了。
另外给出几个包含本文未提及内容但是可能需要使用到的链接:
手动配置nginx服务器、导入homestead.box,在该文章最后附录处。
设定 ssh key,使用 ssh 登入前可能需要这个步骤,我自己是不用,可能是由于之前使用 git 的时候已经弄过了?
官方中文文档