Laravel Homestead简介
Laravel Homestead是Laravel官方为开发者提供的一套完善的重量级本地开发环境,它是一个打包好各种 Laravel 开发所需软件和工具的 Vagrant 盒子,该盒子为我们提供了一个优秀的开发环境,有了它,我们不再需要在本地环境安装 PHP、Composer、Nginx、MySQL、Memcached、Redis、Node 等其它工具软件,我们也完全不用再担心误操作搞乱操作系统 —— 因为 Vagrant 盒子是一次性的,如果出现错误,可以在数分钟内销毁并重新创建该 Vagrant 盒子!
Laravel Homestead的预装软件
Homestead 可以运行在 Windows、Mac 以及 Linux 等主流操作系统上,预装的软件和工具列表如下:
- Ubuntu 18.04
- Git
- PHP 7.4
- PHP 7.3
- PHP 7.2
- PHP 7.1
- PHP 7.0
- PHP 5.6
- Nginx
- MySQL
- lmm(用于 MySQL 或 MariaDB 数据库快照)
- SQLite3
- PostgreSQL
- Composer
- Node(With Yarn, Bower, Grunt, and Gulp)
- Redis
- Memcached
- Beanstalkd
- Mailhog
- avahi
- ngrok
- Xdebug
- XHprof/Tideways/XHGui
- wp-cli
可选软件
此外,你还可以选择性安装以下软件:
- Apache
- Blackfire
- Cassandra
- Chronograf
- CouchDB
- Crystal & Lucky Framework
- Docker
- Elasticsearch
- Gearman
- Go
- Grafana
- InfluxDB
- MariaDB
- MinIO
- MongoDB
- MySQL 8
- Neo4j
- Oh My Zsh
- Open Resty
- PM2
- Python
- RabbitMQ
- Solr
- Webdriver & Laravel Dusk 相关工具
安装Laravel Homestead 需要的软件及工具
1、Git (版本2.20.1.windows.1)
2、VirtualBox (版本6.1.16-140961-Win)
3、Vagrant (版本2.2.13_x86_64)
4、Homestead Box (版本10.1.1)
安装路径不要有中文,偶尔识别不到路径会悲剧的。。
1、安装VirtualBox虚拟机 官网地址:https://www.virtualbox.org/
进入官网单击Download按钮进入下载页面,选择windows版本进行下载,默认安装。
2、安装Vagrant 虚拟机管理工具 官网地址:https://www.vagrantup.com/
进入官网单击Download按钮进入下载页面,选择windows版本进行下载,默认安装。
3、安装Laravel Homestead
我们就可以开始安装Homestead了。安装方式有两种:
第一种是在线安装方式:
如果你觉得你的网速足够快,可以在线下载Homestead的box(服务器在国外),cmd终端下输入 vagrant box add lavavel/homestead 即可下载最新版本的Homestead盒子。
不一会儿界面上会出现Homestead盒子下载地址,我这边下载慢,直接复制用迅雷下载的。换后速度飞快。。。
第二种是离线安装方式:
使用离线安装的方式,我们首先要去下载一个最新版本的Laravel Homestead 的盒子,其目前最新版本为10.1.1。
下载地址:https://vagrantcloud.com/laravel/boxes/homestead/versions/10.1.1/providers/virtualbox.box
该盒子的大小为1.66GB,建议大家使用迅雷等下载工具进行下载。
下载慢的可以用我分享的百度网盘方式下载 链接:https://pan.baidu.com/s/1qQMJnMqXvfxwmjX3NOcJLw 提取码:dzz1
注意:如果你需要下载不同版本(或最新版本),请将以上地址中versions/后的数字版本号替换成相应的版本号。
下载完成后,我们将下载的文件命名为Homestead-10.1.1.box。
cmd终端下进入E:\homestead (我的是在E:\homestead下安装的,Homestead-10.1.1.box也放到这个文件夹了), 执行 vagrant box add laravel/homestead Homestead-10.1.1.box 后,会开始导入并安装我们下载的Homestead盒子。
稍微等待一会儿之后,Laravel/Homestead盒子就添加完成了。
此时,C:\Users\Administrator\.vagrant.d 里面有Laravel/Homestead盒子的一些相关文件。
使用vagrant box list命令可以看到,Vagrant盒子列表中就有了一个名为laravel/homestead的box盒子。
但是,列表中显示的laravel/homestead的版本号为0,我们要把它改成正确的版本号(10.1.1),可以打开C:\Users\Administrator\.vagrant.d\boxes\laravel-VAGRANTSLASH-homestead文件夹,
将文件夹中名为0的文件夹改名为我们下载的Homestead的版本号,即10.1.1。
然后在该文件夹下新建一个叫metadata_url的空白文件 (注意不要有任何文件名后缀,如果你的系统设置了自动隐藏后缀名,请将隐藏去掉,确认文件无任何后缀):
文件的内容里,添加以下链接: https://app.vagrantup.com/laravel/boxes/homestead
保存好之后,我们再次使用vagrant box list 命令查看盒子列表,就会发现,laravel/homestead的版本号已经正确显示了。
vagrant up启动虚拟机的时候会检查版本
至此,Laravel Homestead盒子安装完毕。
4、配置Laravel Homestead
输入 git clone https://github.com/laravel/homestead.git ~/homestead 拉取 homestead
- 该命令会将Github上Homestead项目配置克隆至本地~/homestead文件夹中。 将里面所有的文件复制到E:\homestead之中
接下来,我们就可以开始创建Homestead配置文件了:
在E:\homestead目录中点击Git Bash进入,执行命令 bash init.sh (执行shell脚本,需要使用到"Git Bash")
然后在E:\homestead文件夹中,我们可以看到多出了一个名为Homestead.yaml的文件。使用文本编辑器打开它,可以看到内容如下:
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
- map: ~/code
to: /home/vagrant/code
sites:
- map: homestead.test
to: /home/vagrant/code/public
databases:
- homestead
# ports:
# - send: 50000
# to: 5000
# - send: 7777
# to: 777
# protocol: udp
# blackfire:
# - id: foo
# token: bar
# client-id: foo
# client-token: bar
# zray:
# If you've already freely registered Z-Ray, you can place the token here.
# - email: foo@bar.com
# token: foo
# Don't forget to ensure that you have 'zray: "true"' for your site.
- 配置项含义:
ip: "192.168.10.10"
- 指的是虚拟机的IP地址,初次使用homestead的小伙伴可以不用修改这个地址。
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
- uthorize后面的文件是用来ssh进入虚拟机的公钥,而keys后面的文件是我们的私钥。
folders:
- map: ~/code
to: /home/vagrant/code
- folders用来设置本机和虚拟机的同步文件夹,map后指定的文件夹(即~/Code)将被映射到虚拟机系统中to后指定的路径,即/home/vagrant/Code。
我们把本机Code文件夹同步至虚拟机中,这样一来我们在可以在虚拟机系统中访问到我们的项目文件,并且在~/Code中所进行的修改会实时同步在虚拟机系统对应的文件中。
sites:
- map: homestead.test
to: /home/vagrant/code/public
- sites用来设置站点域名地址的映射,这里是指将homestead.test域名映射到/home/vagrant/code/public文件夹。这样,我们在浏览器地址栏中输入http://homestead.test就可以访问 /home/vagrant/code项目的首页了。
databases:
- homestead
- 这里指虚拟机的数据库名称。
注:虚拟机环境下默认系统登录用户名:vagrant 密码:vagrant;MySQL管理员用户名为homestead,密码是secret。
要想让你设置的域名生效,还要在hosts
文件中添加域名指向: 192.168.10.10 homestead.test
*hosts文件的路径:C:\Windows\System32\drivers\etc*
5、建立用于ssh的公钥和私钥
今后我们要通过ssh连接homestead虚拟机的话,需要有连接虚拟机的公钥和私钥,下面我们就来建立公钥和私钥。
首先,我们在E:\homestead文件夹中启动Git Bash,执行命令mkdir .ssh
,创建.ssh文件夹;
mkdir .ssh
- 接着,执行命令
cd .ssh
,进入.ssh文件夹中;
cd .ssh
- 接下来,我们运行生成密钥的命令:
ssh-keygen -t rsa
- 系统提示输入保存秘钥的文件路径,输入路径
/e/
homestead/.ssh/id_rsa
,按回车。接下来的两个提示直接按回车,最后显示秘钥创建成功,就OK了。
打开E:\homestead下的.ssh文件夹,你会发现多了两个文件,这就是我们刚才创建的公钥和私钥
创建好公钥和私钥后,别忘了在Homestead.yaml
文件中把它们的路径设置好。
接下来,我们可以尝试启动虚拟机了!
6、启动Homestead虚拟机
在E:\homestead文件夹中以管理员身份启动Git Bash,打开Git窗口,执行命令 vagrant up
来启动虚拟机。
如果一切正常,Homestead虚拟机将成功启动。
此时,virtualbox中也将出现一个新的虚拟机homestead-7
输入域名http://homestead.test/
,也能访问,只是由于我们暂时没有创建项目,系统显示“No input file specified.”
7、创建一个laravel项目
创建一个名为blog的laravel项目
composer create-project --prefer-dist laravel/laravel blog
项目创建好后配置sites
用vagrant reload
命令重启一下虚拟机。
此时,打开域名http://homestead.test/
,就可以访问我们新创建的blog项目的首页了~~
8、vagrant ssh
连接虚拟机
用vagrant up
命令启动homestead虚拟机后,使用vagrant ssh
命令可以连接虚拟机
至此,Homestead开发环境的安装及配置就全部完成了!
安装过程中遇到过的问题
1)vagrant up启动时出现了如下错误信息:
==> homestead-7: Configuring and enabling network interfaces...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
/sbin/ifdown 'eth1' || true
/sbin/ip addr flush dev 'eth1'
# Remove any previous network modifications from the interfaces file
sed -e '/^#VAGRANT-BEGIN/,$ d' /etc/network/interfaces > /tmp/vagrant-network-interfaces.pre
sed -ne '/^#VAGRANT-END/,$ p' /etc/network/interfaces | tac | sed -e '/^#VAGRANT-END/,$ d' | tac > /tmp/vagrant-network-interfaces.post
cat \
/tmp/vagrant-network-interfaces.pre \
/tmp/vagrant-network-entry \
/tmp/vagrant-network-interfaces.post \
> /etc/network/interfaces
rm -f /tmp/vagrant-network-interfaces.pre
rm -f /tmp/vagrant-network-entry
rm -f /tmp/vagrant-network-interfaces.post
/sbin/ifup 'eth1'
Stdout from the command:
Stderr from the command:
bash: line 5: /sbin/ifdown: No such file or directory
bash: line 19: /sbin/ifup: No such file or directory
此时可以通过vm virtualbox登录进去 默认登录用户 vagrant 密码 vagrant, 执行 sudo apt-get install ifupdown 可以修复。 然后cmd终端执行vagrant reload可以发现不再报错
2)virtualbox无法打开虚拟机,"error in supR3HardenedWinReSpawn"
解决方法:
那是因为vboxdrv服务没有安装或没有成功启动,
64位的系统经常这样,
找到安装目录下的vboxdrv文件夹drivers\vboxdrv,
右击VBoxDrv.inf,选安装,然后重启。
3)vagrant ssh进入Homestead之后发现php版本太高了
解决方法: 直接运行命令php70 、php73等
Homestead 定义了一些可以直接在虚拟机中使用的命令,比如想切换到 7.0 版本直接执行 php70
4)PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes)
php.ini中 memory_limit设置小了,
1、直接修改php.ini,重启php-fpm生效
2、php -d memory_limit=-1 /usr/bin/composer install
路径 /usr/bin/composer 通过whereis composer可找到
5)丢失/etc/nginx/sites-enabled/homestead.test导致 访问homestead.test失败
补上/etc/nginx/sites-enabled/homestead.test 或者配置nginx.conf
sudo vim /etc/nginx/sites-enabled/homestead.test 或者 sudo vim /etc/nginx/conf.d/nginx.conf 加入以下
server {
listen 80;
server_name .homestead.test;
root "/home/vagrant/gosunoa/public 替换成自己的项目";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/homestead.test-error.log error;
sendfile off;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
}
重启nginx,有其他报错。。。一般是nginx的配置文件中的user vagrant;没权限导致的。