美文网首页PHP实战Laravellaravel学习笔记
Laravel Homestead 的安装和使用

Laravel Homestead 的安装和使用

作者: guanguans | 来源:发表于2018-03-10 17:52 被阅读46次

    Homestead 可以运行在 Windows、Mac 以及 Linux 等主流操作系统上,预装的软件和工具列表如下:

    • Ubuntu 16.04
    • Git
    • PHP 7.1
    • Nginx
    • MySQL
    • MariaDB
    • SQLite 3
    • Postgres
    • Composer
    • Node(With Yarn, Bower, Grunt, and Gulp)
    • Redis
    • Memcached
    • Beanstalkd
    • Mailhog
    • ngrok

    注:如果你使用的是 Windows,需要开启系统的硬件虚拟化(VT-x),这通常可以通过 BIOS 来开启。如果你是在 UEFI 系统上使用 Hyper-V,则需要关闭 Hyper-V 以便可以访问 VT-x。

    准备

    先下载安装VirtualBoxVagrant

    安装及配置

    以下命令本人使用的是git bash

    1、安装

    使用Vagrant安装Homestead盒子

    命令:

    vagrant box add laravel/homestead
    
    
    这里写图片描述
    安装过程需要较长时间(取决于你的网络连接速度),并且容易网络中断。
    推荐:
    复制上面图片中的下载地址并用迅雷下载(下载之后的名字可能是一串乱码
    通过这种方式下载的话需要手动将其添加到 Vagrant:
    vagrant box list
    vagrant box remove laravel/homestead  --all
    
    vagrant box add laravel/homestead 下载文件的路径
    

    运行上述命令有可能报错:

    Check your Homestead.yaml file, the path to your private key does not exist.
    

    解决办法如下:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    eval "$(ssh-agent -s)"
    ssh-add -K ~/.ssh/id_rsa
    
    

    再次运行上述命令即可添加成功

    添加成功提示

    ==> box: Successfully added box 'laravel/homestead' (v0) for 'virtualbox'!
    
    

    安装 Homestead

    你可以通过克隆仓库代码来实现 Homestead 安装。将仓库克隆到用户目录下的 Homestead 目录,这样 Homestead 盒子就可以作为所有其他 Laravel 项目的主机:

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

    克隆完成后,你需要检查 Homestead 的版本标签,因为 master 分支不会总是稳定版本,你可以在 GitHub Release Page 查找到最新稳定版本然后在本地将其检出:

    cd Homestead
    
    // Clone the desired release...
    git checkout v6.1.0
    
    

    接下来,在 Homestead 目录下运行 bash init.sh 命令来创建 Homestead.yaml 配置文件,生成的 Homestead.yaml 配置文件文件位于当前 Homestead 目录:

    // Mac/Linux... windows下使用git bash也使用下面的命令
    bash init.sh
    
    // Windows...
    init.bat
    
    

    2、配置 Homestead

    这里写图片描述

    设置 Provider

    Homestead.yaml 文件中的 provider 键表示使用哪个 Vagrant 提供者:virtualbox、vmware_fushion、 vmware_workstation 或 parallels,你可以将其设置为自己喜欢的提供者,当然对大部分人来说也没得选:

    provider: virtualbox
    
    

    配置共享文件夹

    Homestead.yaml 文件中的 folders 属性列出了所有主机和 Homestead 虚拟机共享的文件夹,一旦这些目录中的文件有了修改,将会在本地和 Homestead 虚拟机之间保持同步,如果有需要的话,你可以配置多个共享文件夹:

    folders:
        - map: ~/Development
          to: /home/vagrant/Code
    
    

    如果要开启 NFS,只需简单添加一个标识到同步文件夹配置:

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

    注:使用 NFS 的话,需要考虑安装 vagrant-bindfs 插件。该插件可用于在 Homestead 盒子中为文件和目录维护正确的用户/组权限。

    你还可以通过 options 传递其他 Vagrant 支持的同步文件夹选项:

    folders:
        - map: ~/Development
          to: /home/vagrant/Code
          type: "rsync"
          options:
              rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
              rsync__exclude: ["node_modules"]
    
    

    配置 Nginx 站点

    对 Nginx 不熟?没关系!通过 sites 属性你可以方便地将“域名”映射到 Homestead 虚拟机的指定目录,Homestead.yaml 中默认已经配置了一个示例站点。和共享文件夹一样,你可以配置多个站点:

    sites:
        - map: homestead.app
          to: /home/vagrant/Code/Laravel/public
        - map: firm.cn
          to: /home/vagrant/laravelapp/firm/public
    
    

    如果你是在 Homestead 盒子启动之后进行了上述修改,需要运行 vagrant reload –provision 更新虚拟机上的 Nginx 配置。

    Hosts文件

    不要忘记把 Nginx 站点配置中的域名添加到本地机器上的 hosts 文件中,该文件会将对本地域名的请求重定向到 Homestead 虚拟机,在 Mac 或 Linux上,该文件位于 /etc/hosts,在 Windows 上,位于 C:\Windows\System32\drivers\etc\hosts,添加方式如下:

    192.168.10.10 firm.cn
    
    

    确保 IP 地址和你的 Homestead.yaml 文件中列出的一致,一旦你将域名添加到 hosts 文件,就可以在浏览器中通过该域名访问站点了:

    http://firm.cn
    
    

    注:在真正可以访问之前之前还需要通过 Vagrant 启动虚拟机上的 Homestead 盒子。

    启动 Vagrant Box

    配置好 Homestead.yaml 文件后,在 Homestead 目录下运行 vagrant up 命令,Vagrant 将会启动虚拟机并自动配置共享文件夹以及 Nginx 站点,初次启动需要花费一点时间进行初始化:

    vagrant up
    
    

    报错1:

    蓝屏重启
    
    

    没有关闭Hyper-V和VT-x冲突

    控制面板→程序→启用或关闭Windows功能 将Hyper-V以及子项全部去掉勾选就行了。确定后记得重新启动
    
    

    报错2:

    Check your Homestead.yaml file, the path to your private key does not exist.
    
    

    运行命令:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    eval "$(ssh-agent -s)"
    ssh-add -k ~/.ssh/id_rsa
    
    

    报错3:

    Failed to connect to vagrantcloud-files-production.s3.amazonaws.com port 443: Timed out
    
    

    Vagrant没有发现 laravel/homestead 这个Box虚拟机,这是因为版本的问题

    进入Homestead目录下
    vim scripts/homestead.rb
    修改:config.vm.box_version = settings["version"] ||= ">= 0.4.0" 
    为 config.vm.box_version = settings["version"] ||= ">= 0"
    
    

    报错4:

    Path: C:/Users/Administrator/.vagrant.d/data/machine-index/index
    
    

    进入上面提示的目录删除 index 和index.lock

    启动之后,就可以在浏览器中访问配置的站点 http://firm.cn

    No input file specified.  说明配置成功
    
    

    要登录到该虚拟机,使用 vagrant ssh 命令;关闭该虚拟机,可以使用 vagrant halt 命令;销毁该虚拟机,可以使用 vagrant destroy –force 命令。

    可选操作

    为指定项目安装 Homestead

    全局安装 Homestead 将会使每个项目共享同一个 Homestead 盒子,你还可以为每个项目单独安装 Homestead,这样就会在该项目下创建 Vagrantfile,允许其他人在该项目中执行 vagrant up 命令,在指定项目根目录下使用 Composer 执行安装命令如下:

    composer require laravel/homestead --dev
    
    

    这样就在项目中安装了 Homestead。Homestead 安装完成后,使用 make 命令生成 Vagrantfile 和 Homestead.yaml 文件,make 命令将会自动配置 Homestead.yaml 中的 sites 和 folders 属性。该命令执行方式如下:

    Mac/Linux:

    php vendor/bin/homestead make
    
    

    Windows:

    vendor\bin\homestead make
    或者
    vendor\\bin\\homestead make
    
    

    接下来,在终端中运行 vagrant up 命令然后在浏览器中通过 http://homestead.app 访问站点。不要忘记在 /etc/hosts 文件中添加域名 homestead.app(已配置的话忽略)。

    日常使用

    全局访问 Homestead

    要想在文件系统的任意路径都能够运行 vagrant up 启动 Homestead 虚拟机,在 Mac/Linux 系统中,可以添加 Bash 函数到 ~/.bash_profile;在 Windows 系统上,需要添加“批处理”文件到 PATH。这些脚本允许你在系统的任意位置运行 Vagrant 命令,并且把命令执行位置指向 Homestead 的安装路径。

    Mac/Linux

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

    确保将该函数中的 ~/Homestead 路径调整为指向实际的 Homestead 安装路径。这样你就可以在系统的任意位置运行 homestead up 或 homestead ssh 来启动/登录虚拟机

    补充知识点:/etc/profile 和 ~/.bash_profile 都可以用来设置系统 PATH,不同之处在于前者是给系统超级用户使用,后者是给普通登录用户使用的,此外要让 ~/.bash_profile 修改后生效,有两种方法,一种是退出系统重新登录,一种是使用 source ~/.bash_profile 命令。

    Windows

    在系统的任意位置创建一个批处理文件 homestead.bat:

    @echo off
    
    set cwd=%cd%
    set homesteadVagrant=C:\Homestead
    
    cd /d %homesteadVagrant% && vagrant %*
    cd /d %cwd%
    
    set cwd=
    set homesteadVagrant=
    
    

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

    通过 SSH 连接

    你可以在 Homestead 目录下通过运行 vagrant ssh 以 SSH 方式连接到虚拟机。如果你设置了全部访问 Homestead,也可以在任意路径下通过 homestead ssh 登录到虚拟机。

    如果你需要以更简捷的方式连接到 Homestead,可以为主机添加一个别名来快速连接到 Homestead 盒子,创建完别名后,可以使用 vm 命令从任何地方以 SSH 方式连接到 Homestead 虚拟机:

    alias vm="ssh vagrant@127.0.0.1 -p 2222"
    
    

    连接到数据库

    Homestead 默认已经在虚拟机中为 MySQL 和 Postgres 数据库做好了配置,更方便的是,这些配置值与 Laravel 的 .env 中默认提供的配置一致。

    想要通过本地的 Navicat 或 Sequel Pro 连接到 Homestead 上的 MySQL 或 Postgres 数据库,可以通过新建连接来实现,主机 IP 都是 127.0.0.1,对于 MySQL 而言,端口号是 33060,对 Postgres 而言,端口号是 54320,用户名/密码是 homestead/secret

    这里写图片描述

    站点类型

    Homestead 支持多种框架,所以即使你没有使用 Laravel 的话,也可以使用 Homestead,例如,我们可以通过 symfony2 站点类型轻松添加一个 Symfony 应用:

    sites:
        - map: symfony2.app
          to: /home/vagrant/Code/Symfony/web
          type: symfony2
    
    

    目前支持的站点类型包括 apache、laravel、proxy、silverstripe、statamic、symfony2 和 symfony4。

    配置 Cron 调度任务

    Laravel 提供了很方便的方式来调度 Cron 任务:只需每分钟调度运行一次 Artisan 命令 schedule:run 即可。schedule:run 会检查定义在 App\Console\Kernel 类中定义的调度任务并判断运行哪些任务。

    如果想要为某个 Homestead 站点运行 schedule:run 命令,需要在定义站点时设置 schedule 为 true:

    sites:
        - map: homestead.app
          to: /home/vagrant/Code/Laravel/public
          schedule: true
    
    

    该站点的 Cron 任务会被定义在虚拟机的 /etc/cron.d 目录下:

    这里写图片描述

    分享你的环境

    有时候你可能希望和同事或客户分享自己当前的工作进度或成果
    登录虚拟机运行命令

    share firm.cn  //配置的站点
    
    

    运行完该命令之后,你就可以看到一个 Ngrok 界面出现,其中包含活动日志和分享站点所需的公开访问 URL:

    这里写图片描述

    可以看到我的分享 URL 是 http://95920d84.ngrok.io/ 以及 https://95920d84.ngrok.io/,你可以通过这两个域名在任意联网机器上访问我的 Homestead 站点:

    这里写图片描述

    如果你想要指定一个自定义的区域,子域名或者其他 Ngrok 运行时选项,可以将它们添加到 share 命令:

    share homestead.app -region=us -subdomain=laravel
    
    

    目前自定义域名只有付费用户才可以使用,所以 subdomain 会提示不可用。

    注:记住两个点,一个是 Vagrant 并没有什么特别的安全防范措施,另一个是当你运行 share 命令的时候,你其实是在将自己的虚拟机曝光到互联网上。所以,当你要分享自己的站点之前,先想想安全隐患,并将其规避掉。


    参考链接

    相关文章

      网友评论

        本文标题:Laravel Homestead 的安装和使用

        本文链接:https://www.haomeiwen.com/subject/vjjbfftx.html