FrankenPHP,Caddy 以及 Mercure 和 Vulcain 模块可以使用 Caddy 支持的格式 进行配置。
在 Docker 镜像中,Caddyfile
位于 /etc/caddy/Caddyfile
。
您也可以像往常一样使用 php.ini
配置 PHP。
在 Docker 镜像中,默认不存在 php.ini
,您可以手动创建它或从官方模板中复制。
FROM dunglas/frankenphp
# 开发:
RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini
# 生产:
RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
要注册 FrankenPHP 执行器,必须设置 frankenphp
全局选项,然后可以在站点块中使用 php_server
或 php
HTTP 指令 来为您的 PHP 应用程序提供服务。
最小示例:
{
# 启用 FrankenPHP
frankenphp
}
localhost {
# 启用压缩(可选)
encode zstd br gzip
# 执行当前目录中的 PHP 文件并提供资产
php_server
}
或者,可以在全局选项下指定要创建的线程数和要从服务器启动的 worker 脚本。
{
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:
{
frankenphp {
worker /path/to/app/public/index.php <num>
worker /path/to/other/public/index.php <num>
}
}
app.example.com {
root * /path/to/app/public
php_server
}
other.example.com {
root * /path/to/other/public
php_server
}
# ...
通常你只需要 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> # 设置额外的环境变量,可以设置多个环境变量。
}
以下环境变量可用于在 Caddyfile
中注入 Caddy 指令,而无需对其进行修改:
SERVER_NAME
: 更改 要监听的地址,提供的主机名也将用于生成的 TLS 证书CADDY_GLOBAL_OPTIONS
: 注入 全局选项FRANKENPHP_CONFIG
: 在 frankenphp
指令下注入配置要加载 其他 PHP INI 配置文件,
可以使用 PHP_INI_SCAN_DIR
环境变量。
设置后,PHP 将加载给定目录中存在 .ini
扩展名的所有文件。
使用 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