Vagrant 系列一:安装配置
如果是工程化开发,走正规军路子还是推荐使用 Homestead。下载Vagrant。官方下载地址
这里下载的是Windows版本的安装包。直接点击安装即可,安装过程中可自定义安装路径。Windows+r启动cmd,输入vagrant -v验证安装是否成功,如果出现版本信息表示成功。
注:如果你使用的是 Windows,需要开启系统的硬件虚拟化(VT-x),这通常可以通过 BIOS 来开启。如果你是在 UEFI 系统上使用 Hyper-V,则需要关闭 Hyper-V 以便可以访问 VT-x。
预装软件
Homestead 可以运行在 Windows、Mac 以及 Linux 等主流操作系统上,预装的软件和工具列表如下:
- Ubuntu 16.04
- Git
- PHP 7.2
- PHP 7.1
- PHP 7.0
- PHP 5.6
- Nginx
- Apache(可选)
- MySQL
- MariaDB(可选)
- SQLite3
- PostgresSQL
- Composer
- Node(With Yarn, Bower, Grunt, and Gulp)
- Redis
- Memcached
- Beanstalkd
- Mailhog
- Elasticsearch(可选)
- ngrok
1. 安装前准备
使用 Homestead 之前,需要先安装VirtualBox,以及 Vagrant,所有这些软件包都为常用操作系统提供了一个便于使用的可视化安装器,通过安装界面引导就可以完成安装。
2.安装 Vagrant box
注意: Laravel官方推荐的Shell是Git Bash
。因为Git Bash
自动将~(tilde)
映射到用户根目录下(例如,C:\Users\MyUserName
),而如果使用Windows自带的cmd
,那么需要使用%HOMEDRIVE%%HOMEPATH%
环境变量来进入正确的文件夹。
VirtualBox 和 Vagrant 安装好了之后,在终端中使用如下命令将Homestead Vagrant box laravel/homesterad
添加到 Vagrant 中vagrant box add laravel/homestead
选择virtualbox选项,进入下载等待,时间取决于网络。如果上述命令执行失败,需要确认 Vagrant 是否是最新版本。网络或者机器关机中断后一直报错 Failed to connect to vagrantcloud-files-production.s3.amazonaws.com port 443: Timed out
之类的错误。还有解压错误等。可能是跟网络有关系,再试几次就成功了(可以用管理员打开cmd去试试)。国内网络也就这样了,不行就移步手动下载。
x ubuntu-16.04-amd64-disk001.vmdk: gzip decompression failed bsdtar.EXE: Error exit delayed from previous errors.
使用vagrant box list
命令确认是否安装了box。
也可以选择手动下载安装
,laravel/homestead box
下载地址vagrant cloud 下载地址,https://app.vagrantup.com/laravel/boxes/homestead/versions/5.2.0/providers/virtualbox.box
如果你需要下载不同版本(或最新版本),请将以上地址中versions/
后的数字版本号替换成相应的版本号。
下载好之后改名为virtualbox.box
,
和virtualbox.box放置在同一个目录。执行vagrant box add laravel/homestead ~/Downloads/virtualbox.box
添加。后边的~/Downloads/virtualbox.box
是文件存放路径。
Vagrant 2.0.3有问题,报Invalid file://hostname/, expected localhost or 127.0.0.1 or none。
3. 安装 Homestead
选择任意目录作为Homestead目录。如:F:
,在这个目录下执行clone
git clone https://github.com/laravel/homestead.git Homestead
或者下载zip包 GitHub路径
然后进入克隆下的目录 cd Homestead/
// Mac/Linux... bash init.sh // Windows... init.bat
在 Homestead 目录下运行init.bat
命令来创建Homestead.yaml
配置文件,生成的 Homestead.yaml 配置文件文件位于当前 Homestead 目录。如果git Base
执行bash init.sh
。
完成后会生成Homestead.yaml
和Vagrantfile
。
--- #`Homestead.yaml`配置文件: # 虚拟机ip ip: "192.168.10.10" # 虚拟机使用内存 memory: 2048 # 虚拟机使用的单核CPU cpus: 1 # Vagrant 提供者 provider: virtualbox # 公共ssh key authorize: ~/.ssh/id_rsa.pub # 私有ssh key keys: - ~/.ssh/id_rsa # 共享文件夹 folders: - map: ~/code to: /home/vagrant/code # 站点配置 sites: - map: homestead.test to: /home/vagrant/code/public # 数据库名 databases: - homestead # blackfire: # - id: foo # token: bar # client-id: foo # client-token: bar # 端口转发 # ports: # - send: 50000 # to: 5000 # - send: 7777 # to: 777 # protocol: udp variables: - key: APP_ENV value: local
如果sites
在配置Homestead
框后更改属性,则应该重新运行以更新虚拟机上的Nginx配置,vagrant reload --provision
修改本地host文件:在 Mac 或 Linux上,该文件位于 /etc/hosts
,在 Windows 上,位于 C:\Windows\System32\drivers\etc\hosts
。和配置文件中的ip保持一致
192.168.10.10 homestead.test
在 Homestead
目录下运行 vagrant up
命令启动
这个提示是ip冲突,更改ip即可。
手动下载的,执行vagrant up
时还是提示找不到,这是因为手动引入的box
版本问题
解决方法就是,进入Homestead/scripts
下的 homestead.rb
文件,做以下修改即可。
vagrant reload --provision
重启。再执行vagrant up
,首次启动会有一个初始化过程
vagrant status
查看状态。running
状态启动成功。
4. 相关管理命令
vagrant up
:启动虚拟机vagrant halt
:关闭虚拟机vagrant reload --provision
重启vagrant suspend
: 暂停虚拟机,就是挂起vagrant resume
:恢复虚拟机 vagrant box remove xx
: 移除box,其中 xx 是 box 名称vagrant destroy
:删除虚拟机
5. SSH 登录
从vagrant up
启动界面可以看到ssh
登录地址和端口:
默认账户密码是:vagrant
。使用ssh
登录工具登录即可。
6. 连接mysql
要通过本地的 Navicat 或 Sequel Pro 连接到 Homestead 上的 MySQL 或 Postgres 数据库,可以通过新建连接来实现,主机 IP 都是 127.0.0.1
,对于 MySQL 而言,端口号是 33060
,对 Postgres 而言,端口号是 54320
,用户名/密码是 homestead/secret
7. php扩展安装
在vagrant box 上安装PHP扩展
这里以安装MongoDB扩展为例:
1. 首先安装mongodb数据库
`apt-get update` 更新源,也可以不更新,包的新旧问题
sudo apt-get install -y mongodb
2. 安装mongodb扩展
pecl update 通道升级 `sudo pecl channel-update` `pecl install mongodb` php7 以上的版本,默认最新
修改配置文件。特别注意,vagrant中需要修改两处,不然会出现在 php -m
和 phpinfo()
打印出来的不一致。
* `sudo vim /etc/php/7.2/fpm/php.ini` 第一处 * `sudo vim /etc/php/7.2/cli/php.ini` 第二处
添加extension=mongodb.so
进去。然后重启php-fpm。
执行命令: sudo service php7.2-fpm restart
这样就可以通过php -m
和phpinfo()
输出结果,显示是一致的。
vagrant 中的版本较多,可以通过ll /etc/alternatives/php
查看默认的版本。