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
Caddyfile 配置
要注册FrankenPHP执行器,必须设置frankenphp
全局选项,然后在站点块中使用php_server
或php
HTTP指令来服务你的PHP应用程序。
最小配置示例:
{
# 启用FrankenPHP
frankenphp
# 配置指令执行的顺序
order php_server before file_server
}
localhost {
# 启用压缩(可选)
encode zstd br gzip
# 执行当前目录中的PHP文件并服务资源
php_server
}
你也可以在全局选项下指定要创建的线程数和随服务器启动的工作脚本。
{
frankenphp {
num_threads <num_threads> # 设置要启动的PHP线程数。默认值:可用CPU数量的2倍。
worker {
file <path> # 设置工作脚本的路径。
num <num> # 设置要启动的PHP线程数,默认为可用CPU数量的2倍。
env <key> <value> # 为给定的值设置额外的环境变量。可以多次指定以设置多个环境变量。
}
}
}
# ...
或者,你可以使用worker
选项的单行简写形式:
{
frankenphp {
worker <file> <num>
}
}
# ...
如果你在同一台服务器上服务多个应用程序,也可以定义多个工作进程:
{
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
# 如果请求的文件不存在,则尝试索引文件
@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
指令下注入配置
对于FPM和CLI SAPIs,默认情况下$_SERVER
超全局变量会暴露环境变量。
variables_order
PHP指令的S
值始终等同于ES
,不管E
在该指令中的其他位置如何。
PHP配置
要加载附加的PHP配置文件,可以使用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