尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

FrankenPHP 快速上手指南:安装、运行与现代 PHP 应用服务器入门

FrankenPHP 快速上手指南:安装、运行与现代 PHP 应用服务器入门 FrankenPHP 快速上手指南安装、运行与现代 PHP 应用服务器入门【免费下载链接】frankenphp The modern PHP app server项目地址: https://gitcode.com/GitHub_Trending/fr/frankenphp本文基于仓库中的俄语版项目主页docs/ru/README.md整理成文并结合仓库源码与配置对关键命令和实现细节进行扩充。FrankenPHP 是一个构建在 Caddy Web 服务器之上的现代 PHP 应用服务器本文介绍其核心特性、全平台安装方式、基础使用方法php-server、php-cli、systemd 服务并顺带梳理配置入口与文档导航帮助读者在 10 分钟内完成从零到可运行的 PHP 应用部署。什么是 FrankenPHPFrankenPHP 是一个现代 PHP 应用服务器底层基于 Caddy Web 服务器构建。它不是一个普通的 PHP 运行环境而是将 PHP 直接以 SAPI 形式嵌入 Go 编写的服务器进程为 PHP 应用带来一系列超能力Early HintsHTTP 103 状态码在完整响应生成前提前推送资源提示显著降低首屏等待时间Worker 模式PHP 应用常驻内存请求无需重复初始化框架与容器官方针对 Laravel 和 Symfony 提供了开箱即用的集成Real-time 能力内置 Mercure 协议集线器支持 Server-Sent EventsSSE等实时推送场景自动 HTTPS借助 Caddy 内置的证书管理能力自动申请、续期 TLS 证书HTTP/2 与 HTTP/3 支持现代传输协议开箱即用热重载hot reload文件变更时自动重启 Worker详见 docs/ru/hot-reload.md。从源码结构可以印证这一架构仓库根目录的 caddy/frankenphp/main.go 是 FrankenPHP 的入口它导入了 Caddy 标准模块、frankenphp/caddy模块以及 Mercure、Vulcain 模块然后调用caddycmd.Main()启动整个服务器。也就是说FrankenPHP 本质上是一个内置了 PHP 运行时与众多增强模块的 Caddy 发行版。此外FrankenPHP 还可以作为独立的 Go 库使用通过net/http标准接口将 PHP 嵌入任意 Go 应用中。仓库根目录的 frankenphp.go 正是这个库的核心包package frankenphp其包注释明确说明它既可以支撑 FrankenPHP 应用服务器本身也可以被任何 Go 程序复用。FrankenPHP 兼容任何 PHP 应用无需改动业务代码即可运行对于 Laravel、Symfony 等项目配合 Worker 模式可获得显著的性能提升。开始之前平台说明在 Windows 上运行 FrankenPHP官方建议使用WSLWindows Subsystem for Linux环境这与 Linux/macOS 下的安装与使用方式保持一致。安装 FrankenPHP1. 一键安装脚本Linux / macOS复制以下命令到终端执行脚本会自动为当前平台选择并安装合适的版本curl https://frankenphp.dev/install.sh | sh这是最快捷的安装方式适合快速体验。2. 独立静态二进制文件如果不想依赖 Docker 或其他包管理器官方提供 Linux 与 macOS 的独立二进制发行版内置PHP 8.4运行时以及大多数流行的 PHP 扩展例如 opcache、intl、pcntl 等。Linux 二进制为静态链接无需安装任何系统依赖即可在任何发行版上运行。下载地址官方 Releases 页面仓库根目录 README.md 中提供了对应入口。扩展安装限制最常见的扩展已内置其中但无法再向静态二进制中追加安装额外扩展。3. rpm 包dnf 系发行版官方维护者提供适用于所有使用dnf的系统的 rpm 包。安装步骤如下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对于默认源中没有的扩展可以使用 PIEPHP 扩展安装器sudo dnf install pie-zts sudo pie-zts install asgrim/example-pie-extension4. deb 包apt 系发行版官方维护者提供适用于所有使用apt的系统的 deb 包。首先添加仓库并导入签名密钥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. DockerDocker 镜像是目前最流行的运行方式之一一条命令即可启动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://127.0.0.1请使用https://localhost并接受自签名证书。若要更换域名可通过设置环境变量SERVER_NAME实现详见 docs/ru/config.md 的环境变量一节。关于 Docker 镜像的更多用法自定义扩展、版本选择、生产部署可阅读 docs/ru/docker.md。6. HomebrewmacOS / LinuxFrankenPHP 以 Homebrew 软件包形式提供brew install dunglas/frankenphp/frankenphp安装扩展使用 PIEbrew install pie后通过pie命令安装。使用 FrankenPHP启动一个 PHP 服务器在包含 PHP 应用的目录中执行frankenphp php-server该命令会以当前目录为站点根目录启动一个生产可用的 PHP 服务器同时提供静态文件服务。从源码看php-server子命令在 caddy/php-server.go 中注册它支持以下实用参数参数短选项说明--domainexample.com-d指定域名使用公共域名时需先配置好 A/AAAA 记录服务将自动启用 HTTPS监听 443 端口--rootpath-r站点根目录默认当前目录--listenaddr-l自定义监听地址未指定且无域名时默认:80--worker/path/to/worker.php,nb-workers-w启用 Worker 模式的入口脚本可指定线程数量--watch[glob-pattern]无文件变更监听用于开发环境自动重启 Worker--access-log-a开启访问日志--debug-v输出详细的调试日志--mercure-m启用内置的 Mercure.rocks 实时推送集线器--no-compress无禁用 Zstandard、Brotli 与 Gzip 压缩例如带 Worker 模式与访问日志的启动方式frankenphp php-server --workerpublic/index.php,8 --access-log运行 PHP CLI 脚本FrankenPHP 可以直接执行命令行 PHP 脚本行为类似于 PHP CLI SAPIfrankenphp php-cli /path/to/your/script.php该命令实现在 caddy/php-cli.go 中它调用 cli.go 的ExecuteScriptCLI()函数经由 C 桥接frankenphp_execute_script_cli执行脚本并返回退出状态码。因此php-cli可以无缝替代日常的php script.php工作流例如运行 artisan、symfony console 或 Composer 脚本。以 systemd 服务运行deb / rpm通过 deb 或 rpm 包安装后可以注册为系统服务并开机自启sudo systemctl start frankenphp仓库的 package/debian/frankenphp.service 与 package/rhel/frankenphp.service 提供了 systemd 单元文件的参考实现生产环境可在此基础上调整。配置从命令行到 Caddyfilephp-server适合快速启动与演示而完整的生产配置则需要使用 Caddyfile。FrankenPHP 沿用了 Caddy 的配置体系支持 Caddyfile、JSON 等格式默认从当前目录加载Caddyfile也可用-c/--config指定路径。官方在 Docker 镜像与发行版中内置了一份开箱即用的 caddy/frankenphp/Caddyfile它通过环境变量注入配置是理解 FrankenPHP 配置的最佳起点{ skip_install_trust {$CADDY_GLOBAL_OPTIONS} frankenphp { {$FRANKENPHP_CONFIG} } } {$CADDY_EXTRA_CONFIG} {$SERVER_NAME:localhost} { root {$SERVER_ROOT:public/} encode zstd br gzip {$CADDY_SERVER_EXTRA_DIRECTIVES} php_server { #worker /path/to/your/worker.php } } import Caddyfile.d/*.caddyfile其中SERVER_NAME修改监听地址默认localhost同时影响 TLS 证书的签发域名SERVER_ROOT站点根目录默认public/CADDY_GLOBAL_OPTIONS注入 Caddy 全局选项如debugFRANKENPHP_CONFIG注入frankenphp指令下的配置如worker、max_requests等Caddyfile.d/*.caddyfile自动加载的附加站点配置。php_server指令的完整参数root、split_path、resolve_root_symlink、env、file_server off、嵌套worker块等以及全局frankenphp选项num_threads、max_threads、max_wait_time、max_idle_time、max_requests、php_ini、worker请查阅完整的俄文配置文档 docs/ru/config.md。那里还覆盖了watch文件监听、Worker 路径匹配match、按请求数重启线程max_requests、PHP_INI_SCAN_DIR与php_ini指令、关闭 HTTPS、HTTP/1 全双工、Shell 命令自动补全等进阶主题。架构速览为什么它快从仓库源码可以勾勒出 FrankenPHP 的技术骨架入口统一caddy/frankenphp/main.go 将 Caddy 标准模块、FrankenPHP 模块、Mercure 模块、Vulcain 模块一起编译进同一个二进制最终调用 Caddy 命令行框架启动。请求路由caddy/php-server.go 展示了php-server生成的路由管线目录规范重定向308→ 重写到index.php→ 匹配*.php请求交给php处理器 → 其余交给file_server最外层可选叠加encode压缩与 Mercure 路由。这与 Caddyfile 中php_server指令的展开逻辑route块完全一致。PHP 线程模型FrankenPHP 维护一组常驻 PHP 线程默认数量为 CPU 核数的 2 倍通过num_threads/max_threads/max_idle_time等选项进行伸缩控制Worker 模式下应用代码常驻内存省去每次请求的框架初始化开销。文档导航与生态示例核心功能Worker 模式见 docs/ru/worker.mdEarly Hints 见 docs/ru/early-hints.mdReal-time 见 docs/ru/mercure.md配置与部署docs/ru/config.md、docs/ru/docker.md、docs/ru/production.md、docs/ru/performance.md构建与嵌入独立应用打包见 docs/ru/embed.md静态二进制见 docs/ru/static.md源码编译见 docs/ru/compile.md框架集成Laravel 见 docs/ru/laravel.mdSymfony 见 docs/symfony.mdWordPress 见 docs/wordpress.md已知问题docs/ru/known-issues.md内部架构总览英文docs/internals.md社区中还活跃着大量基于 FrankenPHP 的项目骨架覆盖 Sulu、Drupal、Joomla、TYPO3、API Platform 等生态仓库根目录 README.md 中列出了完整清单可作为选型参考。总结FrankenPHP 将 Caddy 的生产级 Web 服务器能力与常驻内存的 PHP 运行时合二为一一条php-server命令即可得到带自动 HTTPS、HTTP/2/3、压缩与 Worker 模式的完整服务器php-cli则无缝衔接命令行工作流deb/rpm/Docker/Homebrew 多通道安装让各平台用户都能快速上手。若需深入生产级调优请以 docs/ru/config.md 与 docs/ru/worker.md 为下一站继续探索。【免费下载链接】frankenphp The modern PHP app server项目地址: https://gitcode.com/GitHub_Trending/fr/frankenphp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表