# 基础知识

houdunren.com (opens new window) @ 向军大叔

xj-small

Laravel 致力于让整个 PHP 开发体验变得愉快, 包括你的本地开发环境。 Vagrant 提供了一种简单,优雅的方式来管理和配置虚拟机。 Laravel homestead 是一个官方预封装的 Vagrant box,它为你提供了一个完美的开发环境,而无需在本地机器安装 PHP 、Web 服务器和其他服务器软件。不用担心会搞乱你的操作系统!Vagrant boxes 是一次性的。如果出现问题,你可以在几分钟内销毁并创建 Box! homestead 可以运行在任何 Windows,Mac,或 Linux 系统,它包括了 Nginx web 服务器, PHP,MySQL,PostgreSQL,Redis,Memcached, Node,以及开发 Laravel 应用程序所需要的东西。

# VirtualBox

https://www.virtualbox.org/ VirtualBox 是 Oracle 公司的开源虚拟机软件。VirtualBox 号称是最强的免费虚拟机软件,它不仅功能齐全,而且性能也很优异!VirtualBox 支持大部分流行的系统,如:Mac, Windows, Linux 等。

# Vagrant

Vagrant by HashiCorp (opens new window) Vagrant 是用来管理虚拟机的工具,支持当前主流的虚拟机系统如 VirtualBox、VMware、AWS 等。Vagrant 的主要作用是提供一个可配置、可移植和复用的软件环境。Vagrant 让你通过编写一个 Vagrantfile 文件来控制虚拟机的启动、虚拟机网络环境的配置、虚拟机与主机间的文件共享,以及启动后自动执行一些配置脚本,如自动执行一个 Shell Script 来安装一些必备的开发工具,如安装配置MySQL、PHP,甚至是自动配置 Nginx 站点。这意味着,在一个多人开发的项目中,你只需要同步 Vagrantfile 文件,就可以保证参与项目的每个人各自的机器上拥有一致的开发环境。 可以在下面网站上搜索需要的vagrant box https://app.vagrantup.com/boxes/search

卸载程序和依赖

在下载的安装包里有一个删除工具,可以直播删除 Vagrant软件。

image-20181110171158894

# homestead

homestead (opens new window)是一个官方预封装的 Vagrant box,它为你提供了一个完美的开发环境,而无需在本地机器安装 PHP 、Web 服务器和其他服务器软件。不用担心会搞乱你的操作系统!Vagrant boxes 是一次性的。如果出现问题,你可以在几分钟内销毁并创建 Box!

内置软件:Ubuntu、PHP、Nginx、Apache (Optional)、MySQL ……

# 软件安装

homestead的安装过程分为下载BOX与配置脚本两部分。有些网络环境可能出现下载失败的情况,这种情况下可以通过 扩展知识章节的 离线安装 来完成。

# 下载镜像

在线安装 homestead Vagrant Box,文件比较大下载会比较慢,如果失败就多试几次

如果实在不能安装,请查看扩展知识中的离线安装 (opens new window)

vagrant box add laravel/homestead

选择虚拟机 virtualbox

image-20200128230526306

# 管理脚本

clone管理脚本

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

因为master分支可能不稳定,所以切换到稳定发行分支更安全些

cd homestead
git checkout release

创建 homestead.yaml 配置文件

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

//windows
./init.bat

安装的box 镜像储存的位置:以我电脑为例在 /Users/xj/.vagrant.d/boxes

# 升级盒子

经过长时间使用后升级BOX可以带来更多的特性和性能的改善,进入homestead目录执行

vagrant box update

# 环境配置

初次安装的环境需要掌握服务器的进行与基本配置

# SSH登录

生成 key用于远程连接,如果执行以下命令系统提示密钥文件存在,就不需要执行这个命令了,否则会以往已经连接服务器将无法连接

ssh-keygen -t rsa -C "2300071698@qq.com"
#后面一真按enter键,设置密码

执行以下命令就可以登录到 homestead 服务器了

vagrant ssh

# 时间同步

默认HOMESTEAD的LINUX系统使用的是UTC时间,我们将它为北京时间

#进入HOMESTEAD 的Linux系统
homestead ssh

#执行设置时区命令
dpkg-reconfigure tzdata

#在弹出的菜单中选择 Asia->Shanghai

# 性能提升

如果感觉同步文件过慢,可以安装 NFS (opens new window) 来提升性能,目前只支持Mac系统。

安装插件

vagrant plugin install vagrant-winnfsd

修改配置文件,添置type选项

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

# 站点配置

配置开发项目主要在homestead.yaml 配置文件中完成

# 共享文件夹

homestead.yaml 文件的 folders 属性里列出所有与 homestead 环境共享的文件夹。这些文件夹中的文件若有变更,它们会保持本地机器与 homestead 环境之间同步。你可以根据需要配置多个共享文件夹:

folders:
    - map: ~/Code  
      to: /home/vagrant/Code
      type: nfs
# map 对应的是我们本机的文件夹
# to 对应的是 homestead 上的文件夹
# type 这样可以提升加载速度

window用户请使用绝对路径,Linux/Mac不要使用.开始的路径

# 数据库

  • 要从主机的数据库客户端连接到 MySQL,就连接到 127.0.0.1和端口 33060 (MySQL) 。账号密码分别是 homestead,secret。
  • PHP程序连接(虚拟机中连接)端口为 3306

下面修改配置将MYSQL升级到8.0

features:
	...
	- mysql8: true

# 配置域名

安装SwitchHosts) (opens new window)软件可以方便的修改host文件,这是推荐方法。windows用户需要使用管理员身份运行(右键以管理员运行)。如果switchHosts软件无法运行,请参考下面文件位置自行修改。

  • Mac 文件位置 /etc/hosts
  • Windows 文件位置 c:/windows/System32/drivers/etc/hosts

修改hosts文件添加如下内容,

192.168.10.10 hdcms.hd

上面定义了一个域名 hdcms.hd 指向我们的homestead服务器,在homestead.yaml文件内定义域名解析配置:

sites:
  - map: hdcms.hd
    to: /home/vagrant/code/hdcms

现在当我们访问 hdcms.hd 时会访问到 homestead服务器下的 /home/vagrant/code/hdcms 目录

# 文件列表

在开发环境下我们希望在浏览器中显示文件列表,进入HOMESTEAD服务器修改NGINX配置文件

vim /etc/nginx/nginx.conf

添加以下指令

http {
	...
	autoindex on; # 显示文件列表
	...
}

# 切换版本

homestead内置多个PHP版本,首先使用以下命令查看内置的PHP

# 项目版本

通过修改Homestead.yaml文件来更改项目php版本

sites:
    - map: hdcms.test
      to: /home/vagrant/hdcms/public
      php: "7.4"

# 命令行版本

查看homestead目录下的aliases 文件,其中有类似以下的函数

...
function php80() {
    sudo update-alternatives --set php /usr/bin/php8.0
    sudo update-alternatives --set php-config /usr/bin/php-config8.0
    sudo update-alternatives --set phpize /usr/bin/phpize8.0
}
...

使用 homestead ssh 登入服务器执行 php80 即切换为8.0

# 全局命令

如果我们想在任何目录都可以执行 vagrant 命令,需要进行以下设置

# Mac/Linux

修改 ~/.bash_profile 文件,如果安装了 zsh 需要修改 ~/.zshrc文件

function homestead() {
  ( cd ~/homestead && vagrant $* )
}

这样我们就可以使用 homestead up 等方式执行了

# windows

windows可以以两种方式创建全局命令

# git for windows

使用你使用了 git for windows (opens new window) 提供的命令行工具,需要修改 ~/.bash_profile 文件内容。

function homestead() {
    ( cd ~/Homestead && vagrant $* )
}

# 内置命令行

如果使用的windows提供的命令行工具,需在计算机上的任何位置创建批处理文件homestead.bat

你需要将脚本中实例路径 C:\Homestead 调整为 Homestead 实际安装路径。创建文件之后,添加文件路径到 PATH,这样你就可以在系统的任意位置运行 homestead up 或 homestead ssh 命令了。

下面是 homestead.bat文件的内容

@echo off

set cwd=%cd%
set homesteadVagrant=C:\Homestead

cd /d %homesteadVagrant% && vagrant %*
cd /d %cwd%

set cwd=
set homesteadVagrant=

# 单独使用

可以在项目中配置Homestead实例,而不必在全局上安装Homestead并在所有项目中共享同一Homestead配置。如果希望Vagrantfile随项目一起提供,而允许其他从事该项目工作的人来安装,则为每个项目安装Homestead是不错的选择。

要将Homestead直接安装到项目中,使用Composer进行安装:

composer require laravel/homestead --dev

安装Homestead后,使用make命令在项目根目录中生成VagrantfileHomestead.yaml文件。该make命令将自动在文件中配置sitesfolders指令Homestead.yaml

Mac / Linux:

php vendor/bin/homestead make

windows:

vendor\\bin\\homestead make

接下来,在终端中运行命令vagrant up,并在浏览器中访问项目就可以了。请记住,需要确保域名已经成功解析。