ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

FrankenPHP 入门指南:安装方式、使用命令与文档导航(基于 Caddy 的现代 PHP 应用服务器)

FrankenPHP 入门指南:安装方式、使用命令与文档导航(基于 Caddy 的现代 PHP 应用服务器) FrankenPHP 入门指南安装方式、使用命令与文档导航基于 Caddy 的现代 PHP 应用服务器【免费下载链接】frankenphp The modern PHP app server项目地址: https://gitcode.com/GitHub_Trending/fr/frankenphp本文以日语版项目首页文档 docs/ja/README.md 为骨架结合仓库源码整理而成介绍 FrankenPHP 的定位、多种安装途径、两种开箱即用的运行命令以及官方文档体系的导航。FrankenPHP 是一个构建在 Caddy Web 服务器之上的现代 PHP 应用服务器核心目标是把 Caddy 的生产级 HTTP 能力与 PHP 运行时深度整合到一个可执行文件中。本文面向初次接触 FrankenPHP 的开发者介绍它的核心特性、六种主流安装方式安装脚本、静态二进制、rpm/deb 包、Docker、Homebrew、基础使用命令php-server与php-cli并给出完整的官方文档导航帮助读者快速选型、安装并启动第一个 PHP 应用。一、FrankenPHP 是什么从仓库根目录的 README.md 与日语版首页 docs/ja/README.md 可以看出FrankenPHP 的核心定位如下基于 CaddyFrankenPHP 直接复用 Caddy Web 服务器作为 HTTP 层因此天然继承自动 HTTPS、HTTP/2、HTTP/3 等生产级能力无需额外配置反向代理。面向 PHP 应用它可以承载任何 PHP 应用通过官方文档所述的 Worker 模式官方集成可以显著加速 Laravel、Symfony 等框架项目。内置高级特性包括 Early Hints103 状态码、Worker 模式、基于 Mercure 的实时功能、自动 HTTPS、HTTP/2、HTTP/3 等。可作为 Go 库嵌入FrankenPHP 同时是一个独立的 Go 库允许你使用标准库net/http将 PHP 嵌入任意 Go 应用。从仓库结构看其 Go 侧实现由根目录的 frankenphp.go、worker.go、threadworker.go、scaling.go 等文件构成PHP 侧桥接代码位于 frankenphp.c、frankenphp.h而 Caddy 模块注册与命令入口位于 caddy 目录最终可执行文件入口为 caddy/frankenphp/main.go。提示Windows 用户请使用 WSL 来运行 FrankenPHP。二、安装方式FrankenPHP 提供多种安装途径覆盖 Linux、macOS 与容器环境。下表汇总了各方式的适用场景安装方式适用系统扩展管理安装脚本Linux/macOS自动检测不可额外安装扩展静态二进制Linux/macOS开发用途不可额外安装扩展rpm 包使用dnf的系统Fedora/RHEL 系dnf或 PIEdeb 包使用apt的系统Debian/Ubuntu 系apt或 PIEDocker任意支持 Docker 的系统自定义镜像构建HomebrewmacOS/LinuxPIE1. 安装脚本在终端执行以下命令脚本会自动检测系统与架构并安装匹配的版本curl https://frankenphp.dev/install.sh | sh仓库根目录的 install.sh 正是该脚本的实现它会通过uname -s/uname -m判断操作系统与架构Linux 的aarch64/x86_64并优先检测dnf、apt-get等包管理器将 FrankenPHP 安装为对应发行版的原生软件包否则回退到直接下载预编译静态二进制到当前目录可通过BIN_DIR环境变量指定安装目录。2. 静态二进制官方为 Linux 与 macOS 提供面向开发用途的静态 FrankenPHP 二进制内置 PHP 8.4 及主要 PHP 扩展下载地址官方 Releases 页面。扩展说明常用扩展已内置在二进制中无法再安装额外的 PHP 扩展静态二进制场景下PHP 扩展必须编译进二进制本体。3. rpm 包dnf 系统面向所有使用dnf的系统安装步骤如下sudo dnf install https://rpm.henderkes.com/static-php-1-0.noarch.rpm sudo dnf module enable php-zts:static-8.4 # 8.2-8.5 可用 sudo dnf install frankenphp扩展安装sudo dnf install php-zts-extension非默认扩展使用 PIE 安装sudo dnf install pie-zts sudo pie-zts install asgrim/example-pie-extension安装后systemd 服务使用的 Caddyfile 位于/etc/frankenphp/Caddyfilephp.ini位于/etc/php-zts/php.ini详见 install.sh 中的安装输出。4. deb 包apt 系统面向所有使用apt的系统先添加官方仓库再安装sudo curl -fsSL https://key.henderkes.com/static-php.gpg -o /usr/share/keyrings/static-php.gpg \ echo deb [signed-by/usr/share/keyrings/static-php.gpg] https://deb.henderkes.com/ stable main | sudo tee /etc/apt/sources.list.d/static-php.list \ sudo apt update sudo apt install frankenphp扩展安装sudo apt install php-zts-extension非默认扩展使用 PIEsudo apt install pie-zts sudo pie-zts install asgrim/example-pie-extension5. Docker官方 Docker 镜像一行即可启动docker run -v .:/app/public \ -p 80:80 -p 443:443 -p 443:443/udp \ dunglas/frankenphp将当前目录挂载到容器的/app/public作为站点根目录映射 80/443 端口443/udp 用于 HTTP/3启动后浏览器访问https://localhost即可看到欢迎页。[!TIP] 请使用https://localhost而非https://127.0.0.1以便接受自签名证书。如需更换域名请设置SERVER_NAME环境变量。6. HomebrewmacOS 与 Linux 均可通过 Homebrew 安装brew install dunglas/frankenphp/frankenphp扩展安装使用 PIE。三、基础使用两个核心命令FrankenPHP 提供两条开箱即用的命令php-server生产可用的 PHP Web 服务器与php-cliCLI 脚本执行器。1. 提供静态与 PHP 文件服务php-server在当前目录提供内容服务frankenphp php-server该命令在 caddy/php-server.go 中注册支持以下参数参数简写作用--domainexample.com-d指定域名同时启用 HTTPS并切换默认监听端口为 443--rootpath-r站点根目录--listenaddr-l自定义监听地址--worker/path/to/worker.php[,nb-workers]-w启用 Worker 模式可多次指定--watch[glob-pattern]—监听文件变化并重启 Worker可重复指定--access-log-a开启访问日志--debug-v开启详细调试日志--mercure-m启用内置 Mercure.rocks hub--no-compress—关闭 Zstandard、Brotli、Gzip 压缩从源码实现可以看到其默认行为未指定--listen时若无域名则监听:80有域名则监听 443HTTPS未指定--root且处于嵌入模式时回退到public/自动构建路由目录请求重定向308→ index 文件重写 →*.php交给 FrankenPHP 处理 → 其余资源交给file_server默认开启 zstd/br/gzip 压缩除非--no-compress。2. 执行命令行脚本php-clifrankenphp php-cli /path/to/your/script.php该命令在 caddy/php-cli.go 中注册行为与 PHP CLI SAPI 类似它会保留argv语义第 0 个参数为程序自身并将脚本执行交给 cli.go 中的ExecuteScriptCLI最终返回脚本的退出状态码。3. 作为系统服务运行通过 deb/rpm 包安装后可用 systemd 管理服务sudo systemctl start frankenphp仓库中的 package/debian/frankenphp.service 与 package/rhel/frankenphp.service 展示了服务配置要点启动前先执行frankenphp validate --config /etc/frankenphp/Caddyfile校验配置以frankenphp专用用户运行工作目录为/var/lib/frankenphp通过AmbientCapabilitiesCAP_NET_BIND_SERVICE仅授予绑定 80/443 端口所需的最小权限配置了ProtectHome、ProtectSystem、PrivateTmp等加固选项热重载sudo systemctl reload frankenphp对应frankenphp reload --config ... --force。Alpine 的 OpenRC 初始化脚本 package/alpine/frankenphp.openrc 提供了等价的启停与重载逻辑。四、快速上手示例安装后在任意包含 PHP 文件的目录启动服务frankenphp php-server打开http://localhost若设置了域名则访问对应 HTTPS 地址即可访问站点。仓库根目录的 testdata/index.php 与 package/content/index.php 可作为最简单的 PHP 入口文件参考。若需要更精细的控制可通过 Caddyfile 配置。仓库提供了两个现成模板简化版示例配置 caddy/frankenphp/Caddyfile包含php_server站点块、SERVER_NAME/SERVER_ROOT等环境变量占位、可选的 Mercure/Vulcain 模块默认注释、以及import Caddyfile.d/*.caddyfile扩展机制发行版安装默认使用的 package/Caddyfile。五、官方文档导航日语版 README 提供了完整的文档索引对应仓库 docs 目录中的同名文档主题文档仓库路径经典模式classicdocs/classic.mdWorker 模式docs/worker.mdEarly Hints103 状态码docs/early-hints.md实时功能Mercuredocs/mercure.md大静态文件高效传输X-Sendfiledocs/x-sendfile.md配置Caddyfile、php.ini、环境变量docs/config.mdDocker 镜像docs/docker.md生产环境部署docs/production.md性能优化docs/performance.md独立可执行 PHP 应用embeddocs/embed.md静态二进制构建docs/static.md从源码编译docs/compile.md监控metricsdocs/metrics.mdLaravel 集成docs/laravel.md已知问题docs/known-issues.md贡献与调试docs/CONTRIBUTING.md此外日语版 README 还列出了社区提供的框架示例与骨架项目Symfony、API Platform、Laravel、Sulu、WordPress、Drupal、Joomla、TYPO3、Magento2 等可作为落地实践的参考起点。六、进阶指引从入门到源码当你已经能成功启动 FrankenPHP 后可按以下路径继续深入了解 Worker 模式阅读 docs/worker.md 与 worker.go理解应用常驻内存、跨请求复用的原理掌握完整配置阅读 docs/config.md掌握 Caddyfile 中php_server/php指令、frankenphp全局块、php_ini、环境变量注入等全部配置手段阅读 Caddy 模块源码caddy/module.go 定义了 FrankenPHP 的 Caddy 模块php_server、php、worker 配置解析caddy/caddy.go 负责模块注册与生命周期探索 Go 库用法若要把 PHP 嵌入自己的 Go 服务可参考 frankenphp.go 的导出 API 与 README.md 中的 Go 库示例。结语FrankenPHP 把 Caddy 的自动 HTTPS、HTTP/2/3、Early Hints 与 PHP 应用运行时合二为一提供了从一行命令php-server/php-cli到完整 Caddyfile 配置的渐进式使用路径。无论你是想在开发环境快速起一个 PHP 站点还是在生产环境部署 Laravel/Symfony 并启用 Worker 模式都可以从本文的安装与启动步骤出发再按文档导航深入对应主题。【免费下载链接】frankenphp The modern PHP app server项目地址: https://gitcode.com/GitHub_Trending/fr/frankenphp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表