试玩 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
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 25

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

file

1年前 评论
largezhou 1年前

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

1年前 评论
xuchunyang (楼主) 1年前
cvoid 1年前

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

file

1年前 评论
largezhou 1年前
Jianne

看着不错

1年前 评论

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

P++ Idea

1年前 评论
lovewei (作者) 1年前
lovewei (作者) 1年前
anjing 1年前
xiusin 1年前
lovewei (作者) 1年前
xiusin 1年前
emo猪 1年前

和 roadrunner 有什么区别?

1年前 评论
xiusin 1年前
meows 1年前
meows 1年前
deatil 1年前
xiusin 1年前
deatil 1年前
xiusin 1年前

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

1年前 评论

感觉资料好少的样子
file

1年前 评论