试玩 FrankenPHP:尝试本地开发 PHP/Laravel 网站

FrankenPHP 是一个在 Caddy 上搭建的 PHP 运行环境,起作者昨天宣布了 v1.0,它和 Apache/mod_php 类似,只需要运行服务器就行,不用单独用 php-fpm。使用 Golang 开发,提供二进制和 Docker 两种分发方式,下载解压即用,无需费力安装。

二进制简单使用

先准备网站:

$ echo '<?php phpinfo();' > index.php

下载解压,即得到二进制可执行文件,运行网站:

$ frankenphp php-server -l localhost:8888

这和 php -S localhost:8888 体验类似。

Docker 简单使用

可以使用官方镜像 dunglas/frankenphp 直接启动网站:

$ docker run -d --rm -e SERVER_NAME=:80 -p 8888:80 -v $PWD:/app/public dunglas/frankenphp

Caddy 最大的特色是开箱支持 HTTPS,所以能理解 dunglas/frankenphp 默认使用 HTTPS,但是我的本地的 80/443 端口被 Valet 占用了,而且本地测试没有 HTTPS 也 OK,所以设置 SERVER_NAME 变量关闭 HTTPS 支持。

添加 MySQL 支持

二进制 frankenphp 自带 mysqli 和 pdo_mysql 支持 ,但是 Docker 镜像不支持,需要单独安装:

# Dockerfile
FROM dunglas/frankenphp

RUN install-php-extensions mysqli pdo_mysql

构建我们自己的镜像:

$ docker build -t my-frankenphp .
$ docker run -d --rm -e SERVER_NAME=:80 -p 8888:80 -v $PWD:/app/public my-frankenphp

我用 DBngin 运行着本地的 MySQL 服务器,在 Docker 上能用 host.docker.internal 访问到 host 的网络,自然也能访问到 MySQL。

运行 Laravel 网站

跟之前也命令几乎一致,只是需要注意 Laravel 需要整个代码,不仅仅是 public 目录,因此使用 -v $PWD:/app

$ docker run -d --rm -e SERVER_NAME=:80 -p 8888:80 -v $PWD:/app my-frankenphp

这个镜像并不包含 composer,我直接用本地的 composer/npm 安装依赖,这样 npm run dev 也能工作。

因为 artisan 只依赖 PHP,所以也能容器中的使用:

$ docker exec -it fervent_banach php artisan about
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 23

牛蛙牛蛙,Go 来赋能 PHP,不知道能上生产不~ :elephant:

2个月前 评论
xuchunyang (楼主) 2个月前
cvoid 2个月前

我去,国外人太会玩了,感觉任何一个 php 项目的 logo 都搞的很好看,大象的各种版本。

file

2个月前 评论
largezhou 2个月前
Jianne

看着不错

2个月前 评论

真能嫁接啊:joy:;当年Zeev提议php新开分支做p++,结果没有通过,这之后就涌现了不少php嫁接方案,为什么php开发组没有通过这个提议,我想语言迭代不仅仅只考虑性能吧,甩掉历史包袱这个很难,说不定会流失大量的用户和开源项目,php也会走下坡路。

P++ Idea

2个月前 评论
lovewei (作者) 2个月前
lovewei (作者) 2个月前
anjing 2个月前
xiusin 2个月前
lovewei (作者) 2个月前
xiusin 2个月前

和roadrunner有什么区别?

1个月前 评论
xiusin 1个月前
meows 1个月前
meows 1个月前
deatil 3周前
xiusin 2周前
deatil 2周前
xiusin 2周前

我用镜像跑laravel 没有任何效果怎么回事

3周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!