您的位置:首页 > 编程语言 > PHP开发

使用VirtualBox+Vagrant搭建自己的Laravel开发环境

2017-10-09 13:04 791 查看
首先承认自己爱折腾,原因就是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 rsync

root#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中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息