很多Laravel开发者困惑于PHP项目本地和服务端环境不统一,导致一系列的问题。解决这种问题目前的最佳实践有Docker和Vagrant两种。对于Laravel项目,Laravel-China社区的大佬们推荐使用Homestead
工具进行开发,本文主要讲解该工具在CentOS的安装和基本使用。
- 在macos环境中安装使用教程请访问另一篇文章:在Mac上下载Vagrant并使用Homestead。
1. 首先采取RPM包安装VirtualBox
这个virtualbox的RPM包下载地址为:http://download.virtualbox.org/virtualbox/rpm/rhel/7/x86_64/VirtualBox-5.2-5.2.8_121009_el7-1.x86_64.rpm。我们在服务器用户目录上执行:
wget http://download.virtualbox.org/virtualbox/rpm/rhel/7/x86_64/VirtualBox-5.2-5.2.8_121009_el7-1.x86_64.rpm
。-
然后安装VirtualBox:
rpm -ivh VirtualBox-5.2-5.2.8_121009_el7-1.x86_64.rpm
。如图,依赖库一大堆都不存在:
rpm安装和源码安装时,碰到这种问题是常事。接下来我们yum安装这些缺失的依赖库:
# yum install libGL libICE libSDL libSM libXcursor libXext libXinerama libXmu libXrender libXt libfontconfig libpng15 libvpx libxcb
- 其中libSDL,libfontconfig和libpng15三个库不在yum源中,其实都只是因为包名错误,使用
yum install SDL fontconfig libpng
安装即可。(这里折腾了很久,最终回过头才发现走了天远的弯路,下面小部分为弯路)。
另外俩需要我们需要手动下载安装,这里我们依然使用rpm安装。
网页打开`https://pkgs.org/`。分别搜索这两个软件,找到下载地址分别为:
- SDL和libSDL。
- http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/i586/RPMS.classic//libpng15-1.5.28-alt2.i586.rpm。
- 试着安装png,如图报错lib.so.6,该库的软件包名称为glibc,安装:`yum install glibc`提示已经安装。
- 这个问题在Stack Overflow上有人回答过一串英文,大概意思是从`Red Hat Enterprise Linux 6`开始,默认只安装主架构所需要的包,而不安装兼容架构的包。
- 也就是说,64位系统默认只安装64位的软件包。为避免这种问题,在64位系统中,我们要手动安装32位的兼容包。
- 执行命令`yum insall glibc.i686`,expat和freetype同样的道理,未安装32位的软件包。
- 执行`yum list installed expat freetype`查看,执行`yum install expat.i686 freetype.i686`安装。
- 到了最后rpmlic中的SetVersions和PosttransFiletriggers两个模块未安装,但到底怎么安装呢?
- 国内的搜索引擎几乎没找到这类问题,我不得不上google查找,却依然没找到具体的解释。
- 到了这里我才回过头直接yum list SDL fontconfig libpng,发现可以直接安装。
-
依赖安装完毕,直接安装VirtualBox成功如图:
图中提示你已经默认创建了vboxusers用户组(
/etc/group
),VM用户必须放置在该用户组中。通常情况你不能使用root用户登录服务器,我这出于学习方便考虑就把常用的root用户加入这个用户组吧,usermod -a -G vboxusers root
,然后查看当前用户所在组groups root
。
2. 安装对应版本的Vagrant
这个vagrant的RPM包下载地址为:
https://releases.hashicorp.com/vagrant/2.0.4/vagrant_2.0.4_x86_64.rpm
,我们同样在用户家目录下载该文件并安装试试。-
长的帅的人执行
rpm -ivh
后都是这样的:
box是vagrant管理的一个个容器,现在我们需要下载一个名为homestead的box。使用命令
vagrant box add laravel/homestead
,安装过程需要选择你服务器上使用的虚拟机。输入3回撤即可开始漫长的等待。-
如果你的服务器在国内小作坊,这里的等待时间可能足够你睡个觉明天早上起来继续操作。我使用腾讯云的最低配置大概下载了15分钟,回车后洗了个澡回来就差不多了。当时在我本地mac上是无论如何进度条君都是0,于是借用宿友的windows,使用了360浏览器下载,本地搭建的话你也可以使用迅雷下载,或者使用ftp将这个1.6G的文件上传到服务器。
注意,使用迅雷或者其他方式下载这个文件的话,资源地址在你执行这条命令后会出现在终端,请手动复制粘贴下载。
上面这个操作你也可以使用另外两种方式下载,并不一定要使用
1. vagrant box add laravel/homestead
2. vagrant init laravel/homestead && vagrant up
3. vagrant box add homestead.box(本地文件)
你也可以直接访问 http://app.vagrantup.com
- 下面几个是vagrant常用命令,以后遇到其他的也会在此添加:
vagrant box list 列出本地所有box
vagrant box remove boxName 删除某个box
3. 安装Homestead并测试访问
-
homestead的项目托管在 www.github.com/laravel/homestead上,所以你要首先保证服务器上安装了git命令行,使用
git --version
查看。
如果你没有安装,请执行
yum install git -y
安装git-1.7。或者参考这篇文章手动安装最新版git-2.9:https://www.jianshu.com/p/3ffcd86a8412。在服务器根目录克隆laravel/homestead源码,并按照顺序执行下面的操作。(应该都看得懂吧,有疑问可以留言或者私聊我)
# cd /
# git clone https://github.com/laravel/homestead.git
# cd homestead
# bash init.sh(生成项目配置文件)
生成了Homestead.yaml这个文件后,我们以后对项目进行的一些配置都在这个文件中操作。下面简单说一下并编辑这个文件中的重点部分:
authorize是用于ssh免密码登陆虚拟机的
folders和sites是共享目录和站点代码的映射
databases是数据库名,可以有多个,数据库密码在laravel配置文件中
-
这时候我们在
/homestead/
目录下启动一个vagrant环境,执行vagrant up
,第一次启动速度有点慢。如果你碰到一些问题,请手动删除~/VirtualBox VMs/
目录下的所有文件。
-
如图,虚拟机运行成功。然而
vagrant ssh
始终无法进入这台虚拟机进行操作。折腾了几个小时后我向腾讯云技术部门发起工单,得到的回复是虚拟机中无法创建使用新的虚拟机。
点击访问:常见安装错误。
凉了凉了,本来打算写下面的多站点配置。看来还是删了换Docker教程吧,容器级隔离,应该是可以在虚拟机中创建docker容器的。可腾讯云那边居然电话联系我说不知道,叫我自行测试Docker使用。
4. 域名解析和多站点测试,域名实名认证及备案中,等待Docker版本更新。后续将使用LaraDock进行教程分享,laradock几乎就是docker版的homestead。
5. 赶紧卸载vagrant和virtualbox
rpm -qa
列出本地所有rpm安装的包,可以结合grep命令进行过滤。rpm -qa | grep vagrant && rpm -e vagrant
rpm -qa | grep VirtualBox && rpm -e VirtualBox
查找没问题,这样删除会出错,找不到这个包,使用全名的话提示有一个虚拟机正在运行中。关闭vbox虚拟机再删除。
查看是谁在运行: VboxManage list vms
关闭那个虚拟机:VBoxManage controlvm homestead-7 poweroff
卸载virtualbox:rpm -e VirtualBox-5.2-5.2.8_121009_el7-1.x86_64
参考文档:
rpm安装依赖问题:http://raksmart.idcspy.com/781
百度文库:https://wenku.baidu.com/view/af83dd01bfd5b9f3f90f76c66137ee06eff94ecb.html