diff --git a/docs/cn/config.md b/docs/cn/config.md index 3b46811251..e451c27cbb 100644 --- a/docs/cn/config.md +++ b/docs/cn/config.md @@ -1,17 +1,35 @@ # 配置 -FrankenPHP、Caddy 以及 Mercure 和 Vulcain 模块可以使用 [Caddy 支持的格式](https://caddyserver.com/docs/getting-started#your-first-config) 进行配置。 +FrankenPHP、Caddy 以及 [Mercure](mercure.md) 和 [Vulcain](https://vulcain.rocks) 模块可以使用 [Caddy 支持的格式](https://caddyserver.com/docs/getting-started#your-first-config) 进行配置。 -在 [Docker 镜像](docker.md) 中,`Caddyfile` 位于 `/etc/frankenphp/Caddyfile`。 -静态二进制文件也会在执行 `frankenphp run` 命令的目录中查找 `Caddyfile`。 -你可以使用 `-c` 或 `--config` 选项指定自定义路径。 +最常见的格式是 `Caddyfile`,它是一种简单、易读的文本格式。默认情况下,FrankenPHP 会在当前目录中查找 `Caddyfile`。你可以使用 `-c` 或 `--config` 选项指定自定义路径。 -PHP 本身可以[使用 `php.ini` 文件](https://www.php.net/manual/zh/configuration.file.php)进行配置。 +以下是用于服务 PHP 应用程序的最小 `Caddyfile` 示例: -根据你的安装方法,PHP 解释器将在上述位置查找配置文件。 +```caddyfile +# 响应的主机名 +localhost + +# 可选:提供文件的目录,否则默认为当前目录 +#root public/ +php_server +``` + +一个更高级的 `Caddyfile`,支持更多功能并提供方便的环境变量,可以在 [FrankenPHP 仓库中](https://github.com/php/frankenphp/blob/main/caddy/frankenphp/Caddyfile)找到,并随 Docker 镜像提供。 + +PHP 本身可以[使用 `php.ini` 文件](https://www.php.net/manual/en/configuration.file.php)进行配置。 + +根据你的安装方法,FrankenPHP 和 PHP 解释器将在以下位置查找配置文件。 ## Docker +FrankenPHP: + +- `/etc/frankenphp/Caddyfile`: 主配置文件 +- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: 自动加载的附加配置文件 + +PHP: + - `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-/` @@ -29,12 +47,24 @@ RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini ## RPM 和 Debian 包 -- `php.ini`: `/etc/frankenphp/php.ini`(默认情况下提供带有生产预设的 `php.ini` 文件) -- 附加配置文件: `/etc/frankenphp/php.d/*.ini` -- PHP 扩展: `/usr/lib/frankenphp/modules/` +FrankenPHP: + +- `/etc/frankenphp/Caddyfile`: 主配置文件 +- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: 自动加载的附加配置文件 + +PHP: + +- `php.ini`: `/etc/php-zts/php.ini`(默认情况下提供带有生产预设的 `php.ini` 文件) +- 附加配置文件: `/etc/php-zts/conf.d/*.ini` ## 静态二进制文件 +FrankenPHP: + +- 在当前工作目录: `Caddyfile` + +PHP: + - `php.ini`: 执行 `frankenphp run` 或 `frankenphp php-server` 的目录,然后是 `/etc/frankenphp/php.ini` - 附加配置文件: `/etc/frankenphp/php.d/*.ini` - PHP 扩展: 无法加载,将它们打包在二进制文件本身中 @@ -55,15 +85,15 @@ localhost { } ``` -你还可以使用全局选项显式配置 FrankenPHP: -`frankenphp` [全局选项](https://caddyserver.com/docs/caddyfile/concepts#global-options) 可用于配置 FrankenPHP。 +你还可以使用 `frankenphp` [全局选项](https://caddyserver.com/docs/caddyfile/concepts#global-options) 显式配置 FrankenPHP: ```caddyfile { frankenphp { num_threads # 设置要启动的 PHP 线程数量。默认:可用 CPU 数量的 2 倍。 - max_threads # 限制可以在运行时启动的额外 PHP 线程的数量。默认值:num_threads。可以设置为 'auto'。 + max_threads # 限制可以在运行时启动的额外 PHP 线程的数量。默认值:num_threads。可以设置为 'auto'。 max_wait_time # 设置请求在超时之前可以等待的最大时间,直到找到一个空闲的 PHP 线程。 默认:禁用。 + max_idle_time # 设置一个自动扩展的线程在被停用之前可以空闲的最长时间。默认:5s。 php_ini # 设置一个 php.ini 指令。可以多次使用以设置多个指令。 worker { file # 设置工作脚本的路径。 @@ -79,7 +109,7 @@ localhost { # ... ``` -或者,您可以使用 `worker` 选项的一行简短形式。 +或者,您可以使用 `worker` 选项的一行简短形式: ```caddyfile { @@ -91,7 +121,7 @@ localhost { # ... ``` -如果您在同一服务器上服务多个应用程序,您还可以定义多个工作线程: +如果您在同一服务器上服务多个应用程序,您还可以定义多个工作线程: ```caddyfile app.example.com { @@ -113,12 +143,12 @@ other.example.com { # ... ``` -使用 `php_server` 指令通常是您需要的。 +使用 `php_server` 指令通常是您需要的, 但是如果你需要完全控制,你可以使用更低级的 `php` 指令。 `php` 指令将所有输入传递给 PHP,而不是先检查是否 是一个PHP文件。在[性能页面](performance.md#try_files)中了解更多关于它的信息。 -使用 `php_server` 指令等同于以下配置: +使用 `php_server` 指令等同于以下配置: ```caddyfile route { @@ -152,7 +182,7 @@ php_server [] { file_server off # 禁用内置的 file_server 指令。 worker { # 为此服务器创建特定的worker。可以多次指定以创建多个workers。 file # 设置工作脚本的路径,可以相对于 php_server 根目录 - num # 设置要启动的 PHP 线程数,默认为可用数量的 2 倍 + num # 设置要启动的 PHP 线程数,默认为可用 CPU 数量的 2 倍 name # 为worker设置名称,用于日志和指标。默认值:worker文件的绝对路径。定义在 php_server 块中时,始终以 m# 开头。 watch # 设置要监视文件更改的路径。可以为多个路径多次指定。 env # 设置一个额外的环境变量为给定值。可以多次指定以设置多个环境变量。此工作进程的环境变量也从 php_server 父进程继承,但可以在此处覆盖。 @@ -167,7 +197,7 @@ php_server [] { 由于 workers 只会启动您的应用程序一次并将其保留在内存中, 因此对您的 PHP 文件的任何更改不会立即反映出来。 -Wworkers 可以通过 `watch` 指令在文件更改时重新启动。 +Workers 可以通过 `watch` 指令在文件更改时重新启动。 这对开发环境很有用。 ```caddyfile @@ -181,8 +211,10 @@ Wworkers 可以通过 `watch` 指令在文件更改时重新启动。 } ``` -如果没有指定 `watch` 目录,它将回退到 `./**/*.{php,yaml,yml,twig,env}`, -这将监视启动 FrankenPHP 进程的目录及其子目录中的所有 `.php`、`.yaml`、`.yml`、`.twig` 和 `.env` 文件。 +此功能通常与[热重载](hot-reload.md)结合使用。 + +如果没有指定 `watch` 目录,它将回退到 `./**/*.{env,php,twig,yaml,yml}`, +这将监视启动 FrankenPHP 进程的目录及其子目录中的所有 `.env`、`.php`、`.twig`、`.yaml` 和 `.yml` 文件。 你也可以通过 [shell 文件名模式](https://pkg.go.dev/path/filepath#Match) 指定一个或多个目录: ```caddyfile @@ -213,8 +245,7 @@ Wworkers 可以通过 `watch` 指令在文件更改时重新启动。 如果您想将工作脚本放在公共目录外,可以通过 `match` 指令来实现。 `match` 指令是 `try_files` 的一种优化替代方案,仅在 `php_server` 和 `php` 内部可用。 -以下示例将在公共目录中提供文件(如果存在) -并将请求转发给与路径模式匹配的 worker。 +以下示例将始终在公共目录中提供文件(如果存在),否则会将请求转发给与路径模式匹配的 worker。 ```caddyfile { @@ -229,34 +260,6 @@ Wworkers 可以通过 `watch` 指令在文件更改时重新启动。 } ``` -### 全双工 (HTTP/1) - -在使用HTTP/1.x时,可能希望启用全双工模式,以便在完整主体之前写入响应。 -已被阅读。(例如:WebSocket、服务器发送事件等。) - -这是一个可选配置,需要添加到 `Caddyfile` 中的全局选项中: - -```caddyfile -{ - servers { - enable_full_duplex - } -} -``` - -> [!CAUTION] -> -> 启用此选项可能导致不支持全双工的旧HTTP/1.x客户端死锁。 -> 这也可以通过配置 `CADDY_GLOBAL_OPTIONS` 环境配置来实现: - -```sh -CADDY_GLOBAL_OPTIONS="servers { - enable_full_duplex -}" -``` - -您可以在[Caddy文档](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex)中找到有关此设置的更多信息。 - ## 环境变量 可以使用以下环境变量在不修改 `Caddyfile` 的情况下注入 Caddy 指令: @@ -268,15 +271,13 @@ CADDY_GLOBAL_OPTIONS="servers { 至于 FPM 和 CLI SAPIs,环境变量默认在 `$_SERVER` 超全局中暴露。 -[the `variables_order` PHP 指令](https://www.php.net/manual/en/ini.core.php#ini.variables-order) 的 `S` 值始终等于 `ES`,无论 `E` 在该指令中的其他位置如何。 +`variables_order` PHP 指令中 `S` 的值始终等于 `ES`,无论 `E` 在该指令中的其他位置如何。 ## PHP 配置 -加载[附加的 PHP 配置文件](https://www.php.net/manual/en/configuration.file.php#configuration.file.scan), -`PHP_INI_SCAN_DIR`环境变量可以被使用。 -设置后,PHP 将加载给定目录中所有带有 `.ini` 扩展名的文件。 +为了加载[附加的 PHP 配置文件](https://www.php.net/manual/en/configuration.file.php#configuration.file.scan),可以使用 `PHP_INI_SCAN_DIR` 环境变量。设置后,PHP 将加载给定目录中所有带有 `.ini` 扩展名的文件。 -您还可以通过在 `Caddyfile` 中使用 `php_ini` 指令来更改 PHP 配置: +您还可以通过在 `Caddyfile` 中使用 `php_ini` 指令来更改 PHP 配置: ```caddyfile { @@ -293,6 +294,42 @@ CADDY_GLOBAL_OPTIONS="servers { } ``` +### 禁用 HTTPS + +默认情况下,FrankenPHP 会自动为所有主机名(包括 `localhost`)启用 HTTPS。 +如果你想禁用 HTTPS(例如在开发环境中),你可以将 `SERVER_NAME` 环境变量设置为 `http://` 或 `:80`: + +或者,你可以使用 [Caddy 文档](https://caddyserver.com/docs/automatic-https#activation) 中描述的所有其他方法。 + +如果你想将 HTTPS 与 `127.0.0.1` IP 地址而不是 `localhost` 主机名一起使用,请阅读[已知问题](known-issues.md#using-https127001-with-docker)部分。 + +### 全双工 (HTTP/1) + +在使用 HTTP/1.x 时,可能希望启用全双工模式,以便在整个请求体被读取之前允许写入响应。(例如:[Mercure](mercure.md)、WebSocket、Server-Sent Events 等) + +这是一个可选配置,需要添加到 `Caddyfile` 中的全局选项中: + +```caddyfile +{ + servers { + enable_full_duplex + } +} +``` + +> [!CAUTION] +> +> 启用此选项可能导致不支持全双工的旧 HTTP/1.x 客户端死锁。 +> 这也可以通过 `CADDY_GLOBAL_OPTIONS` 环境变量配置来实现: + +```sh +CADDY_GLOBAL_OPTIONS="servers { + enable_full_duplex +}" +``` + +您可以在[Caddy文档](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex)中找到有关此设置的更多信息。 + ## 启用调试模式 使用Docker镜像时,将`CADDY_GLOBAL_OPTIONS`环境变量设置为`debug`以启用调试模式: @@ -302,4 +339,3 @@ docker run -v $PWD:/app/public \ -e CADDY_GLOBAL_OPTIONS=debug \ -p 80:80 -p 443:443 -p 443:443/udp \ dunglas/frankenphp -``` diff --git a/docs/fr/config.md b/docs/fr/config.md index 7c52cea7cb..be6183c2cf 100644 --- a/docs/fr/config.md +++ b/docs/fr/config.md @@ -1,19 +1,40 @@ # Configuration -FrankenPHP, Caddy ainsi que les modules Mercure et Vulcain peuvent être configurés en utilisant [les formats pris en charge par Caddy](https://caddyserver.com/docs/getting-started#your-first-config). +FrankenPHP, Caddy ainsi que les modules [Mercure](mercure.md) et [Vulcain](https://vulcain.rocks) peuvent être configurés à l'aide [des formats pris en charge par Caddy](https://caddyserver.com/docs/getting-started#your-first-config). -Dans [les images Docker](docker.md), le `Caddyfile` est situé dans `/etc/frankenphp/Caddyfile`. -Le binaire statique cherchera le `Caddyfile` dans le répertoire dans lequel il est démarré. +Le format le plus courant est le `Caddyfile`, un format texte simple et facilement lisible par les humains. +Par défaut, FrankenPHP recherchera un `Caddyfile` dans le répertoire courant. +Vous pouvez spécifier un chemin personnalisé avec l'option `-c` ou `--config`. + +Un `Caddyfile` minimal pour servir une application PHP est présenté ci-dessous : + +```caddyfile +# Le nom d'hôte auquel répondre +localhost + +# Optionnellement, le répertoire à partir duquel servir les fichiers, sinon le répertoire courant sera utilisé par défaut +#root public/ +php_server +``` + +Un `Caddyfile` plus avancé, activant davantage de fonctionnalités et fournissant des variables d'environnement pratiques, est disponible [dans le dépôt FrankenPHP](https://github.com/php/frankenphp/blob/main/caddy/frankenphp/Caddyfile) et avec les images Docker. PHP lui-même peut être configuré [en utilisant un fichier `php.ini`](https://www.php.net/manual/fr/configuration.file.php). -L'interpréteur PHP cherchera dans les emplacements suivants : +Selon votre méthode d'installation, FrankenPHP et l'interpréteur PHP chercheront les fichiers de configuration aux emplacements décrits ci-dessous. -Docker : +## Docker -- php.ini : `/usr/local/etc/php/php.ini` Aucun php.ini n'est fourni par défaut. -- fichiers de configuration supplémentaires : `/usr/local/etc/php/conf.d/*.ini` -- extensions php : `/usr/local/lib/php/extensions/no-debug-zts-/` +FrankenPHP : + +- `/etc/frankenphp/Caddyfile` : le fichier de configuration principal +- `/etc/frankenphp/Caddyfile.d/*.caddyfile` : fichiers de configuration additionnels qui sont chargés automatiquement + +PHP : + +- `php.ini` : `/usr/local/etc/php/php.ini` (aucun `php.ini` n'est fourni par défaut) +- Fichiers de configuration supplémentaires : `/usr/local/etc/php/conf.d/*.ini` +- Extensions PHP : `/usr/local/lib/php/extensions/no-debug-zts-/` - Vous devriez copier un modèle officiel fourni par le projet PHP : ```dockerfile @@ -26,17 +47,29 @@ 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.ini ``` -Installation de FrankenPHP (.rpm ou .deb) : +## Packages RPM et Debian -- php.ini : `/etc/frankenphp/php.ini` Un fichier php.ini avec des préréglages de production est fourni par défaut. -- fichiers de configuration supplémentaires : `/etc/frankenphp/php.d/*.ini` -- extensions php : `/usr/lib/frankenphp/modules/` +FrankenPHP : + +- `/etc/frankenphp/Caddyfile` : le fichier de configuration principal +- `/etc/frankenphp/Caddyfile.d/*.caddyfile` : fichiers de configuration additionnels qui sont chargés automatiquement -Binaire statique : +PHP : -- php.ini : Le répertoire dans lequel `frankenphp run` ou `frankenphp php-server` est exécuté, puis `/etc/frankenphp/php.ini` +- `php.ini` : `/etc/php-zts/php.ini` (un fichier `php.ini` avec des préréglages de production est fourni par défaut) +- fichiers de configuration supplémentaires : `/etc/php-zts/conf.d/*.ini` + +## Binaire statique + +FrankenPHP : + +- Dans le répertoire de travail actuel : `Caddyfile` + +PHP : + +- `php.ini` : Le répertoire dans lequel `frankenphp run` ou `frankenphp php-server` est exécuté, puis `/etc/frankenphp/php.ini` - fichiers de configuration supplémentaires : `/etc/frankenphp/php.d/*.ini` -- extensions php : ne peuvent pas être chargées +- Extensions PHP : ne peuvent pas être chargées, intégrez-les au binaire lui-même - copiez l'un des fichiers `php.ini-production` ou `php.ini-development` fournis [dans les sources de PHP](https://github.com/php/php-src/). ## Configuration du Caddyfile @@ -47,44 +80,44 @@ Exemple minimal : ```caddyfile localhost { - # Activer la compression (optionnel) - encode zstd br gzip - # Exécuter les fichiers PHP dans le répertoire courant et servir les assets - php_server + # Activer la compression (optionnel) + encode zstd br gzip + # Exécuter les fichiers PHP dans le répertoire courant et servir les assets + php_server } ``` -Vous pouvez également configurer explicitement FrankenPHP en utilisant l'option globale : -L'[option globale](https://caddyserver.com/docs/caddyfile/concepts#global-options) `frankenphp` peut être utilisée pour configurer FrankenPHP. +Vous pouvez également configurer explicitement FrankenPHP en utilisant l'[option globale](https://caddyserver.com/docs/caddyfile/concepts#global-options) `frankenphp` : ```caddyfile { - frankenphp { - num_threads # Définit le nombre de threads PHP à démarrer. Par défaut : 2x le nombre de CPUs disponibles. - max_threads # Limite le nombre de threads PHP supplémentaires qui peuvent être démarrés au moment de l'exécution. Valeur par défaut : num_threads. Peut être mis à 'auto'. - max_wait_time # Définit le temps maximum pendant lequel une requête peut attendre un thread PHP libre avant d'être interrompue. Valeur par défaut : désactivé. - php_ini Définit une directive php.ini. Peut être utilisé plusieurs fois pour définir plusieurs directives. - worker { - file # Définit le chemin vers le script worker. - num # Définit le nombre de threads PHP à démarrer, par défaut 2x le nombre de CPUs disponibles. - env # Définit une variable d'environnement supplémentaire avec la valeur donnée. Peut être spécifié plusieurs fois pour régler plusieurs variables d'environnement. - watch # Définit le chemin d'accès à surveiller pour les modifications de fichiers. Peut être spécifié plusieurs fois pour plusieurs chemins. - name # Définit le nom du worker, utilisé dans les journaux et les métriques. Défaut : chemin absolu du fichier du worker - max_consecutive_failures # Définit le nombre maximum d'échecs consécutifs avant que le worker ne soit considéré comme défaillant, -1 signifie que le worker redémarre toujours. Par défaut : 6. - } - } + frankenphp { + num_threads # Définit le nombre de threads PHP à démarrer. Par défaut : 2x le nombre de CPUs disponibles. + max_threads # Limite le nombre de threads PHP supplémentaires qui peuvent être démarrés au moment de l'exécution. Valeur par défaut : num_threads. Peut être mis à 'auto'. + max_wait_time # Définit le temps maximum pendant lequel une requête peut attendre un thread PHP libre avant d'être interrompue. Valeur par défaut : désactivé. + max_idle_time # Définit le temps maximum pendant lequel un thread auto-dimensionné peut être inactif avant d'être désactivé. Par défaut : 5s. + php_ini # Définit une directive php.ini. Peut être utilisé plusieurs fois pour définir plusieurs directives. + worker { + file # Définit le chemin vers le script worker. + num # Définit le nombre de threads PHP à démarrer, par défaut 2x le nombre de CPUs disponibles. + env # Définit une variable d'environnement supplémentaire avec la valeur donnée. Peut être spécifié plusieurs fois pour régler plusieurs variables d'environnement. + watch # Définit le chemin d'accès à surveiller pour les modifications de fichiers. Peut être spécifié plusieurs fois pour plusieurs chemins. + name # Définit le nom du worker, utilisé dans les journaux et les métriques. Par défaut : chemin absolu du fichier du worker + max_consecutive_failures # Définit le nombre maximum d'échecs consécutifs avant que le worker ne soit considéré comme défaillant, -1 signifie que le worker redémarre toujours. Par défaut : 6. + } + } } # ... ``` -Vous pouvez également utiliser la forme courte de l'option worker en une seule ligne : +Vous pouvez également utiliser la forme courte de l'option `worker` en une seule ligne : ```caddyfile { - frankenphp { - worker - } + frankenphp { + worker + } } # ... @@ -95,48 +128,48 @@ Vous pouvez aussi définir plusieurs workers si vous servez plusieurs applicatio ```caddyfile app.example.com { root /path/to/app/public - php_server { - root /path/to/app/public # permet une meilleure mise en cache - worker index.php - } + php_server { + root /path/to/app/public # permet une meilleure mise en cache + worker index.php + } } other.example.com { root /path/to/other/public - php_server { - root /path/to/other/public - worker index.php - } + php_server { + root /path/to/other/public + worker index.php + } } # ... ``` -L'utilisation de la directive `php_server` est généralement suffisante, -mais si vous avez besoin d'un contrôle total, vous pouvez utiliser la directive `php`, qui permet un plus grand niveau de finesse dans la configuration. +L'utilisation de la directive `php_server` est généralement ce dont vous avez besoin, +mais si vous avez besoin d'un contrôle total, vous pouvez utiliser la sous-directive `php`. La directive `php` transmet toutes les entrées à PHP, au lieu de vérifier d'abord si -c'est un fichier PHP ou pas. En savoir plus à ce sujet dans la [page performances](performance.md#try_files). +c'est un fichier PHP ou pas. En savoir plus à ce sujet dans la [documentation liée aux performances](performance.md#try_files). Utiliser la directive `php_server` est équivalent à cette configuration : ```caddyfile route { - # Ajoute un slash final pour les requêtes de répertoire - @canonicalPath { - file {path}/index.php - not path */ - } - redir @canonicalPath {path}/ 308 - # Si le fichier demandé n'existe pas, essayer les fichiers 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 + # Ajoute un slash final pour les requêtes de répertoire + @canonicalPath { + file {path}/index.php + not path */ + } + redir @canonicalPath {path}/ 308 + # Si le fichier demandé n'existe pas, essayer les fichiers 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 } ``` @@ -144,19 +177,20 @@ Les directives `php_server` et `php` disposent des options suivantes : ```caddyfile php_server [] { - root # Définit le dossier racine du le site. Par défaut : valeur de la directive `root` parente. - split_path # Définit les sous-chaînes pour diviser l'URI en deux parties. La première sous-chaîne correspondante sera utilisée pour séparer le "path info" du chemin. La première partie est suffixée avec la sous-chaîne correspondante et sera considérée comme le nom réel de la ressource (script CGI). La seconde partie sera définie comme PATH_INFO pour utilisation par le script. Par défaut : `.php` - resolve_root_symlink false # Désactive la résolution du répertoire `root` vers sa valeur réelle en évaluant un lien symbolique, s'il existe (activé par défaut). - env # Définit une variable d'environnement supplémentaire avec la valeur donnée. Peut être spécifié plusieurs fois pour plusieurs variables d'environnement. - file_server off # Désactive la directive file_server intégrée. - worker { # Crée un worker spécifique à ce serveur. Peut être spécifié plusieurs fois pour plusieurs workers. - file # Définit le chemin vers le script worker, peut être relatif à la racine du php_server - num # Définit le nombre de threads PHP à démarrer, par défaut 2x le nombre de CPUs disponibles - name # Définit le nom du worker, utilisé dans les journaux et les métriques. Défaut : chemin absolu du fichier du worker. Commence toujours par m# lorsqu'il est défini dans un bloc php_server. - watch # Définit le chemin d'accès à surveiller pour les modifications de fichiers. Peut être spécifié plusieurs fois pour plusieurs chemins. - env # Définit une variable d'environnement supplémentaire avec la valeur donnée. Peut être spécifié plusieurs fois pour plusieurs variables d'environnement. Les variables d'environnement pour ce worker sont également héritées du parent php_server, mais peuvent être écrasées ici. - } - worker # Peut également utiliser la forme courte comme dans le bloc frankenphp global. + root # Définit le dossier racine du site. Par défaut : la directive `root`. + split_path # Définit les sous-chaînes pour diviser l'URI en deux parties. La première sous-chaîne correspondante sera utilisée pour séparer le "path info" du chemin. La première partie est suffixée avec la sous-chaîne correspondante et sera considérée comme le nom réel de la ressource (script CGI). La seconde partie sera définie comme PATH_INFO pour utilisation par le script. Par défaut : `.php` + resolve_root_symlink false # Désactive la résolution du répertoire `root` vers sa valeur réelle en évaluant un lien symbolique, s'il existe (activé par défaut). + env # Définit une variable d'environnement supplémentaire avec la valeur donnée. Peut être spécifié plusieurs fois pour plusieurs variables d'environnement. + file_server off # Désactive la directive file_server intégrée. + worker { # Crée un worker spécifique à ce serveur. Peut être spécifié plusieurs fois pour plusieurs workers. + file # Définit le chemin vers le script worker, peut être relatif à la racine du php_server + num # Définit le nombre de threads PHP à démarrer, par défaut 2x le nombre de CPU disponibles + name # Définit le nom du worker, utilisé dans les journaux et les métriques. Par défaut : chemin absolu du fichier du worker. Commence toujours par m# lorsqu'il est défini dans un bloc php_server. + watch # Définit le chemin d'accès à surveiller pour les modifications de fichiers. Peut être spécifié plusieurs fois pour plusieurs chemins. + env # Définit une variable d'environnement supplémentaire avec la valeur donnée. Peut être spécifié plusieurs fois pour plusieurs variables d'environnement. Les variables d'environnement pour ce worker sont également héritées du parent php_server, mais peuvent être écrasées ici. + match # fait correspondre le worker à un modèle de chemin. Écrase try_files et ne peut être utilisé que dans la directive php_server. + } + worker # Peut également utiliser la forme courte comme dans le bloc frankenphp global. } ``` @@ -179,9 +213,11 @@ Ceci est utile pour les environnements de développement. } ``` -Si le répertoire `watch` n'est pas précisé, il se rabattra sur `./**/*.{php,yaml,yml,twig,env}`, -qui surveille tous les fichiers `.php`, `.yaml`, `.yml`, `.twig` et `.env` dans le répertoire et les sous-répertoires -où le processus FrankenPHP a été lancé. Vous pouvez également spécifier un ou plusieurs répertoires via une commande +Cette fonctionnalité est souvent utilisée en combinaison avec [le rechargement à chaud](hot-reload.md). + +Si le répertoire `watch` n'est pas précisé, il se rabattra sur `./**/*.{env,php,twig,yaml,yml}`, +qui surveille tous les fichiers `.env`, `.php`, `.twig`, `.yaml` et `.yml` dans le répertoire et les sous-répertoires +où le processus FrankenPHP a été lancé. Vous pouvez également spécifier un ou plusieurs répertoires via un [motif de nom de fichier shell](https://pkg.go.dev/path/filepath#Match) : ```caddyfile @@ -203,36 +239,27 @@ où le processus FrankenPHP a été lancé. Vous pouvez également spécifier un - Si vous avez défini plusieurs workers, ils seront tous redémarrés lorsqu'un fichier est modifié. - Méfiez-vous des fichiers créés au moment de l'exécution (comme les logs) car ils peuvent provoquer des redémarrages intempestifs du worker. -La surveillance des fichiers est basé sur [e-dant/watcher](https://github.com/e-dant/watcher). +La surveillance des fichiers est basée sur [e-dant/watcher](https://github.com/e-dant/watcher). -### Full Duplex (HTTP/1) +## Faire correspondre le Worker à un chemin -Lors de l'utilisation de HTTP/1.x, il peut être souhaitable d'activer le mode full-duplex pour permettre l'écriture d'une réponse avant que le corps entier -n'ait été lu. (par exemple : WebSocket, événements envoyés par le serveur, etc.) +Dans les applications PHP traditionnelles, les scripts sont toujours placés dans le répertoire public. C'est également vrai pour les scripts worker, qui sont traités comme n'importe quel autre script PHP. Si vous souhaitez plutôt placer le script worker en dehors du répertoire public, vous pouvez le faire via la directive `match`. -Il s'agit d'une configuration optionnelle qui doit être ajoutée aux options globales dans le fichier `Caddyfile` : +La directive `match` est une alternative optimisée à `try_files` disponible uniquement à l'intérieur de `php_server` et `php`. L'exemple suivant servira toujours un fichier dans le répertoire public s'il est présent et transmettra sinon la requête au worker correspondant au modèle de chemin. ```caddyfile { - servers { - enable_full_duplex - } + frankenphp { + php_server { + worker { + file /path/to/worker.php # le fichier peut être en dehors du chemin public + match /api/* # toutes les requêtes commençant par /api/ seront traitées par ce worker + } + } + } } ``` -> [!CAUTION] -> -> L'activation de cette option peut entraîner un blocage (deadlock) des anciens clients HTTP/1.x qui ne supportent pas le full-duplex. -> Cela peut aussi être configuré en utilisant la variable d'environnement `CADDY_GLOBAL_OPTIONS` : - -```sh -CADDY_GLOBAL_OPTIONS="servers { - enable_full_duplex -}" -``` - -Vous trouverez plus d'informations sur ce paramètre dans la [documentation Caddy](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex). - ## Variables d'environnement Les variables d'environnement suivantes peuvent être utilisées pour insérer des directives Caddy dans le `Caddyfile` sans le modifier : @@ -242,7 +269,7 @@ Les variables d'environnement suivantes peuvent être utilisées pour insérer d - `CADDY_GLOBAL_OPTIONS` : injecte [des options globales](https://caddyserver.com/docs/caddyfile/options) - `FRANKENPHP_CONFIG` : insère la configuration sous la directive `frankenphp` -Comme pour les SAPI FPM et CLI, les variables d'environnement ne sont exposées par défaut dans la superglobale `$_SERVER`. +Comme pour les SAPI FPM et CLI, les variables d'environnement sont exposées par défaut dans la superglobale `$_SERVER`. La valeur `S` de [la directive `variables_order` de PHP](https://www.php.net/manual/fr/ini.core.php#ini.variables-order) est toujours équivalente à `ES`, que `E` soit défini ailleurs dans cette directive ou non. @@ -269,7 +296,43 @@ Vous pouvez également modifier la configuration de PHP en utilisant la directiv } ``` -## Activer le mode debug +### Désactiver HTTPS + +Par défaut, FrankenPHP activera automatiquement HTTPS pour tous les noms d'hôte, y compris `localhost`. Si vous souhaitez désactiver HTTPS (par exemple dans un environnement de développement), vous pouvez définir la variable d'environnement `SERVER_NAME` à `http://` ou `:80` : + +Alternativement, vous pouvez utiliser toutes les autres méthodes décrites dans la [documentation Caddy](https://caddyserver.com/docs/automatic-https#activation). + +Si vous souhaitez utiliser HTTPS avec l'adresse IP `127.0.0.1` au lieu du nom d'hôte `localhost`, veuillez lire la section [problèmes connus](known-issues.md#using-https127001-with-docker). + +### Full Duplex (HTTP/1) + +Lors de l'utilisation de HTTP/1.x, il peut être souhaitable d'activer le mode full-duplex pour permettre l'écriture d'une réponse avant que le corps entier +n'ait été lu. (par exemple : [Mercure](mercure.md), WebSocket, Server-Sent Events, etc.) + +Il s'agit d'une configuration facultative qui doit être ajoutée aux options globales dans le `Caddyfile` : + +```caddyfile +{ + servers { + enable_full_duplex + } +} +``` + +> [!CAUTION] +> +> L'activation de cette option peut entraîner un blocage (deadlock) des anciens clients HTTP/1.x qui ne supportent pas le full-duplex. +> Cela peut aussi être configuré en utilisant la variable d'environnement `CADDY_GLOBAL_OPTIONS` : + +```sh +CADDY_GLOBAL_OPTIONS="servers { + enable_full_duplex +}" +``` + +Vous trouverez plus d'informations sur ce paramètre dans la [documentation Caddy](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex). + +## Activer le mode Debug Lors de l'utilisation de l'image Docker, définissez la variable d'environnement `CADDY_GLOBAL_OPTIONS` sur `debug` pour activer le mode debug : diff --git a/docs/ja/config.md b/docs/ja/config.md index f11e117a5f..d5323ded83 100644 --- a/docs/ja/config.md +++ b/docs/ja/config.md @@ -1,17 +1,37 @@ # 設定 -FrankenPHP、Caddy、そしてMercureやVulcainモジュールは、[Caddyでサポートされる形式](https://caddyserver.com/docs/getting-started#your-first-config)を使用して設定できます。 +FrankenPHP、Caddy、そして[Mercure](mercure.md)や[Vulcain](https://vulcain.rocks)モジュールは、[Caddyでサポートされる形式](https://caddyserver.com/docs/getting-started#your-first-config)を使用して設定できます。 -[Dockerイメージ](docker.md)では、`Caddyfile`は`/etc/frankenphp/Caddyfile`に配置されています。 -静的バイナリは、`frankenphp run`コマンドを実行したディレクトリ内の`Caddyfile`を参照します。 -また、`-c`または`--config`オプションでカスタムのパスを指定できます。 +最も一般的な形式は`Caddyfile`で、シンプルで人間が読めるテキスト形式です。 +デフォルトでは、FrankenPHPは現在のディレクトリにある`Caddyfile`を探します。 +`-c`または`--config`オプションでカスタムパスを指定できます。 -PHP自体の設定は[`php.ini` ファイルを使用](https://www.php.net/manual/en/configuration.file.php)して行えます。 +PHPアプリケーションを配信するための最小限の`Caddyfile`を以下に示します: -インストール方法に応じて、PHPインタープリターは上記いずれかの場所にある設定ファイルを参照します。 +```caddyfile +# レスポンスするホスト名 +localhost + +# オプションで、ファイルを配信するディレクトリ。指定しない場合は現在のディレクトリがデフォルト +#root public/ +php_server +``` + +より多くの機能を有効にし、便利な環境変数を提供するより高度な`Caddyfile`は、[FrankenPHPリポジトリ](https://github.com/php/frankenphp/blob/main/caddy/frankenphp/Caddyfile)およびDockerイメージに同梱されています。 + +PHP自体は、[`php.ini` ファイルを使用](https://www.php.net/manual/en/configuration.file.php)して設定できます。 + +インストール方法に応じて、FrankenPHPとPHPインタープリターは以下の場所に記載された設定ファイルを探します。 ## Docker +FrankenPHP: + +- `/etc/frankenphp/Caddyfile`: メインの設定ファイル +- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: 自動的にロードされる追加の設定ファイル + +PHP: + - `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-/` @@ -20,25 +40,37 @@ PHP自体の設定は[`php.ini` ファイルを使用](https://www.php.net/manua ```dockerfile FROM dunglas/frankenphp -# 本番環境: +# Production: RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini -# または開発環境: +# Or development: RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini ``` ## RPMおよびDebianパッケージ -- `php.ini`: `/etc/frankenphp/php.ini`(本番環境向けのプリセットの`php.ini`ファイルがデフォルトで提供されます) -- 追加の設定ファイル: `/etc/frankenphp/php.d/*.ini` -- PHP拡張モジュール: `/usr/lib/frankenphp/modules/` +FrankenPHP: + +- `/etc/frankenphp/Caddyfile`: メインの設定ファイル +- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: 自動的にロードされる追加の設定ファイル + +PHP: + +- `php.ini`: `/etc/php-zts/php.ini`(本番環境向けのプリセットの`php.ini`ファイルがデフォルトで提供されます) +- 追加の設定ファイル: `/etc/php-zts/conf.d/*.ini` ## 静的バイナリ +FrankenPHP: + +- 現在の作業ディレクトリ: `Caddyfile` + +PHP: + - `php.ini`: `frankenphp run`または`frankenphp php-server`を実行したディレクトリ内、なければ`/etc/frankenphp/php.ini`を参照 - 追加の設定ファイル: `/etc/frankenphp/php.d/*.ini` - PHP拡張モジュール: ロードできません、バイナリ自体にバンドルする必要があります -- [PHPソース](https://github.com/php/php-src/)で提供される`php.ini-production`または`php.ini-development`のいずれかをコピーしてください +- [PHPソース](https://github.com/php/php-src/)で提供される`php.ini-production`または`php.ini-development`のいずれかをコピーしてください。 ## Caddyfileの設定 @@ -55,8 +87,7 @@ localhost { } ``` -グローバルオプションを使用してFrankenPHPを明示的に設定することもできます: -`frankenphp`の[グローバルオプション](https://caddyserver.com/docs/caddyfile/concepts#global-options)を使用してFrankenPHPを構成できます。 +FrankenPHPは、`frankenphp`の[グローバルオプション](https://caddyserver.com/docs/caddyfile/concepts#global-options)を使用して明示的に設定することもできます: ```caddyfile { @@ -64,6 +95,7 @@ localhost { num_threads # 開始するPHPスレッド数を設定します。デフォルト: 利用可能なCPU数の2倍。 max_threads # 実行時に追加で開始できるPHPスレッドの最大数を制限します。デフォルト: num_threads。 'auto'を設定可能。 max_wait_time # リクエストがタイムアウトする前にPHPのスレッドが空くのを待つ最大時間を設定します。デフォルト: 無効。 + max_idle_time # 自動スケーリングされたスレッドが非アクティブ化されるまでにアイドル状態である最大時間を設定します。デフォルト: 5秒。 php_ini # php.iniのディレクティブを設定します。複数のディレクティブを設定するために何度でも使用できます。 worker { file # ワーカースクリプトのパスを設定します。 @@ -152,7 +184,7 @@ php_server [] { file_server off # 組み込みのfile_serverディレクティブを無効にします。 worker { # このサーバー固有のワーカーを作成します。複数のワーカーに対して複数回指定できます。 file # ワーカースクリプトへのパスを設定します。php_serverのルートからの相対パスとなります。 - num # 起動するPHPスレッド数を設定します。デフォルトは利用可能なスレッド数の 2 倍です。 + num # 起動するPHPスレッド数を設定します。デフォルトは利用可能なCPU数の2倍です。 name # ログとメトリクスで使用されるワーカーの名前を設定します。デフォルト: ワーカーファイルの絶対パス。php_server ブロックで定義されている場合は、常にm#で始まります。 watch # ファイルの変更を監視するパスを設定する。複数のパスに対して複数回指定することができる。 env # 追加の環境変数を指定された値に設定する。複数の環境変数を指定する場合は、複数回指定することができます。このワーカーの環境変数もphp_serverの親から継承されますが、 ここで上書きすることもできます。 @@ -181,8 +213,10 @@ PHPファイルに変更を加えても即座には反映されません。 } ``` -`watch`ディレクトリが指定されていない場合、`./**/*.{php,yaml,yml,twig,env}`にフォールバックします。 -これは、FrankenPHPプロセスが開始されたディレクトリおよびそのサブディレクトリ内のすべての`.php`、`.yaml`、`.yml`、`.twig`、`.env`ファイルすべてを監視します。 +この機能は、[ホットリロード](hot-reload.md)と組み合わせてよく使用されます。 + +`watch`ディレクトリが指定されていない場合、`./**/*.{env,php,twig,yaml,yml}`にフォールバックします。 +これは、FrankenPHPプロセスが開始されたディレクトリおよびそのサブディレクトリ内のすべての`.env`、`.php`、`.twig`、`.yaml`、`.yml`ファイルすべてを監視します。 代わりに、[シェルのファイル名パターン](https://pkg.go.dev/path/filepath#Match)を使用して 1つ以上のディレクトリを指定することもできます: @@ -230,34 +264,6 @@ PHPファイルに変更を加えても即座には反映されません。 } ``` -### フルデュプレックス(HTTP/1) - -HTTP/1.xを使用する場合、全体のボディが読み取られる前にレスポンスを書き込めるようにするため、 -フルデュプレックスモードを有効にすることが望ましい場合があります(例:WebSocket、Server-Sent Eventsなど)。 - -これは明示的に有効化する必要がある設定で、`Caddyfile`のグローバルオプションに追加する必要があります: - -```caddyfile -{ - servers { - enable_full_duplex - } -} -``` - -> [!CAUTION] -> -> このオプションを有効にすると、フルデュプレックスをサポートしない古いHTTP/1.xクライアントでデッドロックが発生する可能性があります。 -> これは`CADDY_GLOBAL_OPTIONS`環境設定を使用しても設定できます: - -```sh -CADDY_GLOBAL_OPTIONS="servers { - enable_full_duplex -}" -``` - -この設定の詳細については、[Caddyドキュメント](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex)をご覧ください。 - ## 環境変数 以下の環境変数を使用することで、`Caddyfile`を直接変更せずにCaddyディレクティブを注入できます: @@ -284,7 +290,7 @@ FPM や CLI SAPI と同様に、環境変数はデフォルトで`$_SERVER`ス frankenphp { php_ini memory_limit 256M - # または + # or php_ini { memory_limit 256M @@ -294,6 +300,43 @@ FPM や CLI SAPI と同様に、環境変数はデフォルトで`$_SERVER`ス } ``` +### HTTPSの無効化 + +デフォルトでは、FrankenPHPは`localhost`を含むすべてのホスト名に対してHTTPSを自動的に有効にします。 +HTTPSを無効にしたい場合(例えば開発環境で)、`SERVER_NAME`環境変数を`http://`または`:80`に設定できます: + +または、[Caddyのドキュメント](https://caddyserver.com/docs/automatic-https#activation)に記載されている他のすべての方法を使用することもできます。 + +`localhost`ホスト名の代わりに`127.0.0.1` IPアドレスでHTTPSを使用したい場合は、[既知の問題](known-issues.md#using-https127001-with-docker)セクションを読んでください。 + +### フルデュプレックス(HTTP/1) + +HTTP/1.xを使用する場合、全体のボディが読み取られる前にレスポンスを書き込めるようにするため、 +フルデュプレックスモードを有効にすることが望ましい場合があります(例:[Mercure](mercure.md)、WebSocket、Server-Sent Eventsなど)。 + +これは明示的に有効化する必要がある設定で、`Caddyfile`のグローバルオプションに追加する必要があります: + +```caddyfile +{ + servers { + enable_full_duplex + } +} +``` + +> [!CAUTION] +> +> このオプションを有効にすると、フルデュプレックスをサポートしない古いHTTP/1.xクライアントでデッドロックが発生する可能性があります。 +> これは`CADDY_GLOBAL_OPTIONS`環境設定を使用しても設定できます: + +```sh +CADDY_GLOBAL_OPTIONS="servers { + enable_full_duplex +}" +``` + +この設定の詳細については、[Caddyドキュメント](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex)をご覧ください。 + ## デバッグモードの有効化 Dockerイメージを使用する場合、`CADDY_GLOBAL_OPTIONS`環境変数に`debug`を設定するとデバッグモードが有効になります: diff --git a/docs/pt-br/config.md b/docs/pt-br/config.md index e36a144d75..fab3b4faf6 100644 --- a/docs/pt-br/config.md +++ b/docs/pt-br/config.md @@ -1,28 +1,42 @@ # Configuração -FrankenPHP, Caddy, bem como os módulos Mercure e Vulcain, podem ser configurados -usando -[os formatos suportados pelo Caddy](https://caddyserver.com/docs/getting-started#your-first-config). - -Nas [imagens Docker](docker.md), o `Caddyfile` está localizado em -`/etc/frankenphp/Caddyfile`. -O binário estático também procurará pelo `Caddyfile` no diretório onde o comando -`frankenphp run` é executado. +FrankenPHP, Caddy, bem como os módulos [Mercure](mercure.md) e [Vulcain](https://vulcain.rocks), podem ser configurados usando [os formatos suportados pelo Caddy](https://caddyserver.com/docs/getting-started#your-first-config). + +O formato mais comum é o `Caddyfile`, que é um formato de texto simples e legível por humanos. +Por padrão, o FrankenPHP procurará por um `Caddyfile` no diretório atual. Você pode especificar um caminho personalizado com a opção `-c` ou `--config`. -O próprio PHP pode ser configurado -[usando um arquivo `php.ini`](https://www.php.net/manual/pt_BR/configuration.file.php). +Um `Caddyfile` mínimo para servir uma aplicação PHP é mostrado abaixo: + +```caddyfile +# The hostname to respond to +localhost + +# Optionally, the directory to serve files from, otherwise defaults to the current directory +#root public/ +php_server +``` + +Um `Caddyfile` mais avançado, que habilita mais recursos e fornece variáveis de ambiente convenientes, é disponibilizado [no repositório FrankenPHP](https://github.com/php/frankenphp/blob/main/caddy/frankenphp/Caddyfile), +e com as imagens Docker. + +O próprio PHP pode ser configurado [usando um arquivo `php.ini`](https://www.php.net/manual/en/configuration.file.php). -Dependendo do seu método de instalação, o interpretador PHP procurará por -arquivos de configuração nos locais descritos acima. +Dependendo do seu método de instalação, o FrankenPHP e o interpretador PHP procurarão por arquivos de configuração nos locais descritos abaixo. ## Docker -- `php.ini`: `/usr/local/etc/php/php.ini` (nenhum `php.ini` é fornecido por - padrão); -- Arquivos de configuração adicionais: `/usr/local/etc/php/conf.d/*.ini`; -- Extensões PHP: `/usr/local/lib/php/extensions/no-debug-zts-/`; -- Você deve copiar um template oficial fornecido pelo projeto PHP: +FrankenPHP: + +- `/etc/frankenphp/Caddyfile`: o arquivo de configuração principal +- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: arquivos de configuração adicionais que são carregados automaticamente + +PHP: + +- `php.ini`: `/usr/local/etc/php/php.ini` (nenhum `php.ini` é fornecido por padrão) +- arquivos de configuração adicionais: `/usr/local/etc/php/conf.d/*.ini` +- extensões PHP: `/usr/local/lib/php/extensions/no-debug-zts-/` +- Você deve copiar um modelo oficial fornecido pelo projeto PHP: ```dockerfile FROM dunglas/frankenphp @@ -36,125 +50,127 @@ RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini ## Pacotes RPM e Debian -- `php.ini`: `/etc/frankenphp/php.ini` (um arquivo `php.ini` com configurações - de produção é fornecido por padrão); -- Arquivos de configuração adicionais: `/etc/frankenphp/php.d/*.ini`; -- Extensões PHP: `/usr/lib/frankenphp/modules/`. +FrankenPHP: + +- `/etc/frankenphp/Caddyfile`: o arquivo de configuração principal +- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: arquivos de configuração adicionais que são carregados automaticamente + +PHP: + +- `php.ini`: `/etc/php-zts/php.ini` (um arquivo `php.ini` com predefinições de produção é fornecido por padrão) +- arquivos de configuração adicionais: `/etc/php-zts/conf.d/*.ini` ## Binário estático -- `php.ini`: O diretório no qual `frankenphp run` ou `frankenphp php-server` é - executado e, em seguida, `/etc/frankenphp/php.ini`; -- Arquivos de configuração adicionais: `/etc/frankenphp/php.d/*.ini`; -- Extensões PHP: não podem ser carregadas, empacote-as no próprio binário; -- Copie um dos arquivos `php.ini-production` ou `php.ini-development` fornecidos - [no código-fonte do PHP](https://github.com/php/php-src/). +FrankenPHP: + +- No diretório de trabalho atual: `Caddyfile` + +PHP: + +- `php.ini`: O diretório no qual `frankenphp run` ou `frankenphp php-server` é executado, e então `/etc/frankenphp/php.ini` +- arquivos de configuração adicionais: `/etc/frankenphp/php.d/*.ini` +- extensões PHP: não podem ser carregadas, inclua-as no próprio binário +- copie um dos arquivos `php.ini-production` ou `php.ini-development` fornecidos [nas fontes do PHP](https://github.com/php/php-src/). ## Configuração do Caddyfile -As [diretivas HTTP](https://caddyserver.com/docs/caddyfile/concepts#directives) -`php_server` ou `php` podem ser usadas dentro dos blocos de site para servir sua -aplicação PHP. +As [diretivas HTTP](https://caddyserver.com/docs/caddyfile/concepts#directives) `php_server` ou `php` podem ser usadas dentro dos blocos de site para servir sua aplicação PHP. Exemplo mínimo: ```caddyfile localhost { - # Habilita compressão (opcional) - encode zstd br gzip - # Executa arquivos PHP no diretório atual e serve assets - php_server + # Habilita compressão (opcional) + encode zstd br gzip + # Executa arquivos PHP no diretório atual e serve assets + php_server } ``` -Você também pode configurar explicitamente o FrankenPHP usando a opção global: -A [opção global](https://caddyserver.com/docs/caddyfile/concepts#global-options) -`frankenphp` pode ser usada para configurar o FrankenPHP. +Você também pode configurar explicitamente o FrankenPHP usando a [opção global](https://caddyserver.com/docs/caddyfile/concepts#global-options) `frankenphp`: ```caddyfile { - frankenphp { - num_threads # Define o número de threads PHP a serem iniciadas. Padrão: 2x o número de CPUs disponíveis. - max_threads # Limita o número de threads PHP adicionais que podem ser iniciadas em tempo de execução. Padrão: num_threads. Pode ser definido como 'auto'. - max_wait_time # Define o tempo máximo que uma requisição pode esperar por uma thread PHP livre antes de atingir o tempo limite. Padrão: disabled. - php_ini # Define uma diretiva php.ini. Pode ser usada várias vezes para definir múltiplas diretivas. - worker { - file # Define o caminho para o worker script. - num # Define o número de threads PHP a serem iniciadas, o padrão é 2x o número de CPUs disponíveis. - env # Define uma variável de ambiente extra para o valor fornecido. Pode ser especificada mais de uma vez para múltiplas variáveis de ambiente. - watch # Define o caminho para monitorar alterações em arquivos. Pode ser especificada mais de uma vez para múltiplos caminhos. - name # Define o nome do worker, usado em logs e métricas. Padrão: caminho absoluto do arquivo do worker. - max_consecutive_failures # Define o número máximo de falhas consecutivas antes do worker ser considerado inoperante. -1 significa que o worker sempre reiniciará. Padrão: 6. - } - } + frankenphp { + num_threads # Define o número de threads PHP a serem iniciadas. Padrão: 2x o número de CPUs disponíveis. + max_threads # Limita o número de threads PHP adicionais que podem ser iniciadas em tempo de execução. Padrão: num_threads. Pode ser definido como 'auto'. + max_wait_time # Define o tempo máximo que uma requisição pode esperar por uma thread PHP livre antes de atingir o tempo limite. Padrão: desabilitado. + max_idle_time # Define o tempo máximo que uma thread autoscaled pode ficar ociosa antes de ser desativada. Padrão: 5s. + php_ini # Define uma diretiva php.ini. Pode ser usada várias vezes para definir múltiplas diretivas. + worker { + file # Define o caminho para o worker script. + num # Define o número de threads PHP a serem iniciadas, o padrão é 2x o número de CPUs disponíveis. + env # Define uma variável de ambiente extra para o valor fornecido. Pode ser especificada mais de uma vez para múltiplas variáveis de ambiente. + watch # Define o caminho para monitorar alterações em arquivos. Pode ser especificada mais de uma vez para múltiplos caminhos. + name # Define o nome do worker, usado em logs e métricas. Padrão: caminho absoluto do arquivo do worker + max_consecutive_failures # Define o número máximo de falhas consecutivas antes do worker ser considerado não saudável. -1 significa que o worker sempre reiniciará. Padrão: 6. + } + } } # ... ``` -Alternativamente, você pode usar a forma abreviada de uma linha da opção -`worker`: +Alternativamente, você pode usar a forma abreviada de uma linha da opção `worker`: ```caddyfile { - frankenphp { - worker - } + frankenphp { + worker + } } # ... ``` -Você também pode definir vários workers se servir várias aplicações no mesmo -servidor: +Você também pode definir múltiplos workers se servir múltiplas aplicações no mesmo servidor: ```caddyfile app.example.com { - root /caminho/para/aplicacao/public - php_server { - root /caminho/para/aplicacao/public # permite melhor armazenamento em cache - worker index.php - } + root /path/to/app/public + php_server { + root /path/to/app/public # permite melhor cache + worker index.php + } } -outra.example.com { - root /caminho/para/outra/aplicacao/public - php_server { - root /caminho/para/outra/aplicacao/public - worker index.php - } +other.example.com { + root /path/to/other/public + php_server { + root /path/to/other/public + worker index.php + } } # ... ``` -Usar a diretiva `php_server` geralmente é o que você precisa, mas se precisar de -controle total, você pode usar a diretiva `php` de mais baixo nível. +Usar a diretiva `php_server` é geralmente o que você precisa, +mas se precisar de controle total, você pode usar a diretiva `php` de mais baixo nível. A diretiva `php` passa toda a entrada para o PHP, em vez de primeiro verificar -se é um arquivo PHP ou não. -Leia mais sobre isso na [página de desempenho](performance.md#try_files). +se é um arquivo PHP ou não. Leia mais sobre isso na [página de desempenho](performance.md#try_files). Usar a diretiva `php_server` é equivalente a esta configuração: ```caddyfile route { - # Adiciona barra final para requisições de diretório - @canonicalPath { - file {path}/index.php - not path */ - } - redir @canonicalPath {path}/ 308 - # Se o arquivo requisitado não existir, tenta os arquivos 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 + # Adiciona barra final para requisições de diretório + @canonicalPath { + file {path}/index.php + not path */ + } + redir @canonicalPath {path}/ 308 + # Se o arquivo requisitado não existir, tenta os arquivos 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 } ``` @@ -162,20 +178,20 @@ As diretivas `php_server` e `php` têm as seguintes opções: ```caddyfile php_server [] { - root # Define a pasta raiz para o site. Padrão: diretiva `root`. - split_path # Define as substrings para dividir o URI em duas partes. A primeira substring correspondente será usada para separar as "informações de caminho" do caminho. A primeira parte é sufixada com a substring correspondente e será assumida como o nome real do recurso (script CGI). A segunda parte será definida como PATH_INFO para o script usar. Padrão: `.php` - resolve_root_symlink false # Desabilita a resolução do diretório `root` para seu valor real avaliando um link simbólico, se houver (habilitado por padrão). - env # Define uma variável de ambiente extra para o valor fornecido. Pode ser especificada mais de uma vez para múltiplas variáveis de ambiente. - file_server off # Desabilita a diretiva interna file_server. - worker { # Cria um worker específico para este servidor. Pode ser especificada mais de uma vez para múltiplos workers. - file # Define o caminho para o worker script, pode ser relativo à raiz do php_server. - num # Define o número de threads PHP a serem iniciadas, o padrão é 2x o número de threads disponíveis. - name # Define o nome do worker, usado em logs e métricas. Padrão: caminho absoluto do arquivo do worker. Sempre começa com m# quando definido em um bloco php_server. - watch # Define o caminho para monitorar alterações em arquivos. Pode ser especificada mais de uma vez para múltiplos caminhos. - env # Define uma variável de ambiente extra para o valor fornecido. Pode ser especificada mais de uma vez para múltiplas variáveis de ambiente. As variáveis de ambiente para este worker também são herdadas do pai do php_server, mas podem ser sobrescritas aqui. - match # Corresponde o worker a um padrão de caminho. Substitui try_files e só pode ser usada na diretiva php_server. - } - worker # Também pode usar a forma abreviada, como no bloco global frankenphp. + root # Define a pasta raiz para o site. Padrão: diretiva `root`. + split_path # Define as substrings para dividir o URI em duas partes. A primeira substring correspondente será usada para separar as "informações de caminho" do caminho. A primeira parte é sufixada com a substring correspondente e será assumida como o nome real do recurso (script CGI). A segunda parte será definida como PATH_INFO para o script usar. Padrão: `.php` + resolve_root_symlink false # Desabilita a resolução do diretório `root` para seu valor real avaliando um link simbólico, se houver (habilitado por padrão). + env # Define uma variável de ambiente extra para o valor fornecido. Pode ser especificada mais de uma vez para múltiplas variáveis de ambiente. + file_server off # Desabilita a diretiva interna file_server. + worker { # Cria um worker específico para este servidor. Pode ser especificada mais de uma vez para múltiplos workers. + file # Define o caminho para o worker script, pode ser relativo à raiz do php_server + num # Define o número de threads PHP a serem iniciadas, o padrão é 2x o número de CPUs disponíveis. + name # Define o nome para o worker, usado em logs e métricas. Padrão: caminho absoluto do arquivo do worker. Sempre começa com m# quando definido em um bloco php_server. + watch # Define o caminho para monitorar alterações em arquivos. Pode ser especificada mais de uma vez para múltiplos caminhos. + env # Define uma variável de ambiente extra para o valor fornecido. Pode ser especificada mais de uma vez para múltiplas variáveis de ambiente. As variáveis de ambiente para este worker também são herdadas do pai do php_server, mas podem ser sobrescritas aqui. + match # Corresponde o worker a um padrão de caminho. Sobrescreve try_files e só pode ser usada na diretiva php_server. + } + worker # Também pode usar a forma abreviada, como no bloco global frankenphp. } ``` @@ -184,145 +200,91 @@ php_server [] { Como os workers inicializam sua aplicação apenas uma vez e a mantêm na memória, quaisquer alterações nos seus arquivos PHP não serão refletidas imediatamente. -Os workers podem ser reiniciados em caso de alterações em arquivos por meio da -diretiva `watch`. +Os workers podem ser reiniciados em caso de alterações em arquivos por meio da diretiva `watch`. Isso é útil para ambientes de desenvolvimento. ```caddyfile { - frankenphp { - worker { - file /caminho/para/aplicacao/public/worker.php - watch - } - } + frankenphp { + worker { + file /path/to/app/public/worker.php + watch + } + } } ``` -Se o diretório `watch` não for especificado, ele usará o valor padrão -`./**/*.{php,yaml,yml,twig,env}`, -que monitora todos os arquivos `.php`, `.yaml`, `.yml`, `.twig` e `.env` no -diretório e subdiretórios onde o processo FrankenPHP foi iniciado. -Você também pode especificar um ou mais diretórios por meio de um +Esta funcionalidade é frequentemente usada em combinação com [recarregamento a quente (hot reload)](hot-reload.md). + +Se o diretório `watch` não for especificado, ele usará o valor padrão `./**/*.{env,php,twig,yaml,yml}`, +que monitora todos os arquivos `.env`, `.php`, `.twig`, `.yaml` e `.yml` no diretório e subdiretórios +onde o processo FrankenPHP foi iniciado. Você também pode especificar um ou mais diretórios por meio de um [padrão de nome de arquivo shell](https://pkg.go.dev/path/filepath#Match): ```caddyfile { - frankenphp { - worker { - file /caminho/para/aplicacao/public/worker.php - watch /caminho/para/aplicacao # monitora todos os arquivos em todos os subdiretórios de /caminho/para/aplicacao - watch /caminho/para/aplicacao/*.php # monitora arquivos terminados em .php em /caminho/para/aplicacao - watch /caminho/para/aplicacao/**/*.php # monitora arquivos PHP em /caminho/para/aplicacao e subdiretórios - watch /caminho/para/aplicacao/**/*.{php,twig} # monitora arquivos PHP e Twig em /caminho/para/aplicacao e subdiretórios - } - } + frankenphp { + worker { + file /path/to/app/public/worker.php + watch /path/to/app # monitora todos os arquivos em todos os subdiretórios de /path/to/app + watch /path/to/app/*.php # monitora arquivos terminados em .php em /path/to/app + watch /path/to/app/**/*.php # monitora arquivos PHP em /path/to/app e subdiretórios + watch /path/to/app/**/*.{php,twig} # monitora arquivos PHP e Twig em /path/to/app e subdiretórios + } + } } ``` - O padrão `**` significa monitoramento recursivo -- Diretórios também podem ser relativos (ao local de início do processo - FrankenPHP) -- Se você tiver vários workers definidos, todos eles serão reiniciados quando um - arquivo for alterado -- Tenha cuidado ao monitorar arquivos criados em tempo de execução (como logs), - pois eles podem causar reinicializações indesejadas de workers. +- Diretórios também podem ser relativos (ao local de início do processo FrankenPHP) +- Se você tiver múltiplos workers definidos, todos eles serão reiniciados quando um arquivo for alterado +- Tenha cuidado ao monitorar arquivos que são criados em tempo de execução (como logs), pois eles podem causar reinicializações indesejadas de workers. -O monitor de arquivos é baseado no -[e-dant/watcher](https://github.com/e-dant/watcher). +O monitor de arquivos é baseado em [e-dant/watcher](https://github.com/e-dant/watcher). ## Correspondendo o worker a um caminho -Em aplicações PHP tradicionais, os scripts são sempre colocados no diretório -público. -Isso também se aplica aos worker scripts, que são tratados como qualquer outro -script PHP. -Se você quiser colocar o worker script fora do diretório público, pode fazê-lo -por meio da diretiva `match`. +Em aplicações PHP tradicionais, scripts são sempre colocados no diretório público. +Isso também é verdade para worker scripts, que são tratados como qualquer outro script PHP. +Se você quiser, em vez disso, colocar o worker script fora do diretório público, pode fazê-lo via a diretiva `match`. -A diretiva `match` é uma alternativa otimizada ao `try_files`, disponível apenas -dentro do `php_server` e do `php`. +A diretiva `match` é uma alternativa otimizada para `try_files`, disponível apenas dentro de `php_server` e `php`. O exemplo a seguir sempre servirá um arquivo no diretório público, se presente, -e, caso contrário, encaminhará a requisição para o worker que corresponde ao -padrão de caminho. - -```caddyfile -{ - frankenphp { - php_server { - worker { - file /caminho/para/worker.php # arquivo pode estar fora do caminho público - match /api/* # todas as requisições que começam com /api/ serão tratadas por este worker - } - } - } -} -``` - -### Full Duplex (HTTP/1) - -Ao usar HTTP/1.x, pode ser desejável habilitar o modo full-duplex para permitir -a gravação de uma resposta antes que todo o corpo tenha sido lido. -(por exemplo: WebSocket, Server-Sent Events, etc.) - -Esta é uma configuração opcional que precisa ser adicionada às opções globais no -`Caddyfile`: +e, caso contrário, encaminhará a requisição para o worker que corresponde ao padrão de caminho. ```caddyfile { - servers { - enable_full_duplex - } + frankenphp { + php_server { + worker { + file /path/to/worker.php # o arquivo pode estar fora do caminho público + match /api/* # todas as requisições que começam com /api/ serão tratadas por este worker + } + } + } } ``` -> [!CAUTION] -> -> Habilitar esta opção pode causar deadlock em clientes HTTP/1.x antigos que não -> suportam full-duplex. -> Isso também pode ser configurado usando a configuração de ambiente -> `CADDY_GLOBAL_OPTIONS`: - -```sh -CADDY_GLOBAL_OPTIONS="servers { - enable_full_duplex -}" -``` - -Você pode encontrar mais informações sobre esta configuração na -[documentação do Caddy](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex). - ## Variáveis de ambiente -As seguintes variáveis de ambiente podem ser usadas para injetar diretivas Caddy -no `Caddyfile` sem modificá-lo: +As seguintes variáveis de ambiente podem ser usadas para injetar diretivas Caddy no `Caddyfile` sem modificá-lo: -- `SERVER_NAME`: altera - [os endereços nos quais escutar](https://caddyserver.com/docs/caddyfile/concepts#addresses), - os nomes de host fornecidos também serão usados para o certificado TLS gerado; -- `SERVER_ROOT`: altera o diretório raiz do site, o padrão é `public/`; -- `CADDY_GLOBAL_OPTIONS`: injeta - [opções globais](https://caddyserver.com/docs/caddyfile/options); -- `FRANKENPHP_CONFIG`: injeta a configuração sob a diretiva `frankenphp`. +- `SERVER_NAME`: altera [os endereços nos quais escutar](https://caddyserver.com/docs/caddyfile/concepts#addresses), os nomes de host fornecidos também serão usados para o certificado TLS gerado +- `SERVER_ROOT`: altera o diretório raiz do site, o padrão é `public/` +- `CADDY_GLOBAL_OPTIONS`: injeta [opções globais](https://caddyserver.com/docs/caddyfile/options) +- `FRANKENPHP_CONFIG`: injeta a configuração sob a diretiva `frankenphp` -Quanto às SAPIs FPM e CLI, as variáveis de ambiente são expostas por padrão na -superglobal `$_SERVER`. +Assim como para as SAPIs FPM e CLI, as variáveis de ambiente são expostas por padrão na superglobal `$_SERVER`. -O valor `S` da -[diretiva `variables_order` do PHP](https://www.php.net/manual/pt_BR/ini.core.php#ini.variables-order) -é sempre equivalente a `ES`, independentemente da colocação de `E` em outra -parte desta diretiva. +O valor `S` da [diretiva `variables_order` do PHP](https://www.php.net/manual/en/ini.core.php#ini.variables-order) é sempre equivalente a `ES` independentemente da colocação de `E` em outra parte desta diretiva. ## Configuração do PHP -Para carregar -[arquivos de configuração adicionais do PHP](https://www.php.net/manual/pt_BR/configuration.file.php#configuration.file.scan), +Para carregar [arquivos de configuração adicionais do PHP](https://www.php.net/manual/en/configuration.file.php#configuration.file.scan), a variável de ambiente `PHP_INI_SCAN_DIR` pode ser usada. -Quando definida, o PHP carregará todos os arquivos com a extensão `.ini` -presentes nos diretórios fornecidos. +Quando definida, o PHP carregará todos os arquivos com a extensão `.ini` presentes nos diretórios fornecidos. -Você também pode alterar a configuração do PHP usando a diretiva `php_ini` no -`Caddyfile`: +Você também pode alterar a configuração do PHP usando a diretiva `php_ini` no `Caddyfile`: ```caddyfile { @@ -339,10 +301,46 @@ Você também pode alterar a configuração do PHP usando a diretiva `php_ini` n } ``` +### Desabilitando HTTPS + +Por padrão, o FrankenPHP habilitará automaticamente o HTTPS para todos os nomes de host, incluindo `localhost`. +Se você quiser desabilitar o HTTPS (por exemplo, em um ambiente de desenvolvimento), você pode definir a variável de ambiente `SERVER_NAME` para `http://` ou `:80`: + +Alternativamente, você pode usar todos os outros métodos descritos na [documentação do Caddy](https://caddyserver.com/docs/automatic-https#activation). + +Se você quiser usar HTTPS com o endereço IP `127.0.0.1` em vez do nome de host `localhost`, por favor, leia a seção de [problemas conhecidos](known-issues.md#using-https127001-with-docker). + +### Full Duplex (HTTP/1) + +Ao usar HTTP/1.x, pode ser desejável habilitar o modo full-duplex para permitir a gravação de uma resposta antes que o corpo inteiro +tenha sido lido. (por exemplo: [Mercure](mercure.md), WebSocket, Server-Sent Events, etc.) + +Esta é uma configuração de adesão que precisa ser adicionada às opções globais no `Caddyfile`: + +```caddyfile +{ + servers { + enable_full_duplex + } +} +``` + +> [!CAUTION] +> +> Habilitar esta opção pode causar deadlock em clientes HTTP/1.x antigos que não suportam full-duplex. +> Isso também pode ser configurado usando a configuração de ambiente `CADDY_GLOBAL_OPTIONS`: + +```sh +CADDY_GLOBAL_OPTIONS="servers { + enable_full_duplex +}" +``` + +Você pode encontrar mais informações sobre esta configuração na [documentação do Caddy](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex). + ## Habilitar o modo de depuração -Ao usar a imagem Docker, defina a variável de ambiente `CADDY_GLOBAL_OPTIONS` -como `debug` para habilitar o modo de depuração: +Ao usar a imagem Docker, defina a variável de ambiente `CADDY_GLOBAL_OPTIONS` como `debug` para habilitar o modo de depuração: ```console docker run -v $PWD:/app/public \ diff --git a/docs/ru/config.md b/docs/ru/config.md index 7a2c25ba66..b5ccd97630 100644 --- a/docs/ru/config.md +++ b/docs/ru/config.md @@ -1,47 +1,80 @@ -# Конфигурация +# Конфигурация -FrankenPHP, Caddy, а также модули Mercure и Vulcain могут быть настроены с использованием [конфигурационных форматов, поддерживаемых Caddy](https://caddyserver.com/docs/getting-started#your-first-config). +FrankenPHP, Caddy, а также модули [Mercure](mercure.md) и [Vulcain](https://vulcain.rocks) могут быть настроены с использованием [форматов, поддерживаемых Caddy](https://caddyserver.com/docs/getting-started#your-first-config). -В [Docker-образах](docker.md) файл `Caddyfile` находится по пути `/etc/frankenphp/Caddyfile`. -Статический бинарный файл будет искать `Caddyfile` в директории запуска. +Наиболее распространенным форматом является `Caddyfile`, который представляет собой простой, удобочитаемый текстовый формат. +По умолчанию FrankenPHP будет искать `Caddyfile` в текущей директории. +Вы можете указать пользовательский путь с помощью опции `-c` или `--config`. + +Ниже показан минимальный `Caddyfile` для обслуживания PHP-приложения: + +```caddyfile +# Хостнейм, на который будет отвечать сервер +localhost + +# Опционально, директория для обслуживания файлов, иначе по умолчанию используется текущая директория +#root public/ +php_server +``` + +Более продвинутый `Caddyfile`, включающий дополнительные функции и предоставляющий удобные переменные окружения, можно найти [в репозитории FrankenPHP](https://github.com/php/frankenphp/blob/main/caddy/frankenphp/Caddyfile), а также в Docker-образах. PHP можно настроить [с помощью файла `php.ini`](https://www.php.net/manual/en/configuration.file.php). -PHP-интерпретатор будет искать в следующих местах: +В зависимости от метода установки, FrankenPHP и PHP-интерпретатор будут искать конфигурационные файлы в местах, описанных ниже. + +## Docker + +FrankenPHP: + +- `/etc/frankenphp/Caddyfile`: основной файл конфигурации +- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: дополнительные файлы конфигурации, которые загружаются автоматически -Docker: +PHP: -- php.ini: `/usr/local/etc/php/php.ini` По умолчанию php.ini не предоставляется. +- `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-/` +- расширения PHP: `/usr/local/lib/php/extensions/no-debug-zts-/` - Вы должны скопировать официальный шаблон, предоставляемый проектом PHP: ```dockerfile FROM dunglas/frankenphp -# Для production: +# Production: RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini -# Или для development: +# Или development: RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini ``` -Установка FrankenPHP (.rpm или .deb): +## RPM и Debian пакеты -- php.ini: `/etc/frankenphp/php.ini` По умолчанию предоставляется файл php.ini с производственными настройками. -- дополнительные файлы конфигурации: `/etc/frankenphp/php.d/*.ini` -- расширения php: `/usr/lib/frankenphp/modules/` +FrankenPHP: + +- `/etc/frankenphp/Caddyfile`: основной файл конфигурации +- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: дополнительные файлы конфигурации, которые загружаются автоматически + +PHP: + +- `php.ini`: `/etc/php-zts/php.ini` (по умолчанию предоставляется файл `php.ini` с производственными настройками) +- дополнительные файлы конфигурации: `/etc/php-zts/conf.d/*.ini` -Статический бинарный файл: +## Статический бинарный файл -- php.ini: Директория, в которой выполняется `frankenphp run` или `frankenphp php-server`, затем `/etc/frankenphp/php.ini` +FrankenPHP: + +- В текущей рабочей директории: `Caddyfile` + +PHP: + +- `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](https://github.com/php/php-src/). ## Конфигурация Caddyfile -[HTTP-директивы](https://caddyserver.com/docs/caddyfile/concepts#directives) `php_server` или `php` могут быть использованы в блоках сайта для обработки вашего PHP-приложения. +[HTTP-директивы](https://caddyserver.com/docs/caddyfile/concepts#directives) `php_server` или `php` могут быть использованы в блоках сайта для обслуживания вашего PHP-приложения. Минимальный пример: @@ -54,18 +87,23 @@ localhost { } ``` -Вы также можете явно настроить FrankenPHP с помощью глобальной опции: -[Глобальная опция](https://caddyserver.com/docs/caddyfile/concepts#global-options) `frankenphp` может быть использована для настройки FrankenPHP. +Вы также можете явно настроить FrankenPHP, используя [глобальную опцию](https://caddyserver.com/docs/caddyfile/concepts#global-options) `frankenphp`: ```caddyfile { frankenphp { - num_threads # Указывает количество потоков PHP. По умолчанию: 2x от числа доступных CPU. + num_threads # Устанавливает количество запускаемых потоков PHP. По умолчанию: 2x от числа доступных CPU. + max_threads # Ограничивает количество дополнительных потоков PHP, которые могут быть запущены во время выполнения. По умолчанию: num_threads. Может быть установлено в 'auto'. + max_wait_time # Устанавливает максимальное время, в течение которого запрос может ожидать свободный поток PHP до истечения таймаута. По умолчанию: отключено. + max_idle_time # Устанавливает максимальное время бездействия автоматически масштабируемого потока до его деактивации. По умолчанию: 5s. + php_ini # Устанавливает директиву php.ini. Может использоваться несколько раз для установки нескольких директив. worker { - file # Указывает путь к worker-скрипту. - num # Указывает количество потоков PHP. По умолчанию: 2x от числа доступных CPU. - env # Устанавливает дополнительную переменную окружения. Можно указать несколько раз для разных переменных. - watch # Указывает путь для отслеживания изменений файлов.Можно указать несколько раз для разных путей. + file # Устанавливает путь к worker-скрипту. + num # Устанавливает количество запускаемых потоков PHP, по умолчанию 2x от числа доступных CPU. + env # Устанавливает дополнительную переменную окружения с заданным значением. Может быть указано несколько раз для нескольких переменных окружения. + watch # Устанавливает путь для отслеживания изменений файлов. Может быть указано несколько раз для нескольких путей. + name # Устанавливает имя worker, используемое в логах и метриках. По умолчанию: абсолютный путь к файлу worker. + max_consecutive_failures # Устанавливает максимальное количество последовательных сбоев, после которых worker считается неработоспособным; -1 означает, что worker всегда будет перезапускаться. По умолчанию: 6. } } } @@ -89,7 +127,7 @@ localhost { ```caddyfile app.example.com { - root /path/to/app/public + root /path/to/app/public php_server { root /path/to/app/public # позволяет лучше кэшировать worker index.php @@ -97,7 +135,7 @@ app.example.com { } other.example.com { - root /path/to/other/public + root /path/to/other/public php_server { root /path/to/other/public worker index.php @@ -107,7 +145,10 @@ other.example.com { # ... ``` -Использование директивы `php_server` — это то, что нужно в большинстве случаев. Однако если требуется полный контроль, вы можете использовать более низкоуровневую директиву `php`: +Использование директивы `php_server` — это то, что нужно в большинстве случаев, +но если требуется полный контроль, вы можете использовать более низкоуровневую директиву `php`. +Директива `php` передает все входные данные PHP, не проверяя предварительно, +является ли это PHP-файлом или нет. Подробнее об этом читайте на [странице производительности](performance.md#try_files). Использование директивы `php_server` эквивалентно следующей конфигурации: @@ -136,27 +177,30 @@ route { ```caddyfile php_server [] { - root # Указывает корневую директорию сайта. По умолчанию: директива `root`. - split_path # Устанавливает подстроки для разделения URI на две части. Первая часть будет использована как имя ресурса (CGI-скрипта), вторая часть — как PATH_INFO. По умолчанию: `.php`. - resolve_root_symlink false # Отключает разрешение символьных ссылок для `root` (включено по умолчанию). - env # Устанавливает дополнительные переменные окружения. Можно указать несколько раз для разных переменных. + root # Устанавливает корневую папку для сайта. По умолчанию: директива `root`. + split_path # Устанавливает подстроки для разделения URI на две части. Первая совпадающая подстрока будет использована для разделения "path info" от пути. Первая часть будет дополнена совпадающей подстрокой и будет считаться фактическим именем ресурса (CGI-скрипта). Вторая часть будет установлена как PATH_INFO для использования скриптом. По умолчанию: `.php`. + resolve_root_symlink false # Отключает разрешение директории `root` до ее фактического значения путем оценки символической ссылки, если таковая существует (включено по умолчанию). + env # Устанавливает дополнительную переменную окружения с заданным значением. Может быть указано несколько раз для нескольких переменных окружения. file_server off # Отключает встроенную директиву file_server. - worker { # Создает worker, специфичный для этого сервера. Можно указать несколько раз для разных workers. - file # Указывает путь к worker-скрипту, может быть относительным к корню php_server - num # Указывает количество потоков PHP. По умолчанию: 2x от числа доступных CPU. + worker { # Создает worker, специфичный для этого сервера. Может быть указано несколько раз для нескольких workers. + file # Устанавливает путь к worker-скрипту, может быть относительным к корню php_server + num # Устанавливает количество запускаемых потоков PHP, по умолчанию 2x от числа доступных CPU. name # Устанавливает имя для worker, используемое в логах и метриках. По умолчанию: абсолютный путь к файлу worker. Всегда начинается с m# при определении в блоке php_server. - watch # Указывает путь для отслеживания изменений файлов. Можно указать несколько раз для разных путей. - env # Устанавливает дополнительную переменную окружения. Можно указать несколько раз для разных переменных. Переменные окружения для этого worker также наследуются от родительского php_server, но могут быть переопределены здесь. + watch # Устанавливает путь для отслеживания изменений файлов. Может быть указано несколько раз для нескольких путей. + env # Устанавливает дополнительную переменную окружения с заданным значением. Может быть указано несколько раз для нескольких переменных окружения. Переменные окружения для этого worker также наследуются от родительского php_server, но могут быть переопределены здесь. + match # сопоставляет worker с шаблоном пути. Переопределяет try_files и может использоваться только в директиве php_server. } - worker # Также можно использовать краткую форму как в глобальном блоке frankenphp. + worker # Также можно использовать краткую форму, как и в глобальном блоке frankenphp. } ``` ### Отслеживание изменений файлов -Поскольку workers запускают ваше приложение только один раз и держат его в памяти, изменения в PHP-файлах не будут применяться сразу. +Поскольку workers запускают ваше приложение только один раз и держат его в памяти, любые изменения +в ваших PHP-файлах не будут отражены немедленно. -Для разработки можно настроить перезапуск workers при изменении файлов с помощью директивы `watch`: +Вместо этого workers могут быть перезапущены при изменении файлов с помощью директивы `watch`. +Это полезно для сред разработки. ```caddyfile { @@ -169,8 +213,12 @@ php_server [] { } ``` -Если директория для `watch` не указана, по умолчанию будет использоваться путь `./**/*.{php,yaml,yml,twig,env}`, -который отслеживает все файлы с расширениями `.php`, `.yaml`, `.yml`, `.twig` и `.env` в директории, где был запущен процесс FrankenPHP, и во всех её поддиректориях. Вы также можете указать одну или несколько директорий с использованием [шаблона имён файлов](https://pkg.go.dev/path/filepath#Match): +Эта функция часто используется в сочетании с [горячей перезагрузкой](hot-reload.md). + +Если директория для `watch` не указана, по умолчанию будет использоваться `./**/*.{env,php,twig,yaml,yml}`, +который отслеживает все файлы с расширениями `.env`, `.php`, `.twig`, `.yaml` и `.yml` в директории и поддиректориях, +где был запущен процесс FrankenPHP. Вы также можете указать одну или несколько директорий с использованием +[шаблона имён файлов оболочки](https://pkg.go.dev/path/filepath#Match): ```caddyfile { @@ -187,17 +235,84 @@ php_server [] { ``` - Шаблон `**` указывает на рекурсивное отслеживание. -- Директории могут быть указаны относительно директории запуска FrankenPHP. +- Директории также могут быть относительными (к месту запуска процесса FrankenPHP). - Если у вас определено несколько workers, все они будут перезапущены при изменении файлов. -- Избегайте отслеживания файлов, создаваемых во время выполнения (например, логов), так как это может вызвать нежелательные перезапуски. +- Будьте осторожны с отслеживанием файлов, создаваемых во время выполнения (например, логов), так как это может вызвать нежелательные перезапуски workers. Механизм отслеживания файлов основан на [e-dant/watcher](https://github.com/e-dant/watcher). +## Сопоставление Worker с путем + +В традиционных PHP-приложениях скрипты всегда размещаются в публичной директории. +Это также верно для worker-скриптов, которые обрабатываются как любые другие PHP-скрипты. +Если вы хотите разместить worker-скрипт вне публичной директории, вы можете сделать это с помощью директивы `match`. + +Директива `match` является оптимизированной альтернативой `try_files`, доступной только внутри `php_server` и `php`. +Следующий пример всегда будет обслуживать файл в публичной директории, если он присутствует, +и в противном случае будет перенаправлять запрос worker, соответствующему шаблону пути. + +```caddyfile +{ + frankenphp { + php_server { + worker { + file /path/to/worker.php # файл может находиться вне публичного пути + match /api/* # все запросы, начинающиеся с /api/, будут обрабатываться этим worker + } + } + } +} +``` + +## Переменные окружения + +Следующие переменные окружения могут быть использованы для внедрения директив Caddy в `Caddyfile` без его изменения: + +- `SERVER_NAME`: изменение [адресов для прослушивания](https://caddyserver.com/docs/caddyfile/concepts#addresses); предоставленные хостнеймы также будут использованы для генерации TLS-сертификата +- `SERVER_ROOT`: изменение корневой директории сайта, по умолчанию `public/` +- `CADDY_GLOBAL_OPTIONS`: внедрение [глобальных опций](https://caddyserver.com/docs/caddyfile/options) +- `FRANKENPHP_CONFIG`: внедрение конфигурации под директиву `frankenphp` + +Как и для FPM и CLI SAPIs, переменные окружения по умолчанию доступны в суперглобальной переменной `$_SERVER`. + +Значение `S` в [директиве PHP `variables_order`](https://www.php.net/manual/en/ini.core.php#ini.variables-order) всегда эквивалентно `ES`, независимо от того, где расположена `E` в этой директиве. + +## Конфигурация PHP + +Для загрузки [дополнительных конфигурационных файлов PHP](https://www.php.net/manual/en/configuration.file.php#configuration.file.scan) можно использовать переменную окружения `PHP_INI_SCAN_DIR`. +Если она установлена, PHP загрузит все файлы с расширением `.ini`, находящиеся в указанных директориях. + +Вы также можете изменить конфигурацию PHP с помощью директивы `php_ini` в `Caddyfile`: + +```caddyfile +{ + frankenphp { + php_ini memory_limit 256M + + # или + + php_ini { + memory_limit 256M + max_execution_time 15 + } + } +} +``` + +### Отключение HTTPS + +По умолчанию FrankenPHP автоматически включает HTTPS для всех хостнеймов, включая `localhost`. +Если вы хотите отключить HTTPS (например, в среде разработки), вы можете установить переменную окружения `SERVER_NAME` в `http://` или `:80`: + +В качестве альтернативы вы можете использовать все другие методы, описанные в [документации Caddy](https://caddyserver.com/docs/automatic-https#activation). + +Если вы хотите использовать HTTPS с IP-адресом `127.0.0.1` вместо хостнейма `localhost`, пожалуйста, ознакомьтесь с разделом [известные проблемы](known-issues.md#using-https127001-with-docker). + ### Полный дуплекс (HTTP/1) -При использовании HTTP/1.x можно включить режим полного дуплекса, чтобы разрешить запись ответа до завершения чтения тела запроса (например, для WebSocket, Server-Sent Events и т.д.). +При использовании HTTP/1.x может быть желательно включить режим полного дуплекса, чтобы разрешить запись ответа до завершения чтения всего тела запроса. (например: [Mercure](mercure.md), WebSocket, Server-Sent Events и т.д.) -Эта опция включается вручную и должна быть добавлена в глобальные настройки `Caddyfile`: +Это опция, которую необходимо добавить в глобальные настройки в `Caddyfile`: ```caddyfile { @@ -210,7 +325,7 @@ php_server [] { > [!CAUTION] > > Включение этой опции может привести к зависанию устаревших HTTP/1.x клиентов, которые не поддерживают полный дуплекс. -> Настройка также доступна через переменную окружения `CADDY_GLOBAL_OPTIONS`: +> Это также можно настроить с помощью переменной окружения `CADDY_GLOBAL_OPTIONS`: ```sh CADDY_GLOBAL_OPTIONS="servers { @@ -220,23 +335,6 @@ CADDY_GLOBAL_OPTIONS="servers { Дополнительную информацию об этой настройке можно найти в [документации Caddy](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex). -## Переменные окружения - -Следующие переменные окружения могут быть использованы для добавления директив в `Caddyfile` без его изменения: - -- `SERVER_NAME`: изменение [адресов для прослушивания](https://caddyserver.com/docs/caddyfile/concepts#addresses); предоставленные хостнеймы также будут использованы для генерации TLS-сертификата. -- `CADDY_GLOBAL_OPTIONS`: добавление [глобальных опций](https://caddyserver.com/docs/caddyfile/options). -- `FRANKENPHP_CONFIG`: добавление конфигурации в директиву `frankenphp`. - -Как и для FPM и CLI SAPIs, переменные окружения по умолчанию доступны в суперглобальной переменной `$_SERVER`. - -Значение `S` в [директиве PHP `variables_order`](https://www.php.net/manual/en/ini.core.php#ini.variables-order) всегда эквивалентно `ES`, независимо от того, где расположена `E` в этой директиве. - -## Конфигурация PHP - -Для загрузки [дополнительных конфигурационных файлов PHP](https://www.php.net/manual/en/configuration.file.php#configuration.file.scan) можно использовать переменную окружения `PHP_INI_SCAN_DIR`. -Если она установлена, PHP загрузит все файлы с расширением `.ini`, находящиеся в указанных директориях. - ## Включение режима отладки При использовании Docker-образа установите переменную окружения `CADDY_GLOBAL_OPTIONS` в `debug`, чтобы включить режим отладки: diff --git a/docs/tr/config.md b/docs/tr/config.md index 5d17f6e19a..f1ea522d36 100644 --- a/docs/tr/config.md +++ b/docs/tr/config.md @@ -1,42 +1,73 @@ -# Konfigürasyon +# Konfigürasyon -FrankenPHP, Caddy'nin yanı sıra Mercure ve Vulcain modülleri [Caddy tarafından desteklenen formatlar](https://caddyserver.com/docs/getting-started#your-first-config) kullanılarak yapılandırılabilir. +FrankenPHP, Caddy'nin yanı sıra [Mercure](mercure.md) ve [Vulcain](https://vulcain.rocks) modülleri [Caddy tarafından desteklenen formatlar](https://caddyserver.com/docs/getting-started#your-first-config) kullanılarak yapılandırılabilir. -Docker imajlarında] (docker.md), `Caddyfile` `/etc/frankenphp/Caddyfile` adresinde bulunur. -Statik ikili, başlatıldığı dizinde `Caddyfile` dosyasını arayacaktır. +En yaygın format, basit, insan tarafından okunabilir bir metin formatı olan `Caddyfile`'dır. Varsayılan olarak, FrankenPHP mevcut dizinde bir `Caddyfile` arar. Özel bir yol belirtmek için `-c` veya `--config` seçeneğini kullanabilirsiniz. -PHP'nin kendisi [bir `php.ini` dosyası kullanılarak yapılandırılabilir](https://www.php.net/manual/tr/configuration.file.php). +Bir PHP uygulamasını sunmak için minimal bir `Caddyfile` aşağıda gösterilmiştir: -PHP yorumlayıcısı aşağıdaki konumlarda arama yapacaktır: +```caddyfile +# Yanıt verilecek ana bilgisayar adı +localhost + +# İsteğe bağlı olarak, dosyaların sunulacağı dizin, aksi takdirde mevcut dizin varsayılan olarak kullanılır +#root public/ +php_server +``` + +Daha fazla özellik sağlayan ve kullanışlı ortam değişkenleri sunan daha gelişmiş bir `Caddyfile`, [FrankenPHP deposunda](https://github.com/php/frankenphp/blob/main/caddy/frankenphp/Caddyfile) ve Docker imajlarıyla birlikte sağlanır. + +PHP'nin kendisi [bir `php.ini` dosyası kullanılarak yapılandırılabilir](https://www.php.net/manual/en/configuration.file.php). + +Kurulum yönteminize bağlı olarak, FrankenPHP ve PHP yorumlayıcısı, aşağıda açıklanan konumlardaki yapılandırma dosyalarını arayacaktır. -Docker: +## Docker -- php.ini: `/usr/local/etc/php/php.ini` Varsayılan olarak php.ini sağlanmaz. +FrankenPHP: + +- `/etc/frankenphp/Caddyfile`: ana yapılandırma dosyası +- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: otomatik olarak yüklenen ek yapılandırma dosyaları + +PHP: + +- `php.ini`: `/usr/local/etc/php/php.ini` (varsayılan olarak bir `php.ini` sağlanmaz) - ek yapılandırma dosyaları: `/usr/local/etc/php/conf.d/*.ini` -- php uzantıları: `/usr/local/lib/php/extensions/no-debug-zts-/` +- PHP uzantıları: `/usr/local/lib/php/extensions/no-debug-zts-/` - PHP projesi tarafından sağlanan resmi bir şablonu kopyalamalısınız: ```dockerfile FROM dunglas/frankenphp -# Developement: -RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini - -# Veya production: +# Production: RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini + +# Veya development: +RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini ``` -FrankenPHP kurulumu (.rpm veya .deb): +## RPM ve Debian paketleri -- php.ini: `/etc/frankenphp/php.ini` Varsayılan olarak üretim ön ayarlarına sahip bir php.ini dosyası sağlanır. -- ek yapılandırma dosyaları: `/etc/frankenphp/php.d/*.ini` -- php uzantıları: `/usr/lib/frankenphp/modules/` +FrankenPHP: + +- `/etc/frankenphp/Caddyfile`: ana yapılandırma dosyası +- `/etc/frankenphp/Caddyfile.d/*.caddyfile`: otomatik olarak yüklenen ek yapılandırma dosyaları + +PHP: -Statik ikili: +- `php.ini`: `/etc/php-zts/php.ini` (varsayılan olarak üretim ön ayarlarına sahip bir `php.ini` dosyası sağlanır) +- ek yapılandırma dosyaları: `/etc/php-zts/conf.d/*.ini` -- php.ini: `frankenphp run` veya `frankenphp php-server` komutunun çalıştırıldığı dizin, ardından `/etc/frankenphp/php.ini` +## Statik ikili + +FrankenPHP: + +- Mevcut çalışma dizininde: `Caddyfile` + +PHP: + +- `php.ini`: `frankenphp run` veya `frankenphp php-server` komutunun çalıştırıldığı dizin, ardından `/etc/frankenphp/php.ini` - ek yapılandırma dosyaları: `/etc/frankenphp/php.d/*.ini` -- php uzantıları: yüklenemez +- PHP uzantıları: yüklenemez, bunları doğrudan ikili dosyaya dahil edin - [PHP kaynak kodu](https://github.com/php/php-src/) ile birlikte verilen `php.ini-production` veya `php.ini-development` dosyalarından birini kopyalayın. ## Caddyfile Konfigürasyonu @@ -54,17 +85,23 @@ localhost { } ``` -FrankenPHP'yi global seçenek kullanarak açıkça yapılandırabilirsiniz: -`frankenphp` [global seçenek](https://caddyserver.com/docs/caddyfile/concepts#global-options) FrankenPHP'yi yapılandırmak için kullanılabilir. +Alternatif olarak, FrankenPHP'yi [global seçenek](https://caddyserver.com/docs/caddyfile/concepts#global-options) olan `frankenphp` kullanarak açıkça yapılandırabilirsiniz: ```caddyfile { frankenphp { - num_threads # Başlatılacak PHP iş parçacığı sayısını ayarlar. Varsayılan: Mevcut CPU çekirdek sayısının 2 katı. + num_threads # Başlatılacak PHP iş parçacığı sayısını ayarlar. Varsayılan: Mevcut CPU'ların 2 katı. + max_threads # Çalışma zamanında başlatılabilecek ek PHP iş parçacığı sayısını sınırlar. Varsayılan: num_threads. 'auto' olarak ayarlanabilir. + max_wait_time # Bir isteğin boş bir PHP iş parçacığı bekleme süresinin zaman aşımına uğramadan önceki maksimum süresini ayarlar. Varsayılan: devre dışı. + max_idle_time # Otomatik ölçeklenen bir iş parçacığının devre dışı bırakılmadan önce ne kadar süre boş kalabileceğini ayarlar. Varsayılan: 5s. + php_ini # Bir php.ini yönergesi ayarlar. Birden fazla yönerge ayarlamak için birden fazla kez kullanılabilir. worker { file # Çalışan komut dosyasının yolunu ayarlar. - num # Başlatılacak PHP iş parçacığı sayısını ayarlar, varsayılan değer mevcut CPU çekirdek sayısının 2 katıdır. + num # Başlatılacak PHP iş parçacığı sayısını ayarlar, varsayılan değer mevcut CPU'ların 2 katıdır. env # Ek bir ortam değişkenini verilen değere ayarlar. Birden fazla ortam değişkeni için birden fazla kez belirtilebilir. + watch # Dosya değişikliklerini izlemek için yolu ayarlar. Birden fazla yol için birden fazla kez belirtilebilir. + name # İşçinin adını ayarlar, günlüklerde ve metriklerde kullanılır. Varsayılan: işçi dosyasının mutlak yolu + max_consecutive_failures # İşçinin sağlıksız kabul edilmeden önceki maksimum ardışık hata sayısını ayarlar, -1 işçinin her zaman yeniden başlayacağı anlamına gelir. Varsayılan: 6. } } } @@ -88,7 +125,7 @@ Aynı sunucuda birden fazla uygulamaya hizmet veriyorsanız birden fazla işçi ```caddyfile app.example.com { - root /path/to/app/public + root /path/to/app/public php_server { root /path/to/app/public # daha iyi önbelleğe almayı sağlar worker index.php @@ -96,7 +133,7 @@ app.example.com { } other.example.com { - root /path/to/other/public + root /path/to/other/public php_server { root /path/to/other/public worker index.php @@ -107,13 +144,14 @@ other.example.com { ``` Genellikle ihtiyacınız olan şey `php_server` yönergesini kullanmaktır, -ancak tam kontrole ihtiyacınız varsa, daha düşük seviyeli `php` yönergesini kullanabilirsiniz: +ancak tam kontrole ihtiyacınız varsa, daha düşük seviyeli `php` yönergesini kullanabilirsiniz. +`php` yönergesi, önce bir PHP dosyası olup olmadığını kontrol etmek yerine tüm girdiyi PHP'ye iletir. Daha fazla bilgiyi [performans sayfasında](performance.md#try_files) okuyun. -php_server` yönergesini kullanmak bu yapılandırmay ile aynıdır: +`php_server` yönergesini kullanmak bu yapılandırmayla aynıdır: ```caddyfile route { - # Dizin istekleri için sondaki eğik çizgiyi, diğer adıyla taksim işaretini ekleyin + # Dizin istekleri için sondaki eğik çizgiyi ekleyin @canonicalPath { file {path}/index.php not path */ @@ -132,33 +170,96 @@ route { } ``` -php_server`ve`php` yönergeleri aşağıdaki seçeneklere sahiptir: +`php_server` ve `php` yönergeleri aşağıdaki seçeneklere sahiptir: ```caddyfile php_server [] { - root # Sitenin kök klasörünü ayarlar. Öntanımlı: `root` yönergesi. + root # Sitenin kök klasörünü ayarlar. Varsayılan: `root` yönergesi. split_path # URI'yi iki parçaya bölmek için alt dizgeleri ayarlar. İlk eşleşen alt dizge "yol bilgisini" yoldan ayırmak için kullanılır. İlk parça eşleşen alt dizeyle sonlandırılır ve gerçek kaynak (CGI betiği) adı olarak kabul edilir. İkinci parça betiğin kullanması için PATH_INFO olarak ayarlanacaktır. Varsayılan: `.php` resolve_root_symlink false # Varsa, sembolik bir bağlantıyı değerlendirerek `root` dizininin gerçek değerine çözümlenmesini devre dışı bırakır (varsayılan olarak etkindir). env # Ek bir ortam değişkenini verilen değere ayarlar. Birden fazla ortam değişkeni için birden fazla kez belirtilebilir. file_server off # Yerleşik file_server yönergesini devre dışı bırakır. worker { # Bu sunucuya özgü bir worker oluşturur. Birden fazla worker için birden fazla kez belirtilebilir. file # Worker betiğinin yolunu ayarlar, php_server köküne göre göreceli olabilir - num # Başlatılacak PHP iş parçacığı sayısını ayarlar, varsayılan değer mevcut CPU çekirdek sayısının 2 katıdır + num # Başlatılacak PHP iş parçacığı sayısını ayarlar, varsayılan değer mevcut CPU'ların 2 katıdır name # Worker için günlüklerde ve metriklerde kullanılan bir ad ayarlar. Varsayılan: worker dosyasının mutlak yolu. Bir php_server bloğunda tanımlandığında her zaman m# ile başlar. watch # Dosya değişikliklerini izlemek için yolu ayarlar. Birden fazla yol için birden fazla kez belirtilebilir. env # Ek bir ortam değişkenini verilen değere ayarlar. Birden fazla ortam değişkeni için birden fazla kez belirtilebilir. Bu worker için ortam değişkenleri ayrıca php_server üst öğesinden devralınır, ancak burada geçersiz kılınabilir. + match # İşçiyi bir yol desenine eşleştirir. try_files'ı geçersiz kılar ve yalnızca php_server yönergesinde kullanılabilir. } worker # Global frankenphp bloğundaki gibi kısa formu da kullanabilirsiniz. } ``` +### Dosya Değişikliklerini İzleme + +Workers yalnızca uygulamanızı bir kez başlatır ve bellekte tutar, bu nedenle PHP dosyalarınızdaki herhangi bir değişiklik hemen yansımaz. + +Bunun yerine işçiler, `watch` yönergesi aracılığıyla dosya değişikliklerinde yeniden başlatılabilir. Bu, geliştirme ortamları için kullanışlıdır. + +```caddyfile +{ + frankenphp { + worker { + file /path/to/app/public/worker.php + watch + } + } +} +``` + +Bu özellik genellikle [hot reload](hot-reload.md) ile birlikte kullanılır. + +Eğer `watch` dizini belirtilmezse, FrankenPHP sürecinin başlatıldığı dizin ve alt dizinlerdeki tüm `.env`, `.php`, `.twig`, `.yaml` ve `.yml` dosyalarını izleyen `./**/*.{env,php,twig,yaml,yml}` değerine geri döner. Bunun yerine, bir veya daha fazla dizini [kabuk dosya adı deseni](https://pkg.go.dev/path/filepath#Match) aracılığıyla da belirtebilirsiniz: + +```caddyfile +{ + frankenphp { + worker { + file /path/to/app/public/worker.php + watch /path/to/app # /path/to/app'ın tüm alt dizinlerindeki tüm dosyaları izler + watch /path/to/app/*.php # /path/to/app'da .php ile biten dosyaları izler + watch /path/to/app/**/*.php # /path/to/app ve alt dizinlerindeki PHP dosyalarını izler + watch /path/to/app/**/*.{php,twig} # /path/to/app ve alt dizinlerindeki PHP ve Twig dosyalarını izler + } + } +} +``` + +- `**` deseni, özyinelemeli izlemeyi belirtir +- Dizinler göreceli de olabilir (FrankenPHP sürecinin başlatıldığı yere göre) +- Birden fazla işçi tanımladıysanız, bir dosya değiştiğinde hepsi yeniden başlatılacaktır. +- Çalışma zamanında oluşturulan dosyaları (günlükler gibi) izlerken dikkatli olun, zira bunlar istenmeyen işçi yeniden başlatmalarına neden olabilir. + +Dosya izleyici [e-dant/watcher](https://github.com/e-dant/watcher) üzerine kuruludur. + +## İşçiyi Yola Eşleştirme + +Geleneksel PHP uygulamalarında, betikler her zaman public dizininde bulunur. Bu, diğer tüm PHP betikleri gibi ele alınan işçi betikleri için de geçerlidir. İşçi betiğini public dizininin dışına koymak isterseniz, bunu `match` yönergesi aracılığıyla yapabilirsiniz. + +`match` yönergesi, yalnızca `php_server` ve `php` içinde bulunan `try_files`'a optimize edilmiş bir alternatiftir. Aşağıdaki örnek, varsa her zaman public dizinindeki bir dosyayı sunacak, aksi takdirde isteği yol desenine uyan işçiye iletecektir. + +```caddyfile +{ + frankenphp { + php_server { + worker { + file /path/to/worker.php # dosya public yolunun dışında olabilir + match /api/* # /api/ ile başlayan tüm istekler bu worker tarafından işlenecektir + } + } + } +} +``` + ## Ortam Değişkenleri Aşağıdaki ortam değişkenleri `Caddyfile` içinde değişiklik yapmadan Caddy yönergelerini entegre etmek için kullanılabilir: -- `SERVER_NAME`: değiştirin [dinlenecek adresleri](https://caddyserver.com/docs/caddyfile/concepts#addresses), sağlanan ana bilgisayar adları oluşturulan TLS sertifikası için de kullanılacaktır -- `CADDY_GLOBAL_OPTIONS`: entegre edin [global seçenekler](https://caddyserver.com/docs/caddyfile/options) -- `FRANKENPHP_CONFIG`: `frankenphp` yönergesi altına yapılandırma entegre edin +- `SERVER_NAME`: [dinlenecek adresleri](https://caddyserver.com/docs/caddyfile/concepts#addresses) değiştirir, sağlanan ana bilgisayar adları oluşturulan TLS sertifikası için de kullanılacaktır +- `SERVER_ROOT`: sitenin kök dizinini değiştirir, varsayılan olarak `public/`dir +- `CADDY_GLOBAL_OPTIONS`: [global seçenekleri](https://caddyserver.com/docs/caddyfile/options) entegre eder +- `FRANKENPHP_CONFIG`: `frankenphp` yönergesi altına yapılandırma entegre eder FPM ve CLI SAPI'lerinde olduğu gibi, ortam değişkenleri varsayılan olarak `$_SERVER` süper globalinde gösterilir. @@ -166,10 +267,62 @@ FPM ve CLI SAPI'lerinde olduğu gibi, ortam değişkenleri varsayılan olarak `$ ## PHP konfigürasyonu -Ek olarak [PHP yapılandırma dosyalarını](https://www.php.net/manual/en/configuration.file.php#configuration.file.scan) yüklemek için +Ek olarak [PHP yapılandırma dosyalarını](https://www.php.net/manual/en/configuration.file.php#configuration.file.scan) yüklemek için, `PHP_INI_SCAN_DIR` ortam değişkeni kullanılabilir. Ayarlandığında, PHP verilen dizinlerde bulunan `.ini` uzantılı tüm dosyaları yükleyecektir. +PHP yapılandırmasını `Caddyfile` içindeki `php_ini` yönergesini kullanarak da değiştirebilirsiniz: + +```caddyfile +{ + frankenphp { + php_ini memory_limit 256M + + # veya + + php_ini { + memory_limit 256M + max_execution_time 15 + } + } +} +``` + +### HTTPS'i Devre Dışı Bırakma + +Varsayılan olarak, FrankenPHP tüm ana bilgisayar adları için (localhost dahil) HTTPS'i otomatik olarak etkinleştirir. HTTPS'i devre dışı bırakmak isterseniz (örneğin bir geliştirme ortamında), `SERVER_NAME` ortam değişkenini `http://` veya `:80` olarak ayarlayabilirsiniz: + +Alternatif olarak, [Caddy belgelerinde](https://caddyserver.com/docs/automatic-https#activation) açıklanan diğer tüm yöntemleri kullanabilirsiniz. + +Eğer `localhost` ana bilgisayar adı yerine `127.0.0.1` IP adresiyle HTTPS kullanmak isterseniz, lütfen [bilinen sorunlar](known-issues.md#using-https127001-with-docker) bölümünü okuyun. + +### Tam Çift Yönlü (HTTP/1) + +HTTP/1.x kullanırken, tüm gövde okunmadan önce bir yanıt yazmaya izin vermek için tam çift yönlü modun etkinleştirilmesi istenebilir. (örneğin: [Mercure](mercure.md), WebSocket, Sunucu Tarafından Gönderilen Olaylar vb.) + +Bu, `Caddyfile`'daki global seçeneklere eklenmesi gereken isteğe bağlı bir yapılandırmadır: + +```caddyfile +{ + servers { + enable_full_duplex + } +} +``` + +> [!CAUTION] +> +> Bu seçeneği etkinleştirmek, tam çift yönlü desteği olmayan eski HTTP/1.x istemcilerinin kilitlenmesine neden olabilir. +> Bu, `CADDY_GLOBAL_OPTIONS` ortam yapılandırması kullanılarak da yapılandırılabilir: + +```sh +CADDY_GLOBAL_OPTIONS="servers { + enable_full_duplex +}" +``` + +Bu ayar hakkında daha fazla bilgiyi [Caddy belgelerinde](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex) bulabilirsiniz. + ## Hata Ayıklama Modunu Etkinleştirin Docker imajını kullanırken, hata ayıklama modunu etkinleştirmek için `CADDY_GLOBAL_OPTIONS` ortam değişkenini `debug` olarak ayarlayın: @@ -179,4 +332,3 @@ docker run -v $PWD:/app/public \ -e CADDY_GLOBAL_OPTIONS=debug \ -p 80:80 -p 443:443 -p 443:443/udp \ dunglas/frankenphp -```