试玩 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
高认可度评论:
我去,国外人太会玩了,感觉任何一个 php 项目的 logo 都搞的很好看,大象的各种版本。
牛蛙牛蛙,Go 来赋能 PHP,不知道能上生产不~ :elephant:
我去,国外人太会玩了,感觉任何一个 php 项目的 logo 都搞的很好看,大象的各种版本。
看着不错
真能嫁接啊
;当年Zeev提议php新开分支做p++,结果没有通过,这之后就涌现了不少php嫁接方案,为什么php开发组没有通过这个提议,我想语言迭代不仅仅只考虑性能吧,甩掉历史包袱这个很难,说不定会流失大量的用户和开源项目,php也会走下坡路。
P++ Idea
我觉得可以
和roadrunner有什么区别?
我用镜像跑laravel 没有任何效果怎么回事
感觉资料好少的样子
