FrankenPHP,Caddy 以及 Mercure 和 Vulcain 模块可以使用 Caddy 支持的格式 进行配置。
在Docker 映像 中,Caddyfile 位于 /etc/frankenphp/Caddyfile。
静态二进制文件会在启动时所在的目录中查找 Caddyfile。
PHP 本身可以使用 php.ini 文件进行配置。
PHP 解释器将在以下位置查找:
Docker:
- php.ini:
/usr/local/etc/php/php.ini默认情况下不提供 php.ini。 - 附加配置文件:
/usr/local/etc/php/conf.d/*.ini - php 扩展:
/usr/local/lib/php/extensions/no-debug-zts-<YYYYMMDD>/ - 您应该复制 PHP 项目提供的官方模板:
FROM dunglas/frankenphp
# 生产:
RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
# 开发:
RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.iniFrankenPHP 安装 (.rpm 或 .deb):
- php.ini:
/etc/frankenphp/php.ini默认情况下提供带有生产预设的 php.ini 文件。 - 附加配置文件:
/etc/frankenphp/php.d/*.ini - php 扩展:
/usr/lib/frankenphp/modules/
静态二进制:
- php.ini: 执行
frankenphp run或frankenphp php-server的目录,然后是/etc/frankenphp/php.ini - 附加配置文件:
/etc/frankenphp/php.d/*.ini - php 扩展: 无法加载
- 复制PHP 源代码中提供的
php.ini-production或php.ini-development中的一个。
可以在站点块中使用 php_server 或 php HTTP 指令 来为您的 PHP 应用程序提供服务。
最小示例:
localhost {
# 启用压缩(可选)
encode zstd br gzip
# 执行当前目录中的 PHP 文件并提供资产
php_server
}您也可以使用全局选项显式配置 FrankenPHP:
frankenphp 全局选项 可用于配置 FrankenPHP。
{
frankenphp {
num_threads <num_threads> # 设置要启动的 PHP 线程数。默认值:可用 CPU 数量的 2 倍。
worker {
file <path> # 设置 worker 脚本的路径。
num <num> # 设置要启动的 PHP 线程数,默认为可用 CPU 数的 2 倍。
env <key> <value> # 将额外的环境变量设置为给定值。可以为多个环境变量多次指定。
}
}
}
# ...或者,您可以使用 worker 选项的一行缩写形式:
{
frankenphp {
worker <file> <num>
}
}
# ...Worker 块也可以在 php 或 php_server 块内定义。在这种情况下,worker 继承父指令的环境变量和根路径,并且只能由该特定域访问:
{
frankenphp
}
example.com {
root /path/to/app
php_server {
root <path>
worker {
file <path, 可以相对于 root>
num <num>
env <key> <value>
watch <path>
name <name>
}
}
}如果在同一服务器上运行多个应用,还可以定义多个 worker:
app.example.com {
php_server {
root /path/to/app/public
worker index.php <num>
}
}
other.example.com {
php_server {
root /path/to/other/public
worker index.php <num>
}
}
# ...通常你只需要 php_server 指令,
但如果要完全控制,则可以使用较低级别的 php 指令:
使用 php_server 指令等效于以下配置:
route {
# 为目录请求添加尾部斜杠
@canonicalPath {
file {path}/index.php
not path */
}
redir @canonicalPath {path}/ 308
# 如果请求的文件不存在,则尝试 index 文件
@indexFiles file {
try_files {path} {path}/index.php index.php
split_path .php
}
rewrite @indexFiles {http.matchers.file.relative}
# FrankenPHP!
@phpFiles path *.php
php @phpFiles
file_server
}php_server 和 php 指令具有以下选项:
php_server [<matcher>] {
root <directory> # 设置站点的根目录。默认值:`root` 指令。如果未指定
split_path <delim...> # 设置用于将 URI 拆分为两部分的子字符串。第一个匹配的子字符串将用于从路径中拆分“路径信息”。第一个部分以匹配的子字符串为后缀,并将假定为实际资源(CGI 脚本)名称。第二部分将设置为PATH_INFO,供脚本使用。默认值:`.php`
resolve_root_symlink false # 禁用将 `root` 目录在符号链接时将其解析为实际值(默认启用)。
env <key> <value> # 设置额外的环境变量,可以设置多个环境变量。
file_server off # 禁用内置的 file_server 指令。
worker { # 创建特定于此服务器的 worker。可以为多个 worker 多次指定。
file <path> # 设置 worker 脚本的路径,可以相对于 php_server 根目录
num <num> # 设置要启动的 PHP 线程数,默认为可用 CPU 数的 2 倍
name <name> # 为 worker 设置名称,用于日志和指标。默认值:worker 文件的绝对路径。在 php_server 块中定义时始终以 m# 开头。
watch <path> # 设置要监视文件更改的路径。可以为多个路径多次指定。
env <key> <value> # 将额外的环境变量设置为给定值。可以为多个环境变量多次指定。此 worker 的环境变量也从 php_server 父级继承,但可以在此处覆盖。
}
worker <other_file> <num> # 也可以像在全局 frankenphp 块中一样使用简短形式。
}以下环境变量可用于在 Caddyfile 中注入 Caddy 指令,而无需对其进行修改:
SERVER_NAME: 更改 要监听的地址,提供的主机名也将用于生成的 TLS 证书CADDY_GLOBAL_OPTIONS: 注入 全局选项FRANKENPHP_CONFIG: 在frankenphp指令下注入配置
您还可以使用 frankenphp 块中的 php_ini 指令更改 PHP 配置:
{
frankenphp {
php_ini memory_limit 256M
# 或者
php_ini {
memory_limit 256M
max_execution_time 15
}
}
}要加载 其他 PHP INI 配置文件,
可以使用 PHP_INI_SCAN_DIR 环境变量。
设置后,PHP 将加载给定目录中存在 .ini 扩展名的所有文件。
php-server 命令是启动生产就绪 PHP 服务器的便捷方式。它特别适用于快速部署、演示、开发或运行嵌入式应用。
frankenphp php-server [--domain <example.com>] [--root <path>] [--listen <addr>] [--worker /path/to/worker.php<,nb-workers>] [--watch <paths...>] [--access-log] [--debug] [--no-compress] [--mercure]--domain,-d: 提供文件的域名。如果指定,服务器将使用 HTTPS 并自动获取 Let's Encrypt 证书。--root,-r: 站点根目录的路径。如果未指定并使用嵌入式应用,默认将使用 embedded_app/public 目录。--listen,-l: 绑定监听器的地址。默认为:80,如果指定了域名则为:443。--worker,-w: 要运行的 worker 脚本。可以多次指定以运行多个 worker。--watch: 监视文件更改的目录。可以多次指定以监视多个目录。--access-log,-a: 启用访问日志。--debug,-v: 启用详细调试日志。--mercure,-m: 启用内置的 Mercure.rocks hub。--no-compress: 禁用 Zstandard、Brotli 和 Gzip 压缩。
使用当前目录作为文档根目录启动服务器:
frankenphp php-server --root ./启动启用 HTTPS 的服务器:
frankenphp php-server --domain example.com启动带有 worker 的服务器:
frankenphp php-server --worker public/index.php使用 Docker 镜像时,将 CADDY_GLOBAL_OPTIONS 环境变量设置为 debug 以启用调试模式:
docker run -v $PWD:/app/public \
-e CADDY_GLOBAL_OPTIONS=debug \
-p 80:80 -p 443:443 -p 443:443/udp \
dunglas/frankenphp