Laravel 的 Homestead 开发环境部署

分享 Summer ⋅ 于 3年前 ⋅ 最后回复由 1721516323 1个月前 ⋅ 50021 阅读

Homestead 与 虚拟机

Laravel 努力在整个PHP开发过程中提供令人愉快的开发体验,当然也包括本地的开发环境。

首先明白以下几个概念

  • VirtualBox -- Oracle 公司的虚拟机软件, 能运行在当前大部分流行的系统上;
  • Vagrant 提供一种命令行接口, 允许自动化安装虚拟机, 并且因为是脚本编写成的 provision 文本文件, 给共享虚拟机配置提供了可能, Homestead 正是构建在 Vagrant 之上;
  • Laravel Homestead 是官方预封装的一个 Vagrant Box,它是一台虚拟机的原型, 用来快速生产一个配置完整的服务器虚拟机, 运行在 VirtualBox 上.

Homestead 生产出来的虚拟机提供了一个完整的开发环境, 有了这个环境, 就不用再担心各种软件的设置会搞乱你的操作系统啦.

因为是虚拟机, 出现故障的时候, 可以在几分种内完成销毁和重建.

Homestead 能运行在所有的Windows、Mac和Linux上,它包含了Nginx、PHP 5.5、MySQL、Postgres、Redis、Memcached和你开发 Laravel应用程序需要的所有其它软件。

在多人协同开的情况下, Homestead 能用来统一开发环境, 让程序员把精力更集中的放在程序业务逻辑上, 免去了各种因为开发环境不一样而造成的混乱.

约定

假设我们要开发一个项目, 项目的名字叫 mytwitter.

首先在我们存放代码的地方 code 文件夹里面创建项目根文件夹 mytwitter_project, 接下来咱们的操作都在此项目下进行

cd ~/code
mkdir mytwitter_project
cd mytwitter_project

安装 virtualbox 和 vagrant

在这里下载并安装 VirtualBox , Vagrant .

直接下载 GUI 安装包安装就行.

下载并配置 Homestead

Homestead 包括以下两个东西

  1. 一个 vagrant box 虚拟机, 里面软件什么都下载好了;
  2. Github 代码库, 里面装载着 vagrant 的配置脚本, 用来自动化配置网络, 端口映射, 等一些开发时候用到的配置;

克隆 homestead 项目

在文件夹下克隆 homestead 项目到本地

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

加入 homestead box

执行以下命令添加 box

vagrant box add laravel/homestead

[注意] 命令行下下载速度太慢的话可以利用工具下载以下链接加速.

https://vagrantcloud.com/laravel/homestead/version/8/provider/virtualbox.box

下载后执行以下命令, 修改 /path/to/virtualbox.box 为正确的 path.

vagrant box add laravel/homestead /path/to/virtualbox.box 

修改 homestead 的配置

根据你的情况修改 Homestead 项目里面文件 Homestead.yaml , 类似以下

---
ip: "192.168.10.10"
memory: 2048
cpus: 1

authorize: /Users/me/.ssh/id_rsa.pub

keys:
    - /Users/me/.ssh/id_rsa

folders:
    - map: /Users/me/code/mytwitter_project/mytwitter
      to: /home/vagrant/mytwitter

sites:
    - map: mytwitter.app
      to: /home/vagrant/mytwitter/public

variables:
    - key: APP_ENV
      value: local

配置 hosts 文件

修改本机的 hosts 文件, 允许通过自定义域名访问, 这个域名是在上面的 Homestead.yaml 里面设置的.

sudo vi /etc/hosts 

添加以下一行

127.0.0.1    mytwitter.app

初始化 homestead 虚拟机

cd Homestead
vagrant up 

以上配置正确的话会有类似以下输出

➜  Homestead git:(master) ✗ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'laravel/homestead'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: Homestead_default_1407410586606_38332
==> ... etc....
==> default: php5-fpm stop/waiting
==> default: php5-fpm start/running, process 1945

测试是否能成功连接, 虚拟机里的 ~/mytwitter 文件夹里的文件和本地的文件是一致的.

vagrant ssh 
cd ~/mytwitter
ll

浏览器访问 http://mytwitter.app:8000/ .

至此, 成功安装.

其他配置

这时 mytwitter_project 的文件夹结构如下:

➜ ls
Homestead  mytwitter

可以在 dotfile 里面增加 alias 进行快速连接 vm:

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

这样以后直接使用 vm 就可进入 虚拟机了.

关于虚拟机里面的软件使用

PHP

vm 进入虚拟机以后, 查看 php 版本

vagrant@homestead:~$ php -v
PHP 5.5.15RC1 (cli) (built: Jul 15 2014 11:14:55)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

MYSQL

查看版本

vagrant@homestead:~$ mysql --version
mysql  Ver 14.14 Distrib 5.5.38, for debian-linux-gnu (x86_64) using readline 6.3

vm 下命令行链接, 密码为 secret

mysql -uhomestead -p 

默认提供 homestead 数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| homestead          |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

顺便建数据库 phphub

mysql> create database phphub;
Query OK, 1 row affected (0.00 sec)

设置数据库连接

本机连接 vm 里 mysql 方法是:

host: 127.0.0.1
port: 33060
user: homestead
pass: secret

关于 vm 里面其他服务的 port 信息如下, 或请见 文档

SSH: 2222 -> Forwards To 22
HTTP: 8000 -> Forwards To 80
MySQL: 33060 -> Forwards To 3306
Postgres: 54320 -> Forwards To 5432

其他软件

Homestead box 里还默认安装了以下软件

  • Composer - php 的包管理器
  • Envoy - 一个远程任务执行工具, 用来管理远程服务器;
  • nodejs
  • gulp - 用来做自动化管理 css 和 js 等 assets 文件;
  • Codeception - 用作 BDD 测试
  • git
  • ..

欢迎关注 LaravelTips, 这是一个专注于为 Laravel 开发者服务, 致力于帮助开发者更好的掌握 Laravel 框架, 提升开发效率的微信公众号.


:book: Laravel 书籍:

本帖已被设为精华帖!
回复数量: 29
  • guhuina
    3年前

    牛逼,赞!!!

  • lifesign Learn From Life
    3年前

    目前为止看到比较详细的Homestead使用~ 赞

  • heavenmirror
    3年前

    好东西值得分享

  • lifesign Learn From Life
    3年前

    补充一点, 在 win 下运行 vagrant 的童鞋, 如果是下载下来的 box 添加的时候有个注意点 vagrant box add laravel/homestead /path/to/virtualbox.box 其中的 path/to/virtualbox.box 改成 'file://path/to/virtualbox.box' 添加 file 协议即可

    附图: add_box.jpg

  • heavenmirror
    3年前

    经我测试 virtualbox 4.3.14 搭配 vagrant 1.6.3 会出现无法启动虚拟机的问题 推荐使用 virtualbox 4.3.12版本,测试正常

  • monkey 最重要的事,永远只有一件
    3年前

    vagrant 是目前为止看到过的最好的统一开发环境解决方案。

  • caoglish
    3年前

    有个问题,如何进行单元测试?尤其是在windows下,我今天尝试用putty登录,遇到一些问题,首先是使用了privatekey登录,却被refuse了。就算是登录了,如何在外部控制虚拟环境进行单元测试?外部似乎很难控制内部。

    如果说homestead很难设置流程自动化进行单元测试(或者放在CI上进行测试),那么这个方案其实是非常不完整的,或者说,这个方案不算完成。

  • Summer MOD A Life-long learner.
    3年前

    @caoglish

    这就是一台 Linux , 方便的是创建的过程, 没法什么都帮你做了的, 就跟平时怎么维护和使用 Linux 服务器一样哦, 该怎么做还是怎么做.

    好久没有使用 win 了, 但是依稀记得 win 下一般都使用比 putty 更高级点的客户端, 如 SecureCRT, 使用这种客户端的话, 是连 privatekey 都不需要添加的, 实现原理好像是自动记住用户名密码.

    Homestead 很难设置流程自动化进行单元测试

    至于上面的观点, 还是那句话, Homestead 就是一个 Linux Box, 你这句话甚至可以直接翻译为 : "Linux 下很难设置流程自动化进行单元测试" .

    自动化测试的话, 瞬间能想到的是, 可以利用 gulp 来监控文件的修改, 当文件修改后, 直接调用测试的命令.

  • Summer MOD A Life-long learner.
    3年前

    @jammylive 至于你这个傻冒, 我去过一个屏蔽的功能来干掉你吧.

  • caoglish
    3年前

    @Summer

    Homestead 很难设置流程自动化进行单元测试

    我的意思是很难从本地环境中去自动化控制在虚拟运行环境中的单元测试

    我是用 grunt+grunt watch 的,我也是在尝试着使用自动化单元测试。单元测试的要点就是在相同环境下测试。 现在我能想到的方案是设置两个自动化,一个在本地运行,只是检查代码质量,以及其他不需要环境的自动化流程,一个是虚拟环境下面,用来单元测试,以及所有需要环境的部分。然后同时打开运行。

    但是这样运行起来就很不方便了,而且链接虚拟环境经常超时不用,就断掉了。而且我还在想,如果是使用 Jenkins-CI 的话,要设置全自动化,就是十分困难了。

    你说的 SecureCRT 我会去试试看先, 如果最后实在想不出办法,我只能去 stack overflow 提问,看看那里有没有人能给出一个解决方案了。

  • wutong
    3年前

    @Summer

    我是在 Windows 系统下操作的
    使用的是 Github 客户端自带的 Git bash
    已经好了,不过 alias 配置出了点问题
    已在 ./gitconfig 文件里添加了

    [user]
        name = flyboy
        email = flyboy@live.cn
    [alias]
        vm = ssh vagrant@127.0.0.1 -p 2222
    

    可是运行 vm 的话,提示未找到,求解~~~

  • lifesign Learn From Life
    3年前

    @wutong vm 这个 alias 是写在 .bashrc 或者 .bash_profile 里的 你在这里设定了 alias 只是 git 的 可以通过 git vm 执行 不过我想你应该是想用 vm 所以写在 .bashrc 里即可

  • Alexliu1990
    3年前

    在编辑homestead.yaml的时候显示为RO文件,无法修改,请问该如何处理?

  • wutong
    3年前

    之前电脑 4G 内存,安装的 32-bit 系统,
    使用 Homestead 一直卡在 vagrant up
    提示是 deafult: Warining: Connection timeout. Retrying...
    我确信什么 BIOS 啊,软件版本都是从官网下载的最新版,
    但是死活就是不行,偶然的一次找到了解决方法,
    记录下来,如果有遇到相同问题的童鞋可以参考下:

    1. 编辑 Homestead.yamlmemory: 1024
    2. 打开 VirtualBox 设置 homestead 虚拟机
      • 常规 > 基本 > 版本:Ubuntu (64 bit)
      • 系统 > 处理器 > 扩展特性:打勾 启用 PAE/NX
    3. 进入 homestead 目录,执行 vagrant up
  • mygoare
    3年前

    @wutong 不是加到 .gitconfig alias, windows应该加到 用户目录 的_bashrc 文件 alias vm="ssh vagrant@127.0.0.1 -p 2222"

  • fyibmsd
    2年前

    @wutong 好顶赞

  • Junnplus
    2年前

    为什么不用docker部署,vbox镜像好大

  • NauxLiu https://github.com/nauxliu
    2年前

    很赞?

  • jaydon2010
    1年前

    hello,我想请教以下,你的Homestead.yaml上面写的192.168.10.10的地址,但是在hosts里面写的是127.0.0.1的地址,还有就是你在浏览器中访问时,加上了8000的端口,我想知道是在哪里设置的? 最后一个问题,我在vagrant up就是一台新的虚拟机,那么在上destroy虚拟机的composer的设置都会没有啦。那我需不需要在本地host上将composer也安装好。有没有qq群。

  • HancockXu
    1年前

    你好,我想问一下我按照教程都装好了,hosts也修改了,然后也Vagrant up了。但是浏览器访问设定主页只有“welcome to nginx”,并没有我public文件夹里的index文件。这是什么原因?怎么解决呢?

  • HancockXu
    1年前

    所以nginx需要进一步的配置吗?

  • JobsLong 那么,下一步的行动是什么?
    1年前

    @HancockXu 贴一下 Homestead.yaml 文件内容 :)

  • HancockXu
    1年前

    @JobsLong 已经解决了,谢谢啦,是nginx配置的问题。

  • JobsLong 那么,下一步的行动是什么?
    1年前

    @HancockXu 也可以把出错原因贴出来哦

  • tianyaxifeng
    1年前

    @Summer win环境配置完成运行时出错,请问是什么原因?

    配置如图: file

    错误如图: file

  • blackbai 热爱学习
    1年前

    vagrant ssh后报错,

    • ssh_exchange_identification: read: Connection reset by peer
  • 进击的船长 最近开发爬虫
    7个月前

    老哥 该弄个 docker 的版本了

  • 1721516323
    1个月前

    file

    file

    请教一下,添加成功了为什么Up的时候还要从新下载 @Summer

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter