您现在的位置是:首页 > 技术学习 > PHP 网站首页 技术学习 PHP
如何使用Homestead搭建laravel本地开发环境
- 技术学习
- 2019-02-22
- 818已阅读
- 18
简介
Laravel是很火的PHP框架,Laravel Homestead 是一个官方预封装的 Vagrant box ,它为你提供了一个完美的开发环境,你不需要在本地机器安装 PHP、 web 服务器和其他的服务器软件。你再也不用担心会弄乱你的操作系统了! Vagrant boxes 是一次性的。 如果出现问题, 你可以在几分钟内销毁并重新创建 box !
Homestead 可以运行在任何 Windows、 Mac、 或 Linux 系统, 它包括了 Nginx web 服务器, PHP 7.3、 PHP 7.2、 PHP 7.1、 MySQL、PostgreSQL、Redis、 Memcached、 Node 以及你开发 Laravel 所需要的东西。
如果你使用的是 Windows, 你可能需要通过 BIOS 来启用硬件虚拟化 (VT-x)。如果你在 Hyper-V 系统上使用 UEFI 你可能还需要禁用 Hyper-V 以便访问 VT-x.
安装步骤:
1. 安装git
git下载地址:https://git-scm.com/downloads
根据自己系统下载安装git
window安装完会有一个git bash客户端,这就是执行git和bash命令的界面
mac下直接在终端即可执行git命令
2. 下载vagrant
用于创建和部署虚拟化环境,操作虚拟机
下载地址:https://www.vagrantup.com/downloads.html
下载最新版的vagrant
根据自己的系统进行下载安装
可手动指定安装目录,我安装的目录是 /e/Vagrant
安装完毕,将该vagrant安装目录下的bin文件夹目录配置到环境变量中,这样就可以在全局调用vagrant
输入 vagrant -v
如果显示vagrant版本说明配置成功
mac安装同上
3. 下载virtualbox(虚拟机客户端,可在里面添加虚拟机盒子)
下载地址:https://www.virtualbox.org/wiki/Downloads
根据自己的系统进行下载安装即可,我安装在 /e/VirtualBox
注:
可以尝试下载最新版的virtualbox,但是最新版接下来不一定可以配置成功(这是一个坑),我刚开始下载的是最新版的(5.2版本,当时刚发布没几天),但是在添加盒子时候一直报错,说版本不匹配,报错信息里面给出的版本列表提示里并没有5.2这个版本,最新才5.1。一直以为是我下载的盒子文件版本不正确,研究好久才发现是virtualbox版本不对,然后下载了5.1.30版本的就配置成功了。
4. 添加laravel/homestead盒子
- 在终端中输入
vagrant box add laravel/homestead
- 然后会让选择运行盒子的软件,
选择virtualbox对应的序号,输入该序号(virtualbox序号为2)回车即可开始下载
此时终端会输出下载地址
。这个就是盒子的下载地址,最新版本的下载地址
理论上由于墙的原因很难下载下来,可以开VPN - 如果下载不下来,可以尝试使用本地安装
3-1. 先从网上找到这个版本的盒子,可以下载最新版
3-2. 下载完修改文件名字homestead.box,注意:后缀必须是.box
,文件名无所谓,记住该文件的路径,我的是 /e/VirtualBoxFile/homestead.box
3-3. 在该文件同级目录下创建一个配置文件 metadata.json
3-4. 在该文件里写如下内容:
{
"name": "laravel/homestead",
"versions": [{
"version": "4.0.0",
"providers": [{
"name": "virtualbox",
"url": "/e/VirtualBoxFile/homestead.box"
}]
}]
}
参数说明:
name: 名称尽量不要修改,如果修改了,vagrant up 启动的时候会报错,然后会自动下载最新版本。
versions:
version: 你下载的 homestead.box 版本号
providers:
name: 运行盒子的软件
url: 这里是你下载的homestead.box盒子的路径。
3-4. 然后在git中进入到放置该文件的路径(即下载的盒子和metadata.json所在的目录)下,输入:cd /e/VirtualBoxFile
回车即可
3-5. 然后执行:vagrant box add metadata.json
就会开始添加盒子,
如果出现laravel/homestead (virtualbox, 0),说明没配置好(盒子版本信息没配好,所以显示为0),需要删除盒子重新配置添加,
删除盒子命令:vagrant box remove laravel/homestead
或者删除指定版本:(带上相应版本号,可用vagrant box list查看版本号)
vagrant box remove laravel/homestead --box-version x.x.x
例:vagrant box remove laravel/homestead --box-version 6.0.0
如果安装成功会显示你配置的盒子版本号
安装成功可以用 vagrant box list
查看已安装盒子列表
5. 下载homestead配置项目
window系统下:
git中进入想让项目下载的位置,我的是下载在e盘,先进入e,输入 cd /e 回车
然后执行:git clone https://github.com/laravel/homestead.git Homestead
下载完毕,e盘会生成一个Homestead目录,git中进入该目录 cd Homestead
window系统执行 bash init.bat
初始化完毕,Homestead下会生成一个Homestead.yaml文件
mac下:
首先进入用户目录下(这样可将主机服务提供给你所有的Laravel项目),
终端中输入 cd ~
从GitHub克隆homestead,
输入: git clone https://github.com/laravel/homestead.git Homestead
克隆完毕后进入Homestead文件夹下,输入 cd Homestead/
初始化,mac和linux系统输入 bash init.sh
初始化成功会显示:Homestead initialized!
此时Homestead文件夹下会生成一个配置文件Homestead.yaml
注:至于是否要安装到 ~ 下,目前还没研究。
6. Homestead.yaml文件解读
ip: "192.168.10.10"
# 这是虚拟机的ip地址
memory: 2048
# 这是虚拟机的内存大小
cpus: 1
# 虚拟机cpu核数
provider: virtualbox
# vagrant的提供者
authorize: ~/.ssh/id_rsa.pub
# 自己电脑的公钥
keys:
- ~/.ssh/id_rsa
# 这是私钥
# 注:
# 公钥私钥如果没有的话,说明还没生成过,
# (windows下在git bash下,mac和linux在终端) 输入 ssh-keygen -t rsa -C "你的邮箱地址"
# 然后会让你输入保存路径,默认是在用户(~)的.ssh目录下
# 然后会让你填写密码,默认为空,没密码。
folders:
- map: ~/code
to: /home/vagrant/Code
# 这是共享文件夹,当电脑文件发生更改,虚拟机中会自动同步更新,
# 可以设置多个文件夹。(map是本机,to是虚拟机)。
# 注:
# windows下 map:里不能使用/e/code 要使用E:/code 不然可能会造成文件映射不成功
# 如果要启动NFS(网络文件系统)
# folders:
# - map: ~/code
# to: /home/vagrant/Code
# type: "nfs"
sites:
- map: homestead.test
to: /home/vagrant/Code/public
# 这是Nginx站点,指定一个域名(map的值)到homestead环境中的目录上。
# 然后我们需要在本地hosts文件
# mac或linux路径/etc/hosts,
# windows下路径C:\Windows\System32\drivers\etc\hosts 中将IP和域名对应上,
# 修改hosts文件(如果权限不足可以用sudo vi hosts模式),在后面添加:
# 192.168.10.10 homestead.test
# 这样在网址中输入 http://域名 即可访问自己的网站。
# 注:
# chrome 63版本 浏览器,会自动把 .app、.dev 后缀的域名转为https:// 链接
# 所以,配置站点时不要使用这种类型的。
# 可以添加多个站点
# sites:
# - map: homestead.app
# to: /home/vagrant/Code/Laravel/public
# - map: another.com
# to: /home/vagrant/Code/another/public
# 多站点时的hosts修改:
# 192.168.10.10 homestead.test
# 192.168.10.10 another.test
# 注:
# 当修改过sites属性后,需要重新运行 vagrant reload --provision 来更新配置到虚拟机
databases:
- homestead
# 这是数据库,默认已经有一个可用的数据库库 homestead。这是默认数据库。
# 以下参数是可选,按功能需求填写
# 端口转发:
# 1. 自带默认转发
# 本地 → 虚拟机 端口对应关系
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
# 2. 自定义转发(需在homestead.yaml文件中配置ports端口)
ports:
- send: 93000
to: 9300
- send: 7777
to: 777
protocol: udp
networks:
- type: "private_network"
ip: "192.168.10.20"
# 给环境配置网络接口,这样局域网其他电脑可访问
networks:
- type: "public_network"
ip: "192.168.10.20"
bridge: "en1: Wi-Fi (AirPort)"
# 桥接接口,(目前不知道干啥用的。。。),type需改成 public_network
7. 启动虚拟机
在终端中,进入Homestead目录下,输入
vagrant up
8. 连接虚拟机(进入虚拟界面的终端)
vagrant ssh
注:登录虚拟机的用户:
账户:vagrant
密码:vagrant
9. 在虚拟机中下载Laravel框架
连接到虚拟机后,进入Code文件夹,
使用composer安装laravel(虚拟机自带composer),输入
composer create-project laravel/laravel Laravel --prefer-dist
# –prefer-dist: 意思是下载用于 distribution 的稳定版本,而不是开发中的版本。
下载较慢,可用vpn,
下载完毕,Code文件夹里会有一个人Laravel文件夹,这就是项目。
修改Homestead.yaml文件的sites属性
sites:
- map: homestead.test
to: /home/vagrant/Code/Laravel/public
修改后 vagrant ssh 会退出
在本地终端进入Homestead文件夹,输入 vagrant reload --provision
虚拟机重新启动,此时在浏览器中输入 http://homstead.test 即可访问laravel项目
10. 共享环境
将虚拟机变成云主机
ssh登录虚拟机后,在命令行输入 share 配置的项目网址
share laraveltest.test
此时会将你的Homestead.yaml配置文件中的站点共享。
运行完命令之后,你可以看到一个包含活动日志和共享站点外网访问路径的 Ngrok 界面。界面里可以看项目受访记录。
注:此做法比较危险
11. 退出虚拟机的终端(中断和虚拟机的连接)
exit
12. 关闭虚拟机
vagrant halt
注:该命令必须在本地电脑的终端中输入,在虚拟机终端输入无效
13. 强制关闭(销毁)虚拟机
vagrant destroy --force
14. 更新 Homestead
- 更新vagrant box盒子
vagrant box update
- 更新Homestead源码,两种方法:
1. 如果是通过克隆远程仓库安装的
git pull origin master
2. 如果是通过composer.json安装,
确认composer.json中是否包含 "laravel/homestead": "^4"
更新依赖
composer update
15. 安装MongoDB
如果想在虚拟机中安装mongodb服务,在Homestead.yaml 文件中添加一行
# 使用mongodb
mongodb: true
然后执行 vagrant reload --provision
连接mongodb:(注:转发端口是一致的。)
# 在虚拟机上连接:
host: 127.0.0.1
user: homestead
pass: secret
port: 27017
# 在主机上连接:(主机也能通过127.0.0.1连接到mongo)
host: 192.168.10.10
user: homestead
pass: secret
port: 27017