使用VirtualBox+Vagrant搭建自己的Laravel开发环境
首先承认自己爱折腾,原因就是laravel的homestead.box下载速度超慢,不仅它慢,其他所有box都慢,慢到再也无法忍受。所以不得不建立一个自己DIY的Laravel开发环境。
1、准备工作及需要安装的软件
主机:windows 10
POSIX运行环境:Cygwin
虚拟机:VirtualBox
虚拟机OS:FreeBSD
虚拟机辅助命令:Vagrant
PHP管理工具:Composer
2、Vagrant命令行的运行环境【强烈】推荐Cygwin,因为MinGW自己的首页上就说明了,POSIX模拟环境推荐Cygwin,当时我不信,但我以N次失败经验为教训,终于确定Cygwin的王牌地位。接下来说说经过:
虚拟机我最先安装的是freebsd 11,没有安装X环境,但是装了OpenSSH Server,这是主机与虚拟机通信的首选。
host: freebsd
username: vagrant
group: vagrant + wheel
password: vagrant
wheel组很重要,不加入它就不能su root
安装完后进入系统
root#pkg然后自动安装pkg,之后设置freebsd的pkg源,经测试pkg.tw.freebsd.org速度还行
root#mkdir -P /usr/local/etc/pkg/repos
root#cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.conf
root#vi /usr/local/etc/pkg/repos/FreeBSD.conf
FreeBSD: {
url: "pkg+http://pkg.tw.freebsd.org/${ABI}/latest",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkg",
enabled: yes
}
root#pkg update
root#pkg upgrade
pkg更新完列表和软件后,安装vbox支持
root#pkg install virtualbox-ose-additions-nox11
root#vi /etc/rc.conf
...
sendmail_enable="NONE"
vboxguest_enable="YES"
vboxservice_enable="YES"
安装ssh公共**
root#su vagrant
vagrant#cd ~
vagrant#mkdir .ssh
vagrant#cd .ssh
vagrant#wget -c -O authorized_keys http://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub
vagrant#exit
安装sudo,这个很重要,文件共享的时候需要这个命令,freebsd需要自己安装
root#pkg install sudo
root#vi /usr/local/etc/sudoers
....
%wheel ALL=(ALL) NOPASSWD:ALL
%sudo ALL=(ALL) ALL
安装rsync文件同步服务,因为freebsd不支持vbox文件系统,所以需要用rsync来同步共享文件夹
root#pkg install rsyncroot#vi /etc/rc.conf
...
rsyncd_enable="YES"
安装apache,php,mysql
root#pkg install apache24
root#pkg install mysql57-server
root#pkg install php71 php71-extensions php71-gd php71-mysqli mod_php71
apache服务器启用rewrite模块,设置站点目录
root#vi /usr/local/etc/apache24/httpd.conf
...
ServerName localhost:80
DocumentRoot "/vagrant/public"
#文档根目录如此设置是与vagrant的synced_folder相关的
#config.vm.synced_folder "E:/www/blog", "/vagrant", type: "rsync"
#将主机的laravel工程E:/www/blog目录映射到客户机的/vagrant目录
#因此laravel的E:/www/blog/public目录就映射到/vagrant/public
<Directory "/vagrant/public">
Options FollowSymLinks MultiViews #MultiViews必须要设置,只有它才能使用站点根目录下的.htaccess的rewrite规则文件
AllowOverride All
Require all granted
</Directory>
#找到rewrite的module设置,将注释字符#删除,保存文件退出
设置apache,mysql自启动
root#vi /etc/rc.conf
...
apache24_enable="YES"
mysql_enable="YES"
3、主机上安装Cygwin、Vagrant,系统PATH加入Cygwin的bin、Vagrant的bin。
打开Cygwin,安装apt-cyg,从https://github.com/transcode-open/apt-cyg下载,下载完后将apt-cyg解压放到Cygwin的bin目录下
composer是一个*.phar文件,需要用php来运行,因此先安装php。
#apt-cyg install php php-json php-mbstring php-phar php-zip php-posix
#apt-cyg install php-xmlwriter php-tokenizer php-ctype php-zlib
再安装composer
#php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
#php composer-setup.php
#php -r "unlink('composer-setup.php');"
#chmod +x ./composer.phar
#mv ./composer.phar /usr/bin/composer
#composer -v
设置composer的中国镜像
#composer config -g repo.packagist composer https://packagist.phpcomposer.com
进入E:/www目录,建立laravel工程blog
#cd e:/www
#composer create-project --prefer-dist laravel/laravel blog
#ls -la blog
然后E:/www目录下就出现了一个blog文件夹,子目录中有个public文件夹就是站点根目录,接着返回用户主目录创建vagrant虚拟机,并安装rsync支持
#cd ~
#apt-cyg install rsync
#vagrant package --output freebsd.box --base freebsd
#vagrant box add laravel/freebsd freebsd.box
#vagrant init
init后,在当前目录下会自动产生一个Vagrantfile文件
#vi Vagrantfile
Vagrant.configure("2") do |config|
config.vm.define "freebsd" do |config|
config.vm.box = "laravel/freebsd"
config.vm.network "forwarded_port", guest: 80, host: 8000, id: "apache"
config.vm.network "forwarded_port", guest: 8080, host: 8080, id: "tomcat"
config.vm.network "forwarded_port", guest: 3306, host: 3366, id: "mysql"
config.vm.synced_folder "E:/www/blog", "/vagrant", type: "rsync"
config.vm.provider "virtualbox" do |vb|
#vb.gui = true
vb.name = "laravel-freebsd"
end
config.ssh.shell = "sh"
end
end
4,现在可以启动vbox了,打开Cygwin
#cd ~
#vagrant up freebsd
#vagrant ssh freebsd
进入ssh后
vagrant#ls /vagrant
就能看到/vagrant目录下的文件与E:/www/blog文件夹下的文件一致,于是在主机用可视化Editor更改E:/www/blog下的文件,就能在虚拟机中的/vagrant同步显示。当然,同步需要在主机中使用命令
#vagrant rsync
如果觉得麻烦就用rsync-auto,它会挂起操作,监听主机共享文件夹,当有文件变更,就会同步到虚拟机中
#vagrant rsync-auto
上面如此多的步骤,在主机中我首先使用msys,虽然vagrant识别为msys,但是它用的是Cygwin的获取文件路径命令:cygpath,现在的msys-cygutils扩展里没有cygpath了,我不知道百度多少次,都没有找到答案
首先它抛出的错误是zlib比较新,需要用-zz命令替换-z命令,但是结果无效
接着在Vagrantfile里更改ENV["VAGRANT_DETECTED_OS"] = "Cygwin",也没有用
最终,我将Cygwin的bin加入到系统PATH中,于是vagrant就能which cygpath了,而且vagrant up freebsd成功
但接下来的vagrant ssh freebsd就让人无语,它不进入ssh,而且直接返回命令行,没有错误提示,没有错误日志
于是我又安装了msys2,这个模拟器更过分,它不知道被识别为什么os了,于是rsync不成功,而且它与Cygwin相排斥,无法共存到系统PATH中,因此也用不了cygpath
最终Cygwin运行vagrant up freebsd正确,vagrant ssh freebsd正确,vagrant halt freebsd正确,好吧,就只剩下它了
终极备注:文章写完后到现在,历时20天左右,间歇性的调试和网络搜索,终于在某大神的博客找到相关文章。地址:流水理鱼
原来只要安装一个名为(vagrant_winnfsd)的插件就能解决nfs共享的问题,如果你找不到方法,再怎么搞也搞不好。于是vagrant plugin install vagrant_winnfsd就一切搞定。
2017/10/28,再备注一次,不知道会备注多少次。
上头说的Git和msys2不支持cygdrive是非常错误的想法,git-scm.com下载的posix模拟器自带了cygpath了,而msys2需要用pacman安装cygrunsrv,这个包里面就有cygpath,git-bash和msys2都是posix模拟器,需要cygpath生效,就修改安装目录下的/etc/fstab文件,这个文件确定了cygpath -u -a [path]输出的格式,当windows文件夹格式转换为cygwin格式,vagrant的rsync共享文件夹才能使用了,而没有所谓的No such file or directory错误。
一般git-bash和msys2的/etc/fstab是这样配置的:
none / cygdrive binary,posix=0,noacl,user 0 0
需要cygpath带上cygdrive这样的头,就将配置这样修改
none /cygdrive cygdrive binary,posix=0,user 0 0
于是cygpath -u -a [path]就变成了/cygdrive/[path]这样的格式,这个格式才能正常应用在vagrant中
推荐阅读
-
使用 Docker 搭建 Laravel 本地环境的教程详解
-
使用git迁移Laravel项目至新开发环境的步骤详解
-
使用eclipse搭建c/c++开发环境的详解步骤
-
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
-
使用Docker快速搭建Oracle开发环境的方法教程
-
使用vue-cli+webpack搭建vue开发环境的方法
-
使用git迁移Laravel项目至新开发环境的步骤详解
-
使用 Docker 搭建 Laravel 本地环境的教程详解
-
Docker搭建自己的PHP开发环境
-
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤