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

需要登入才可留言!

类似文章


openapi,ai,laravel

在Laravel上写OpenAI测试API

最近好像大家都在讲OpenAI,如果您也想玩,可以在Laravel的API写个简易的API测试哦。因为可以用curl调用,所以透过guzzle就能调用了。如果您登录了openai的网站,可在此处看到官方的教程说明https://beta.openai.com/docs/quickstart/build-your-applicationAPI的KEY的申请,就在这页的下方就有按钮了+ Create new secret key

docker

用bash更新docker-compse版本

安装最新版本的docker-compose

laravel,trait,php

我的Browser Trait、webp图档支持功能检测及是否为手机检测

PHP trait相信很多人都不陌生,因为Laravel到处可见,但我还是写出来分享给有缘人🙄。PHP trait可以让两个不同的CLASS都可以使用相同的方法。他不但能降低复杂度,更可让进程码重复被使用。所以放个Browser系列功能在Laravel的ViewServiceProvider上使用,应该是满方便的😝