[Laravel] mac下通过 homestead 搭建环境 到运行项目
之前学习过一段时间的
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 的时候已经弄过了?
官方中文文档
[Laravel] mac下通过 homestead 搭建环境 到运行项目的更多相关文章
- [转]Mac下cocos2dx-3.2+Xcode环境配置和项目创建
原文:http://blog.csdn.net/u012200908/article/details/38070885 这是有关环境配置的第二篇教程,第一篇讲的是win8下的环境配置.这里我们使用C+ ...
- 记一次mac下使用mamp集成环境配置lumen项目自定义域名遇到的花样问题
1.安装好mamp集成环境,自行百度. 2.从公司项目版本库里将项目克隆到本地. 好了,开始配置自定义域名来访问项目,以下是遇到的问题集锦... 1.web服务器使用的nginx,配置完域名访问报40 ...
- mac 下 用 glfw3 搭建opengl开发环境
mac 下 用 glfw3 搭建opengl开发环境 下载编译 glfw3 Build Setting 里面, Library Search Paths -> 设置好编译 glfw 库的路径 H ...
- mac下通过docker搭建LEMP环境
在mac下通过docker搭建LEMP环境境 1.安装virtualbox.由于docker是在lxc环境的容器 2.安装boot2docker,用于与docker客户端通讯 > brew up ...
- MAC 下用 brew 搭建 PHP 开发环境
Mac下用brew搭建PHP(LNMP/LAMP)开发环境 Mac下搭建lamp开发环境很容易,有xampp和mamp现成的集成环境.但是集成环境对于经常需要自定义一些配置的开发者来说会非常麻烦,而且 ...
- mac下安装c++开发环境
mac下安装c++开发环境 1 注册apple id 按照apple注册步骤注册apple id,我注册时遇到如下问题 apple store完成创建apple id步骤中,选择付款方式和账单地址后, ...
- 记录--mac下终端内的环境变量问题
一直使用的是前几年买的MacBook Air,当时感觉很轻薄,外观也非常的好看,也是一直用到现在,大概有三四年了,系统还是很流畅(实话,不是打广告......).平时也是经常要使用mac的终端,说实话 ...
- Mac 下安装Phonegap开发环境
Mac 下安装Phonegap开发环境 2014.09.11 星期四 评论 0 条 阅读 5,613 次 作者:野草 标签:phonegap ios mac 什么是Phonegap呢?Phon ...
- 国产中标麒麟Linux部署dotnet core 环境并运行项目 (一) 安装dotnet core
背景 根据我之前写的文章 将 Net 项目升级 Core项目经验:(一)迁移Net项目为Net Core\Standard项目,我们将公司内部最核心的ORM框架迁移到net core 上面,并在win ...
随机推荐
- python静态方法类方法属性方法
Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问 ...
- 浅谈闭包(Closure)
一.闭包 好长时间对于闭包都知道与函数和其环境变量有关系,但是一直没有一个清晰的认识.今天查看了一下维基百科,顺便写下来. 二.闭包的定义 在编程语言中,闭包(语义闭包或函数闭包)是指哪些可以将语义范 ...
- 重新学习之spring第二个程序,配置AOP面向切面编程
第一步:在配置好的ioc容器的基础上,导入面向切面编程所需要的jar包 (本案例用的是spring3.2.4,由于spring3.2.4的官网jar包中不再有依赖包,所以依赖包都是从网上找的) 第二步 ...
- django-redis 中文文档
Andrey Antukh, niwi@niwi.be 4.7.0 翻译: RaPoSpectre 1. 介绍 django-redis 基于 BSD 许可, 是一个使 Django 支持 Redis ...
- Mybatis 全局配置文件中typeAliases(别名)
在具体的mapper.xml文件中,定义很多的statement,statement需要parameterType指定输入参数的类型.需要resultType指定输出结果的映射类型. 如果在指定类型时 ...
- sql update set使用case when语句
1. update TD_XXXsetdjyzmdm=null,djyzmsj=null,DLCS= case when DLCS is null then 1 else DLCS+1 end whe ...
- Httpclient 支持https(转)
参考:https://jingyan.baidu.com/article/154b46317353d228ca8f4112.html 参考:https://www.jianshu.com/p/a444 ...
- Phonegap 原生控件(Android)与html混合
1. 用命令创建cordova项目 cordova coreate hello com.example.hello hello 2.打开MainActivity 在onCreate方法中加入 setC ...
- ORA-12560:TNS:协议器错误的解决方法
使用SQL Plus登录数据库时,系统报ORA-12560:TNS:协议器错误.之前建了三个数据库实例,删除了一个实例.现在登录其中一个数据库报此错误. 工具/原料 Oracle11g 方法/ ...
- C++ 类成员的构造和析构顺序
我想对面向对象有了解的童鞋应该不会对类和对象感到陌生吧 ! 对象并不是突然建立起来的,创建对象必须时必须同时创建父类以及包含于其中的对象.C++遵循如下的创建顺序: (1)如果某个类具体基类,执行基类 ...