by Devin Yang

建立于: 7年前 ( 更新: 1年前 )

建议采用进化版Docker环境,deviny/phpenv。

https://www.ccc.tc/article/deviny-phpenv-summary

分隔线下是旧数据罗。



前言:

对我来说,Laravel是一个进化极快速的PHP框架,也是一个全方位解决方案的框架。
例如,本站使用的是Facebook登录的功能,即是透过Laravel的官方包socialite实做的,
很多东西框架可以帮我们搞定了,像是queues、file storage,验证机制等,框架通通提供给我们,干麻自己做呢?
透过Laravel的框架提供的多种的功能,可替我们搞定很多的事情。

以下列出Laravel历代版本的PHP最低环境需求: (注: 最新版MacOS默认已不安装php了)

Laravel版本PHP要求
Laravel 4.2PHP>=5.4
Laravel 5.0PHP>=5.4, PHP<7
Laravel 5.1PHP>=5.5.9
Laravel 5.2PHP>=5.5.9
Laravel 5.3PHP>=5.6.4
Laravel 5.4PHP>=5.6.4
Laravel 5.5PHP>=7.0


由於Laravel的进化速度真的很快,系统需求也是一代比一代高,所以当然官方也提供诸如Homestead及Valte等开发运行环境给我们使用。

先说好,我不是黑特(hater),即然本文提到了要用Docker创建Laravel开发环境,
我当然对Homestead及Valte有点小小的个人意见罗:

就我个人而言,Homestead采用的Vagrant真的是有点过时的东西了,其实Vagrant的概念非常好,
至少我也曾经使用他在自己项目上,但是用了Docker后,
可以用一种辞来形容我对这个情境的看法,就是「即生瑜何生亮」,虽然Vagrant跟Docker当然还是有其区别,
本文就不进行探讨了,但就开发环境上的使用,
Docker光是秒级启动速度及他的微服务架构就赢了呀。

再来谈谈Valte好了,Valate需要运作在Mac上,并且使用homebrew进行安装一些Mac OS没有提供的东西,像是新版PHP等。
运行速度当然也是超快,但是灵活度不足。
安装完后,就吃了我的port 80,我要跑的东西又不是只有Laravel,而我可能需要换较低版本的PHP运作,典解,
用Valte还是要用brew安装一些东西,数据库调整或php版本变更或是自行扩允PHP的外挂呢?对我来说似乎没有那的么灵活。
相对来说,Docker我们可以选择别人帮我们建好的image,必要时,我们也可以自己进行扩展创建自己需要的image环境,仅需自己去调整Dockerfile的设置档即可,非常自由呀:p。


所以使用Docker来进行Laravel的开发环境创建及运行,似乎就解决了,我的启动速度及灵活度的问题了。

关於D-Laravel

目前其实已有相当多的 docker + laravel 开发环境存在了,为什么我还是要搞一个,是吃饱太闲吗?
如果您是对Docker略为熟悉的使用者,都应该知道,Dockerhub上需标示为official才是官方的版本,

相对的代表了他是较安全的,我不用去检视里面是否埋了什么不该有的东西。

而D-Larave,就是完全采用了官方的image official为基础创建的,
PHP image也是以Docker的php官方image进行重建(因为需符合Laravel环境),
所以使用上可以较放心。

如果您对於如何重Build D-Laravel的PHP有兴趣,可以参考下方影片。

 

当然D-Laravel不只是提供了docker-compose的设置档,更提供了简化版的bash命令,
对於Laravel或是Docker的初学者,都可以非常快速的创建Laravel的开发环境,
而且不止於Laravel开环境,不论您是否懂docker,都可以立即使用,平时的使用上也相当的方便。
 

如何下载及使用D-Laravel呢?

但是D-Laravel主要运作及测试的环境是以Mac OS为主。
Linux上运行应该是没有问题的,如果您使用Linux运行有问题,可以开PR给我,谢谢。
如果您是Windows 10需确认您在gitbash下的环境,已安装了可正常运作的laravel installer。

在这里的可运作指的是D-Laravel提供的简易bash命令(./console跟./create),
如果您知道如何使用docker-compose,在Windows 10运行是没有问题,是可跨平台运行的。

一、首先,当然是我们的电脑要先安装Docker罗 ,希望您装了。
https://docs.docker.com/docker-for-mac/

二、直接下载D-Laravel的Repo
https://github.com/DevinY/dlaravel

三、启动,就这么简单了,进入下载后解开的dlaravel数据夹,然后输入命令:

./create test1

以下是完成的画面:


以上,就搞定罗,够简单了吧!!
您打开浏览器,输入网址

http://test1.dev:32770


即可看到Laravel项目的画面,同时已经自动帮建好test1的数据库及.env的设置了。

在启动过程,bash进程需要去调整 /etc/hosts,添加test1.dev的域名,所以会询问系统密码,因此这是正常现象不用担心。

D-Laravel完全Open Source,如果您还是有点害怕,可以自已去检视看create的bash上的host做了什么。
在不进行任何设置档的调整下,D-Laravel的启动会是随机埠,如上图显示的32770

Laravel的Project会创建在sites/test1的数据夹内。
如果我们要停止,可以使用./console down即可。

create命令,并不单单只是帮我们创建了一个Laravel的Project,同时,也帮我创建了test1的数据库。

我完全不想使用D-Laravel提供的bash是否有辨法用D-Laravel上的docker-compose创建Laravel的开发环境呢。
这当然是可以的,create跟console的bash只是提供了一个简化自己手动设置Laravel的步骤
及Docker的docker-compose官方命令。

关於手动创建Laravel Project及启动docker-compose

以下就来直接说明怎么手动创建,当然,希望你需知道,
什么是laravel installerdocker-compose的基本命令。
其实手动创建的步骤也并不难。

一、我们在dlaravel的数据夹下,直接透过laravel installer创建一个laravel的Project到sites的数据夹。
下图中,我新建了一个test2的project到sites的数据夹内


二、手动修改/etc/hosts档,请使用您自己习惯的编辑器,需有Root权限。
如果您不懂vi的编辑,请勿运行下方命令哦,我怕你无法退出Vim编辑器,或破坏到hosts档。

sudo vi /etc/hosts

进入后,在hosts档的最下方添加, 127.0.0.1 test2.dev
请注意,一定要是要*.dev这个名称,这是D-Laravel的nginx设置档默认的名称。*代表是您的项目数据夹名称。

127.0.0.1 test2.dev

 
替代方式,当然是用D-Laravel的bash帮您修改。

./create --host test2


三、启动D-Laravel的docker containers.
-d的意思是要在背景运行containers。

docker-compose up -d


四、至於数据库的创建及.env的设置,就自己进入sites/test2中进行罗。

我不是很会写文章,如果您对於文章内容有什么疑问,欢迎评论给我哦。

关於D-Laravel的详细说明及使用,请至官方的Repo:
https://github.com/DevinY/dlaravel

 

Tags: docker laravel

Devin Yang

文章内容无法一一说明,如果您有什么不了解处,欢印提问哦:)

No Comment

Post your comment

需要登入才可留言!

类似文章


laravel

Facebook的测试用户

是否有人跟我一样网站用OAuth进行网站的使用者登录,在Facebook的开发者页面有一个「测试用户」, 可以用来测试Facebook的功能是否正常, 因为网站搬家到Google的GCE时,不知何故,我居然在Laravel的User的model中$fillable的array内多贴了一个~, 一般情况下进程都正常运作,但是在新使用者登录时,就出错给你看。 一直听到有人说,没法登录这个网站评论,我想说,我都很正常呀。@@ 今天使用测试用户测试后,哈,发觉我的网站上的登录功能根本坏很久了。

docker,php,cli

MacOS的php不给力,用docker运行laravel installer

非常简单呀,加个「别名」就好了alias laravel='docker run --rm -v ${PWD}:/var/www/html -v ~/.dlaravel/cache:/home/dlaravel/.composer/cache -ti deviny/fpm:8.1.10 /home/dlaravel/.composer/vendor/bin/laravel'

laravel,dotenv,seo

我如何依子域名动态加载Laravel不同的dotenv档

开始前先来抱怨一下,本来我的网站可以依使用者的浏览器自动显示不同的语系的。这有何不可,但Google的SEO似乎不喜欢这么搞,他建议每种语言使用不同的网址,不要用cookie或浏览器设置来调整网页内容,好吧那我只能乖乖就范了。他的建议作法,第一种方案:依国家区分,像是example.tw或example.de这真的天方夜谭怎么可能,要嘛收购被注册的域名,要不然取个全球没人会取的怪域名还比较有机会。第二种方案:用子域名区分,这正式我准备要做的,等等来说明在Laravel中怎么弄。第三种方案:example.com/tw/ 之类的,Apple好像就这么弄的。第四种方案:site.com?loc=tw之类,不建议使用,确实我也觉的这个不是一个好主意。