构建 VirtualBox 和 Vagrant 开发环境
概念
- VirtualBox -- Oracle 的虚拟机软件
- Vagrant 提供命令行接口,允许自动化安装虚拟机,因为是脚本编写的 provision 文本文件,给共享虚拟机配置提供了可能,Homestead 构建在 Vagrant 之上。
- Homestead 是 Laravel 官方封装的一个 Vagrant Box,是一台虚拟机的虚拟机原型,运行在 VirtualBox 上。
Vagrant就是一款构建虚拟开发环境的工具,支持window,linux,mac,总有一款适合你。并且vagrant 可以把配置好的环境打包成一个box,分享给其他人直接使用,非常方便。
环境说明
系统:
macOS Sierra 10.12.4
虚拟机:
http://download.virtualbox.org/virtualbox/5.1.22/VirtualBox-5.1.22-115126-OSX.dmg
开发环境:https://releases.hashicorp.com/vagrant/1.9.5/vagrant_1.9.5_x86_64.dmg
// 测试 vagrant 版本
vagrant -v
box系统:
Ubuntu http://files.vagrantup.com/precise64.box
安装 box
[~/vagrant/boxes]$ vagrant box add ubuntu64.box
==> box: Box file was not detected as metadata. Adding it directly...
A name is required when adding a box file directly. Please pass
the `--name` parameter to `vagrant box add`. See
`vagrant box add -h` for more help.
// 语法错误,需要为box起名
[~/vagrant/boxes]$ vagrant box add ubuntu ubuntu64.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'ubuntu' (v0) for provider:
box: Unpacking necessary files from: file:///Users/junchow/vagrant/boxes/ubuntu64.box
==> box: Successfully added box 'ubuntu' (v0) for 'virtualbox'!
安装 lnmp
// 创建 lnmp 环境
[~/vagrant/boxes] mkdir lnmp && cd lnmp
// 初始化 ubuntu
[~/vagrant/boxes/lnmp] vagrant init ubuntu
// 进入 lnmp 虚拟机
[~/vagrant/boxes/lnmp] vagrant up
[~/vagrant/boxes/lnmp] vagrant ssh
// 安装软件
vagrant@precise64:~$ sudo apt-get install nginx mysql-server mysql-client php5-cli php5-fpm php5-gd php5-mysql
Laravel 虚拟开发环境 Homestead
https://vagrantcloud.com/laravel/boxes/homestead/
安装 Homestead Vagrant Box
# 下载 Homestead 并添加到 vagrant box 中
[~/vagrant]$ vagrant box add Laravel/homestead
==> box: Loading metadata for box 'Laravel/homestead'
box: URL: https://atlas.hashicorp.com/Laravel/homestead
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.
1) parallels
2) virtualbox
3) vmware_desktop
Enter your choice: 2
# 查看 vagrant box
[~/vagrant]$ vagrant box list
laravel/homestead (virtualbox, 2.1.0)
ubuntu (virtualbox, 0)
手动克隆代码仓库的方式来安装 Homestead
# 克隆 homestead 项目到本地
[~/vagrant/boxes]$ git clone https://github.com/laravel/homestead.git Homestead
# 由于 Homestead 的 master 分支并不是稳定分支,你应该检出已经标签过的稳定版本。
[~/vagrant/boxes]$ cd Homestead && git checkout v4.0.5
# 创建 Homesstead.yaml 配置文件
[~/vagrant/boxes/Homestead]$ bash init.sh
配置 Homestead
[~/vagrant/boxes/Homestead] vim Homestead.yaml
memory: 2048
cpus: 1
# 配置 vagrant 提供者(虚拟机类型)
provider: virtualbox
# 配置 SSH 认证
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
# 配置共享文件夹,本机与 Homestead 环境自动更新同步
folders:
- map: ~/Code // 本地~/Code 目录
to: /home/vagrant/Code //虚拟机中文件夹
type: "nfs" //若启动 NFS
# 配置 NGINX 站点
sites:
- map: homestead.app //本地域名
to: /home/vagrant/Code/Laravel/public //文件映射地址
databases:
- homestead
# 配置本地 host
[~/vagrant/boxes/Homestead] vim /etc/hosts
192.168.10.10 homestead.app
# 修改配置后重新运行
[~/vagrant/boxes/Homestead] vagrant reload --provision
启动 Vagrant Box
# 启动 vagrant 发生错误
[~/vagrant/boxes/Homestead]$ vagrant up
/Users/junchow/vagrant/boxes/Homestead/scripts/homestead.rb:117:in `read': No such file or directory @ rb_sysopen -
# 重新生成 ssh 登陆认证的 key
[~/vagrant/boxes/Homestead]$ ssh-keygen
# 启动 vagrant
[~/vagrant/boxes/Homestead]$ vagrant up
登陆 Homestead 并安装 Laravel
# 登录Homestead
[~/vagrant/boxes/Homestead]$ vagrant ssh
# 修改镜像地址
vagrant@homestead:~$ composer config -g repo.packagist composer https://packagist.phpcomposer.com
# 安装 Laravel
vagrant@homestead:~$ cd Code && composer create-project laravel/laravel --prefer-dist
# 若 autoload 或 bootstrap 不存在,说明依赖不完整。
composer update --no-scripts
mysql 数据库
默认账户密码:homestead/secret
$ mysql -uhomestead -psecret
问题:
访问 http://homestead.app 页面出现 no input file specified
,检查本地 Code 目录代码正常,检查homestead 中 Code 发现里面没有代码。解决方法是重新同步 vagrant reload --debug
λ ~/ homestead [22:57:57]
zsh: command not found: homestead
# 将~/.composer/加入环境变量 PATH
λ ~/ echo $PATH
λ ~/ sudo vim .zshrc
export PATH="/Applications/MAMP/bin/php/php7.1.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/junchow/.composer/vendor /bin"
λ ~/ sourch .zshrc
# 查看~/.composer/vender/lavarel/ 下是否存在 homestead
λ ~/.composer/vendor/laravel/ composer global require laravel/homestead