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 包括以下两个东西
- 一个 vagrant box 虚拟机, 里面软件什么都下载好了;
- 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
- ..