feat: translate file docs/extensions.md (#1843)

This commit is contained in:
Adiel Cristo
2025-08-29 04:17:49 -03:00
committed by GitHub
parent ad86bf49c2
commit 6ab8350561
17 changed files with 1201 additions and 151 deletions

View File

@@ -33,8 +33,8 @@ Adicione diretórios ao `.dockerignore`.
### Sem Docker (Linux e macOS)
[Siga as instruções para compilar a partir dos fontes](compile.md) e passe a
flag de configuração `--debug`.
[Siga as instruções para compilar a partir do código-fonte](compile.md) e passe
a flag de configuração `--debug`.
## Executando a suite de testes
@@ -199,7 +199,7 @@ docker buildx bake -f docker-bake.hcl --pull --no-cache --push
- [PHP embedding in Go (go-php)](https://github.com/deuill/go-php)
- [PHP embedding in Go (GoEmPHP)](https://github.com/mikespook/goemphp)
- [PHP embedding in C++](https://gist.github.com/paresy/3cbd4c6a469511ac7479aa0e7c42fea7)
- [Extending and Embedding PHP por Sara Golemon](https://books.google.fr/books?id=zMbGvK17_tYC&pg=PA254&lpg=PA254#v=onepage&q&f=false)
- [Extending and Embedding PHP, por Sara Golemon](https://books.google.fr/books?id=zMbGvK17_tYC&pg=PA254&lpg=PA254#v=onepage&q&f=false)
- [What the heck is TSRMLS_CC, anyway?](http://blog.golemon.com/2006/06/what-heck-is-tsrmlscc-anyway.html)
- [SDL bindings](https://pkg.go.dev/github.com/veandco/go-sdl2@v0.4.21/sdl#Main)

View File

@@ -1,14 +1,14 @@
# FrankenPHP: Servidor de aplicações moderno para PHP
# FrankenPHP: um moderno servidor de aplicações para PHP
<h1 align="center"><a href="https://frankenphp.dev/pt-br"><img src="frankenphp.png" alt="FrankenPHP" width="600"></a></h1>
O FrankenPHP é um servidor de aplicações moderno para PHP, construído sobre o
O FrankenPHP é um moderno servidor de aplicações para PHP, construído sobre o
servidor web [Caddy](https://caddyserver.com/).
O FrankenPHP oferece superpoderes às suas aplicações PHP graças aos seus
recursos impressionantes: [_Early Hints_](early-hints.md),
[modo worker](worker.md), [recursos em tempo real](mercure.md), suporte
automático a HTTPS, HTTP/2 e HTTP/3...
O FrankenPHP superpoderes às suas aplicações PHP graças aos seus recursos
impressionantes: [_Early Hints_](early-hints.md), [modo worker](worker.md),
[recursos em tempo real](mercure.md), suporte automático a HTTPS, HTTP/2 e
HTTP/3...
O FrankenPHP funciona com qualquer aplicação PHP e torna seus projetos Laravel e
Symfony mais rápidos do que nunca, graças às suas integrações oficiais com o
@@ -56,7 +56,7 @@ frankenphp php-cli /caminho/para/seu/script.php
### Docker
Alternativamente, [imagens do Docker](docker.md) estão disponíveis:
Alternativamente, [imagens Docker](docker.md) estão disponíveis:
```console
docker run -v .:/app/public \
@@ -94,11 +94,12 @@ frankenphp php-server
## Documentação
- [Modo clássico](classic.md)
- [Modo Worker](worker.md)
- [Modo worker](worker.md)
- [Suporte a Early Hints (código de status HTTP 103)](early-hints.md)
- [Tempo real](mercure.md)
- [Servindo grandes arquivos estáticos com eficiência](x-sendfile.md)
- [Configuração](config.md)
- [Escrevendo extensões PHP em Go](extensions.md)
- [Imagens Docker](docker.md)
- [Implantação em produção](production.md)
- [Otimização de desempenho](performance.md)
@@ -109,7 +110,7 @@ frankenphp php-server
- [Integração com Laravel](laravel.md)
- [Problemas conhecidos](known-issues.md)
- [Aplicação de demonstração (Symfony) e benchmarks](https://github.com/dunglas/frankenphp-demo)
- [Documentação da biblioteca Go](https://pkg.go.dev/github.com/dunglas/frankenphp)
- [Documentação da biblioteca Go](https://pkg.go.dev/github.com/php/frankenphp)
- [Contribuindo e depurando](CONTRIBUTING.md)
## Exemplos e esqueletos

View File

@@ -18,9 +18,9 @@ semelhante ao modo dinâmico do PHP-FPM.
As conexões enfileiradas aguardarão indefinidamente até que uma thread PHP
esteja disponível para servi-las.
Para evitar isso, você pode usar a
[configuração](config.md#configuracao-do-caddyfile) `max_wait_time` para limitar
o tempo que uma requisição pode esperar por uma thread PHP livre antes de ser
rejeitada.
[configuração](config.md#configuracao-do-caddyfile) `max_wait_time` na
configuração global do FrankenPHP para limitar o tempo que uma requisição pode
esperar por uma thread PHP livre antes de ser rejeitada.
Além disso, você pode definir um
[tempo limite de escrita razoável no Caddy](https://caddyserver.com/docs/caddyfile/options#timeouts).

View File

@@ -1,4 +1,4 @@
# Compilar a partir dos fontes
# Compilar a partir do código-fonte
Este documento explica como criar um binário FrankenPHP que carregará o PHP como
uma biblioteca dinâmica.
@@ -29,10 +29,10 @@ brew link --overwrite --force shivammathur/php/php-zts
### Compilando o PHP
Alternativamente, você pode compilar o PHP a partir dos códigos-fonte com as
Alternativamente, você pode compilar o PHP a partir do código-fonte com as
opções necessárias para o FrankenPHP seguindo estes passos.
Primeiro, [obtenha os códigos-fonte do PHP](https://www.php.net/downloads.php) e
Primeiro, [obtenha o código-fonte do PHP](https://www.php.net/downloads.php) e
extraia-os:
```console
@@ -91,10 +91,10 @@ devem ser instaladas.
Alternativamente, esses recursos podem ser desabilitados passando as tags de
compilação para o compilador Go.
| Recurso | Dependência | Tag de compilação para desabilitá-lo |
|----------------------------------------|-----------------------------------------------------------------------|--------------------------------------|
| Compressão Brotli | [Brotli](https://github.com/google/brotli) | `nobrotli` |
| Reiniciar workers ao alterar o arquivo | [Watcher C](https://github.com/e-dant/watcher/tree/release/watcher-c) | `nowatcher` |
| Recurso | Dependência | Tag de compilação para desabilitá-lo |
|---------------------------------------|-----------------------------------------------------------------------|--------------------------------------|
| Compressão Brotli | [Brotli](https://github.com/google/brotli) | `nobrotli` |
| Reiniciar workers ao alterar arquivos | [Watcher C](https://github.com/e-dant/watcher/tree/release/watcher-c) | `nowatcher` |
## Compilando a aplicação Go
@@ -115,7 +115,7 @@ CGO_CFLAGS=$(php-config --includes) \
CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" \
xcaddy build \
--output frankenphp \
--with github.com/dunglas/frankenphp/caddy \
--with github.com/php/frankenphp/caddy \
--with github.com/dunglas/mercure/caddy \
--with github.com/dunglas/vulcain/caddy
# Adicione módulos Caddy e extensões FrankenPHP extras aqui
@@ -141,7 +141,7 @@ Alternativamente, é possível compilar o FrankenPHP sem o `xcaddy` usando o
comando `go` diretamente:
```console
curl -L https://github.com/dunglas/frankenphp/archive/refs/heads/main.tar.gz | tar xz
curl -L https://github.com/php/frankenphp/archive/refs/heads/main.tar.gz | tar xz
cd frankenphp-main/caddy/frankenphp
CGO_CFLAGS=$(php-config --includes) CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" go build -tags=nobadger,nomysql,nopgx
```

View File

@@ -4,7 +4,7 @@ FrankenPHP, Caddy, bem como os módulos Mercure e Vulcain, podem ser configurado
usando
[os formatos suportados pelo Caddy](https://caddyserver.com/docs/getting-started#your-first-config).
Nas [imagens do Docker](docker.md), o `Caddyfile` está localizado em
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.
@@ -19,9 +19,9 @@ arquivos de configuração nos locais descritos acima.
## 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-<YYYYMMDD>/`
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-<YYYYMMDD>/`;
- Você deve copiar um template oficial fornecido pelo projeto PHP:
```dockerfile
@@ -37,18 +37,18 @@ 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/`
de produção é fornecido por padrão);
- Arquivos de configuração adicionais: `/etc/frankenphp/php.d/*.ini`;
- Extensões PHP: `/usr/lib/frankenphp/modules/`.
## 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 `php.ini-production` ou `php.ini-development` fornecidos
[nos fontes do PHP](https://github.com/php/php-src/).
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/).
## Configuração do Caddyfile
@@ -79,11 +79,12 @@ A [opção global](https://caddyserver.com/docs/caddyfile/concepts#global-option
max_wait_time <duracao> # 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 <chave> <valor> # Define uma diretiva php.ini. Pode ser usada várias vezes para definir múltiplas diretivas.
worker {
file <caminho> # Define o caminho para o script do worker.
file <caminho> # Define o caminho para o worker script.
num <num> # Define o número de threads PHP a serem iniciadas, o padrão é 2x o número de CPUs disponíveis.
env <chave> <valor> # Define uma variável de ambiente extra para o valor fornecido. Pode ser especificado mais de uma vez para múltiplas variáveis de ambiente.
watch <caminho> # Define o caminho para monitorar alterações no arquivo. Pode ser especificado mais de uma vez para múltiplos caminhos.
env <chave> <valor> # 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 <caminho> # Define o caminho para monitorar alterações em arquivos. Pode ser especificada mais de uma vez para múltiplos caminhos.
name <nome> # Define o nome do worker, usado em logs e métricas. Padrão: caminho absoluto do arquivo do worker.
max_consecutive_failures <num> # 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.
}
}
}
@@ -109,13 +110,15 @@ servidor:
```caddyfile
app.example.com {
root /caminho/para/aplicacao/public
php_server {
root /caminho/para/aplicacao/public
root /caminho/para/aplicacao/public # permite melhor armazenamento em cache
worker index.php <num>
}
}
outra.example.com {
root /caminho/para/outra/aplicacao/public
php_server {
root /caminho/para/outra/aplicacao/public
worker index.php <num>
@@ -162,14 +165,15 @@ php_server [<matcher>] {
root <directory> # Define a pasta raiz para o site. Padrão: diretiva `root`.
split_path <delim...> # 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 <chave> <valor> # Define uma variável de ambiente extra para o valor fornecido. Pode ser especificado mais de uma vez para múltiplas variáveis de ambiente.
env <chave> <valor> # 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 especificado mais de uma vez para múltiplos workers.
file <caminho> # Define o caminho para o script do worker, pode ser relativo à raiz do php_server
num <num> # Define o número de threads PHP a serem iniciadas, o padrão é 2x o número de threads disponíveis
worker { # Cria um worker específico para este servidor. Pode ser especificada mais de uma vez para múltiplos workers.
file <caminho> # Define o caminho para o worker script, pode ser relativo à raiz do php_server.
num <num> # Define o número de threads PHP a serem iniciadas, o padrão é 2x o número de threads disponíveis.
name <nome> # 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 <caminho> # Define o caminho para monitorar alterações no arquivo. Pode ser especificado mais de uma vez para múltiplos caminhos.
env <chave> <valor> # Define uma variável de ambiente extra para o valor fornecido. Pode ser especificado 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 php_server pai, mas podem ser sobrescritas aqui.
watch <caminho> # Define o caminho para monitorar alterações em arquivos. Pode ser especificada mais de uma vez para múltiplos caminhos.
env <chave> <valor> # 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 <caminho> # Corresponde o worker a um padrão de caminho. Substitui try_files e só pode ser usada na diretiva php_server.
}
worker <outro_arquivo> <num> # Também pode usar a forma abreviada, como no bloco global frankenphp.
}
@@ -180,7 +184,7 @@ php_server [<matcher>] {
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 nos arquivos por meio da
Os workers podem ser reiniciados em caso de alterações em arquivos por meio da
diretiva `watch`.
Isso é útil para ambientes de desenvolvimento.
@@ -224,9 +228,37 @@ Você também pode especificar um ou mais diretórios por meio de um
- Tenha cuidado ao monitorar arquivos criados em tempo de execução (como logs),
pois eles podem causar reinicializações indesejadas de workers.
O monitor de arquivos é baseado em
O monitor de arquivos é baseado no
[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`.
A diretiva `match` é uma alternativa otimizada ao `try_files`, disponível apenas
dentro do `php_server` e do `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
@@ -267,10 +299,10 @@ 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/`.
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).
[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
@@ -309,7 +341,7 @@ Você também pode alterar a configuração do PHP usando a diretiva `php_ini` n
## Habilitar o modo de depuração
Ao usar a imagem do Docker, defina a variável de ambiente `CADDY_GLOBAL_OPTIONS`
Ao usar a imagem Docker, defina a variável de ambiente `CADDY_GLOBAL_OPTIONS`
como `debug` para habilitar o modo de depuração:
```console

View File

@@ -29,7 +29,7 @@ FROM dunglas/frankenphp
COPY . /app/public
```
Em seguida, execute estes comandos para compilar e executar a imagem do Docker:
Em seguida, execute estes comandos para construir e executar a imagem Docker:
```console
docker build -t minha-app-php .
@@ -55,13 +55,13 @@ RUN install-php-extensions \
opcache
```
## Como instalar mais módulos do Caddy
## Como instalar mais módulos Caddy
O FrankenPHP é construído sobre o Caddy, e todos os
[módulos do Caddy](https://caddyserver.com/docs/modules/) podem ser usados com o
[módulos Caddy](https://caddyserver.com/docs/modules/) podem ser usados com o
FrankenPHP.
A maneira mais fácil de instalar módulos personalizados do Caddy é usar o
A maneira mais fácil de instalar módulos Caddy personalizados é usar o
[xcaddy](https://github.com/caddyserver/xcaddy):
```dockerfile
@@ -78,8 +78,8 @@ RUN CGO_ENABLED=1 \
CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" \
xcaddy build \
--output /usr/local/bin/frankenphp \
--with github.com/dunglas/frankenphp=./ \
--with github.com/dunglas/frankenphp/caddy=./caddy/ \
--with github.com/php/frankenphp=./ \
--with github.com/php/frankenphp/caddy=./caddy/ \
--with github.com/dunglas/caddy-cbrotli \
# Mercure e Vulcain estão incluídos na compilação oficial, mas sinta-se
# à vontade para removê-los
@@ -93,10 +93,10 @@ FROM dunglas/frankenphp AS runner
COPY --from=builder /usr/local/bin/frankenphp /usr/local/bin/frankenphp
```
A imagem `builder` fornecida pelo FrankenPHP contém uma versão compilada de
A imagem `builder` fornecida pelo FrankenPHP contém uma versão compilada da
`libphp`.
[Imagens de builder](https://hub.docker.com/r/dunglas/frankenphp/tags?name=builder)
são fornecidas para todas as versões do FrankenPHP e PHP, tanto para Debian
são fornecidas para todas as versões do FrankenPHP e do PHP, tanto para Debian
quanto para Alpine.
> [!TIP]
@@ -177,8 +177,8 @@ RUN \
useradd ${USER}; \
# Adiciona capacidade adicional para vincular às portas 80 e 443
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp; \
# Concede acesso de escrita a /data/caddy e /config/caddy
chown -R ${USER}:${USER} /data/caddy && chown -R ${USER}:${USER} /config/caddy
# Concede acesso de escrita a /config/caddy e /data/caddy
chown -R ${USER}:${USER} /config/caddy /data/caddy
USER ${USER}
```
@@ -203,8 +203,8 @@ RUN \
useradd ${USER}; \
# Remove a capacidade padrão
setcap -r /usr/local/bin/frankenphp; \
# Concede acesso de escrita a /data/caddy e /config/caddy
chown -R ${USER}:${USER} /data/caddy && chown -R ${USER}:${USER} /config/caddy
# Concede acesso de escrita a /config/caddy e /data/caddy
chown -R ${USER}:${USER} /config/caddy /data/caddy
USER ${USER}
```
@@ -215,17 +215,17 @@ Exemplo: `:8000`
## Atualizações
As imagens do Docker são compiladas:
As imagens Docker são construídas:
- quando uma tag de uma nova versão é criada.
- diariamente às 4h UTC, se novas versões das imagens oficiais do PHP estiverem
- Quando uma tag de uma nova versão é criada;
- Diariamente às 4h UTC, se novas versões das imagens oficiais do PHP estiverem
disponíveis.
## Versões de desenvolvimento
As versões de desenvolvimento estão disponíveis no repositório Docker
[`dunglas/frankenphp-dev`](https://hub.docker.com/repository/docker/dunglas/frankenphp-dev).
Uma nova compilação é acionada sempre que um commit é enviado para o branch
Uma nova construção é acionada sempre que um commit é enviado para o branch
principal do repositório do GitHub.
As tags `latest*` apontam para o HEAD do branch `main`.

View File

@@ -1,6 +1,6 @@
# Aplicações PHP como binários independentes
O FrankenPHP tem a capacidade de incorporar o código-fonte e os recursos de
O FrankenPHP tem a capacidade de incorporar o código-fonte e os assets de
aplicações PHP em um binário estático e independente.
Graças a esse recurso, aplicações PHP podem ser distribuídas como binários
@@ -11,7 +11,7 @@ Saiba mais sobre esse recurso
[na apresentação feita por Kévin na SymfonyCon 2023](https://dunglas.dev/2023/12/php-and-symfony-apps-as-standalone-binaries/).
Para incorporar aplicações Laravel,
[leia esta entrada específica na documentação](laravel.md#laravel-apps-as-standalone-binaries).
[leia esta entrada específica na documentação](laravel.md#aplicacoes-laravel-como-binarios-independentes).
## Preparando sua aplicação
@@ -20,9 +20,9 @@ pronta para ser incorporada.
Por exemplo, você provavelmente deseja:
- Instalar as dependências de produção da aplicação.
- Fazer o dump do carregador automático.
- Habilitar o modo de produção da sua aplicação (se houver).
- Instalar as dependências de produção da aplicação;
- Fazer o dump do carregador automático;
- Habilitar o modo de produção da sua aplicação (se houver);
- Remover arquivos desnecessários, como `.git` ou testes, para reduzir o tamanho
do seu binário final.
@@ -83,7 +83,7 @@ Docker que fornecemos.
> [`.dockerignore` padrão do Docker do Symfony](https://github.com/dunglas/symfony-docker/blob/main/.dockerignore))
> ignorarão o diretório `vendor/` e os arquivos `.env`.
> Certifique-se de ajustar ou remover o arquivo `.dockerignore` antes da
> compilação.
> construção.
2. Construa:
@@ -105,7 +105,7 @@ Se você não quiser usar o Docker ou quiser compilar um binário para macOS, us
script de shell que fornecemos:
```console
git clone https://github.com/dunglas/frankenphp
git clone https://github.com/php/frankenphp
cd frankenphp
EMBED=/caminho/para/sua/aplicacao ./build-static.sh
```
@@ -145,8 +145,8 @@ Você também pode executar os scripts PHP CLI incorporados ao seu binário:
## Extensões PHP
Por padrão, o script criará as extensões requeridas pelo arquivo `composer.json`
do seu projeto, se houver.
Por padrão, o script compilará as extensões requeridas pelo arquivo
`composer.json` do seu projeto, se houver.
Se o arquivo `composer.json` não existir, as extensões padrão serão compiladas,
conforme documentado na [entrada de compilações estáticas](static.md).

1001
docs/pt-br/extensions.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
# Usando GitHub Actions
Este repositório constrói e implementa a imagem do Docker no
[Docker Hub](https://hub.docker.com/r/dunglas/frankenphp) em cada pull request
Este repositório constrói e implanta a imagem Docker no
[Docker Hub](https://hub.docker.com/r/dunglas/frankenphp) a cada pull request
aprovado ou em seu próprio fork após a configuração.
## Configurando GitHub Actions

View File

@@ -108,7 +108,7 @@ querer executar um binário PHP para algumas tarefas, por exemplo, em
[um projeto Laravel](laravel.md) para executar
`@php artisan package:discover --ansi`.
Isso
[atualmente falha](https://github.com/dunglas/frankenphp/issues/483#issuecomment-1899890915)
[atualmente falha](https://github.com/php/frankenphp/issues/483#issuecomment-1899890915)
por dois motivos:
- O Composer não sabe como chamar o binário do FrankenPHP;
@@ -175,7 +175,7 @@ neste local.
Como alternativa, muitas distribuições, incluindo Debian, Ubuntu e Alpine,
fornecem pacotes chamados `ca-certificates` que contêm esses certificados.
Também é possível usar `SSL_CERT_FILE` e `SSL_CERT_DIR` para indicar ao OpenSSL
Também é possível usar `SSL_CERT_FILE` e `SSL_CERT_DIR` para indicar à OpenSSL
onde procurar certificados CA:
```console

View File

@@ -3,7 +3,7 @@
## Docker
Servir uma aplicação web [Laravel](https://laravel.com) com FrankenPHP é tão
fácil quanto montar o projeto no diretório `/app` da imagem oficial do Docker.
fácil quanto montar o projeto no diretório `/app` da imagem Docker oficial.
Execute este comando a partir do diretório principal da sua aplicação Laravel:
@@ -18,7 +18,7 @@ E divirta-se!
Alternativamente, você pode executar seus projetos Laravel com FrankenPHP a
partir da sua máquina local:
1. [Baixe o binário correspondente ao seu sistema](../../#getting-started).
1. [Baixe o binário correspondente ao seu sistema](../#standalone-binary).
2. Adicione a seguinte configuração a um arquivo chamado `Caddyfile` no
diretório raiz do seu projeto Laravel:
@@ -29,7 +29,7 @@ partir da sua máquina local:
# O nome de domínio do seu servidor
localhost {
# Define o diretório webroot/ como root public/
# Define o diretório raiz como public/
root public/
# Habilita a compressão (opcional)
encode zstd br gzip
@@ -68,24 +68,24 @@ php artisan octane:frankenphp
O comando `octane:frankenphp` pode receber as seguintes opções:
- `--host`: O endereço IP ao qual o servidor deve se vincular (padrão:
`127.0.0.1`).
- `--port`: A porta na qual o servidor deve estar disponível (padrão: `8000`).
`127.0.0.1`);
- `--port`: A porta na qual o servidor deve estar disponível (padrão: `8000`);
- `--admin-port`: A porta na qual o servidor de administração deve estar
disponível (padrão: `2019`).
disponível (padrão: `2019`);
- `--workers`: O número de workers que devem estar disponíveis para processar
requisições (padrão: `auto`).
requisições (padrão: `auto`);
- `--max-requests`: O número de requisições a serem processadas antes de
recarregar o servidor (padrão: `500`).
recarregar o servidor (padrão: `500`);
- `--caddyfile`: O caminho para o arquivo `Caddyfile` do FrankenPHP (padrão:
[stub de `Caddyfile` no Laravel Octane](https://github.com/laravel/octane/blob/2.x/src/Commands/stubs/Caddyfile)).
[stub do `Caddyfile` no Laravel Octane](https://github.com/laravel/octane/blob/2.x/src/Commands/stubs/Caddyfile));
- `--https`: Habilita HTTPS, HTTP/2 e HTTP/3 e gera e renova certificados
automaticamente.
automaticamente;
- `--http-redirect`: Habilita o redirecionamento de HTTP para HTTPS (somente
- habilitado se `--https` for passada).
- habilitado se `--https` for passada);
- `--watch`: Recarrega o servidor automaticamente quando a aplicação é
modificada.
modificada;
- `--poll`: Usa o polling do sistema de arquivos durante a verificação para
monitorar arquivos em uma rede.
monitorar arquivos em uma rede;
- `--log-level`: Registra mensagens de log no nível de log especificado ou acima
dele, usando o logger nativo do Caddy.
@@ -98,8 +98,8 @@ Saiba mais sobre o
## Aplicações Laravel como binários independentes
Usando o [recurso de incorporação de aplicativos do FrankenPHP](embed.md), é
possível distribuir aplicativos Laravel como binários independentes.
Usando o [recurso de incorporação de aplicações do FrankenPHP](embed.md), é
possível distribuir aplicações Laravel como binários independentes.
Siga estes passos para empacotar sua aplicação Laravel como um binário
independente para Linux:
@@ -203,7 +203,7 @@ Para fazer isso, [instale o Octane corretamente](#laravel-octane) e siga os
passos descritos na
[seção anterior](#aplicações-laravel-como-binários-independentes).
Em seguida, para iniciar o FrankenPHP em modo worker através do Octane, execute:
Em seguida, para iniciar o FrankenPHP no modo worker através do Octane, execute:
```console
PATH="$PWD:$PATH" frankenphp php-cli artisan octane:frankenphp

View File

@@ -16,6 +16,6 @@ Ao executar o FrankenPHP dentro do Docker, a URL de envio completa seria
`http://php/.well-known/mercure` (com `php` sendo o nome do contêiner que
executa o FrankenPHP).
Para enviar atualizações do Mercure do seu código, recomendamos o
Para enviar atualizações do Mercure a partir do seu código, recomendamos o
[Componente Symfony Mercure](https://symfony.com/components/Mercure) (você não
precisa do framework full-stack do Symfony para usá-lo).

View File

@@ -31,7 +31,7 @@ diretiva `frankenphp`.
Embora seja sempre melhor saber exatamente como será o seu tráfego, aplicações
reais tendem a ser mais imprevisíveis.
A [configuração](config.md#configuracao-do-caddyfile) `max_threads` permite que
o FrankenPHP gere threads adicionais automaticamente em tempo de execução até o
o FrankenPHP crie threads adicionais automaticamente em tempo de execução até o
limite especificado.
`max_threads` pode ajudar você a descobrir quantas threads são necessárias para
lidar com seu tráfego e pode tornar o servidor mais resiliente a picos de
@@ -44,7 +44,7 @@ necessárias.
`max_threads` é semelhante ao
[pm.max_children](https://www.php.net/manual/pt_BR/install.fpm.configuration.php#pm.max-children)
do PHP FPM.
A principal diferença é que o FrankenPHP usa threads em vez de processos e os
A principal diferença é que o FrankenPHP usa threads em vez de processos e as
delega automaticamente entre diferentes worker scripts e o modo clássico,
conforme necessário.
@@ -74,19 +74,19 @@ Em ambientes de produção, recomendamos o uso do FrankenPHP vinculado à `glibc
Isso pode ser feito usando as imagens Docker do Debian (o padrão), baixando o
binário com sufixo -gnu de nossos
[Lançamentos](https://github.com/dunglas/frankenphp/releases) ou
[compilando o FrankenPHP a partir dos fontes](compile.md).
[Lançamentos](https://github.com/php/frankenphp/releases) ou
[compilando o FrankenPHP a partir do código-fonte](compile.md).
Como alternativa, fornecemos binários `musl` estáticos compilados com
[o alocador `mimalloc`](https://github.com/microsoft/mimalloc), o que alivia os
problemas em cenários com threads.
## Configuração de Tempo de Execução do Go
## Configuração do runtime do Go
O FrankenPHP é escrito em Go.
Em geral, o tempo de execução do Go não requer nenhuma configuração especial,
mas em certas circunstâncias, configurações específicas melhoram o desempenho.
Em geral, o runtime do Go não requer nenhuma configuração especial, mas em
certas circunstâncias, configurações específicas melhoram o desempenho.
Você provavelmente deseja definir a variável de ambiente `GODEBUG` como
`cgocheck=0` (o padrão nas imagens Docker do FrankenPHP).
@@ -96,8 +96,8 @@ limita a memória disponível para os contêineres, defina a variável de ambien
`GOMEMLIMIT` para a quantidade de memória disponível.
Para mais detalhes,
[a página de documentação do Go dedicada a este assunto](https://pkg.go.dev/runtime#hdr-Environment_Variables)
é uma leitura obrigatória para aproveitar ao máximo o tempo de execução.
[a página da documentação do Go dedicada a este assunto](https://pkg.go.dev/runtime#hdr-Environment_Variables)
é uma leitura obrigatória para aproveitar ao máximo o runtime.
## `file_server`
@@ -132,7 +132,8 @@ Isso pode reduzir significativamente o número de operações desnecessárias co
arquivos.
Uma abordagem alternativa com 0 operações desnecessárias no sistema de arquivos
seria usar a diretiva `php` e dividir os arquivos do PHP por caminho.
seria usar a diretiva `php` e separar os arquivos estáticos do PHP usando
caminhos.
Essa abordagem funciona bem se toda a sua aplicação for servida por um arquivo
de entrada.
Um exemplo de [configuração](config.md#configuracao-do-caddyfile) que serve
@@ -200,15 +201,15 @@ FrankenPHP.
Em particular:
- verifique se o [OPcache](https://www.php.net/manual/pt_BR/book.opcache.php)
está instalado, habilitado e configurado corretamente.
- habilite as
[otimizações do carregador automático do Composer](https://getcomposer.org/doc/articles/autoloader-optimization.md).
- certifique-se de que o cache do `realpath` seja grande o suficiente para as
necessidades da sua aplicação.
- use
- Verifique se o [OPcache](https://www.php.net/manual/pt_BR/book.opcache.php)
está instalado, habilitado e configurado corretamente;
- Habilite as
[otimizações do carregador automático do Composer](https://getcomposer.org/doc/articles/autoloader-optimization.md);
- Certifique-se de que o cache do `realpath` seja grande o suficiente para as
necessidades da sua aplicação;
- Use
[pré-carregamento](https://www.php.net/manual/pt_BR/opcache.preloading.php).
Para mais detalhes, leia
[a entrada dedicada na documentação do Symfony](https://symfony.com/doc/current/performance.html)
(a maioria das dicas é útil mesmo se você não usar o Symfony).
(a maioria das dicas é útil mesmo se você não usa o Symfony).

View File

@@ -3,7 +3,7 @@
Neste tutorial, aprenderemos como implantar uma aplicação PHP em um único
servidor usando o Docker Compose.
Se você estiver usando o Symfony, prefira ler a entrada de documentação
Se você estiver usando o Symfony, leia a documentação
[Implantar em produção](https://github.com/dunglas/symfony-docker/blob/main/docs/production.md)
do projeto Docker do Symfony (que usa FrankenPHP).
@@ -23,6 +23,10 @@ ENV SERVER_NAME=seu-nome-de-dominio.example.com
# Se quiser desabilitar o HTTPS, use este valor:
#ENV SERVER_NAME=:80
# Se o seu projeto não estiver usando o diretório "public" como diretório raiz,
# você pode defini-lo aqui:
# ENV SERVER_ROOT=web/
# Habilita as configurações de produção do PHP
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
@@ -32,9 +36,9 @@ COPY . /app/public
#COPY . /app
```
Consulte [Criando uma imagem Docker personalizada](docker.md) para mais detalhes
e opções, e para aprender como personalizar a configuração, instalar extensões
PHP e módulos Caddy.
Consulte [Construindo uma imagem Docker personalizada](docker.md) para mais
detalhes e opções, e para aprender como personalizar a configuração, instalar
extensões PHP e módulos Caddy.
Se o seu projeto usa o Composer, certifique-se de incluí-lo na imagem Docker e
instalar suas dependências.
@@ -76,7 +80,7 @@ Finalmente, se você usa Git, faça o commit e o push desses arquivos.
Para implantar sua aplicação em produção, você precisa de um servidor.
Neste tutorial, usaremos uma máquina virtual fornecida pela DigitalOcean, mas
qualquer servidor Linux pode funcionar.
qualquer servidor Linux pode ser usado.
Se você já possui um servidor Linux com o Docker instalado, pode pular direto
para [a próxima seção](#configurando-um-nome-de-domínio).
@@ -156,7 +160,7 @@ Acesse `https://seu-nome-de-dominio.example.com` e divirta-se!
> [!CAUTION]
>
> O Docker pode ter uma camada de cache; certifique-se de ter a compilação
> O Docker pode ter uma camada de cache; certifique-se de ter a construção
> correta para cada implantação ou reconstrua seu projeto com a opção
> `--no-cache` para evitar problemas de cache.

View File

@@ -132,7 +132,7 @@ Execute o seguinte script para criar um binário estático para macOS (você
precisa ter o [Homebrew](https://brew.sh/) instalado):
```console
git clone https://github.com/dunglas/frankenphp
git clone https://github.com/php/frankenphp
cd frankenphp
./build-static.sh
```
@@ -145,34 +145,34 @@ sistemas Unix) e é usado internamente pelas imagens Docker que fornecemos.
As seguintes variáveis de ambiente podem ser passadas para `docker build` e para
o script `build-static.sh` para personalizar a compilação estática:
- `FRANKENPHP_VERSION`: a versão do FrankenPHP a ser usada.
- `PHP_VERSION`: a versão do PHP a ser usada.
- `FRANKENPHP_VERSION`: a versão do FrankenPHP a ser usada;
- `PHP_VERSION`: a versão do PHP a ser usada;
- `PHP_EXTENSIONS`: as extensões PHP a serem compiladas
([lista de extensões suportadas](https://static-php.dev/en/guide/extensions.html)).
([lista de extensões suportadas](https://static-php.dev/en/guide/extensions.html));
- `PHP_EXTENSION_LIBS`: bibliotecas extras a serem compiladas que adicionam
recursos às extensões.
recursos às extensões;
- `XCADDY_ARGS`: argumentos a passar para o
[`xcaddy`](https://github.com/caddyserver/xcaddy), por exemplo, para adicionar
módulos Caddy extras.
- `EMBED`: caminho da aplicação PHP a ser incorporada no binário.
módulos Caddy extras;
- `EMBED`: caminho da aplicação PHP a ser incorporada no binário;
- `CLEAN`: quando definida, a `libphp` e todas as suas dependências são
compiladas do zero (sem cache).
- `NO_COMPRESS`: não compacta o binário resultante usando UPX.
compiladas do zero (sem cache);
- `NO_COMPRESS`: não compacta o binário resultante usando UPX;
- `DEBUG_SYMBOLS`: quando definida, os símbolos de depuração não serão removidos
e serão adicionados ao binário.
e serão adicionados ao binário;
- `MIMALLOC`: (experimental, somente Linux) substitui `mallocng` da `musl` por
[`mimalloc`](https://github.com/microsoft/mimalloc) para melhor desempenho.
Recomendamos usar isso apenas para compilações direcionadas à `musl`; para
`glibc`, prefira desabilitar essa opção e usar
[`LD_PRELOAD`](https://microsoft.github.io/mimalloc/overrides.html) ao
executar seu binário.
executar seu binário;
- `RELEASE`: (somente pessoas mantenedoras) quando definida, o binário
resultante será enviado para o GitHub.
## Extensões
Com os binários `glibc` ou baseados em macOS, você pode carregar extensões PHP
dinamicamente.
Com os binários baseados na `glibc` ou no macOS, você pode carregar extensões
PHP dinamicamente.
No entanto, essas extensões precisarão ser compiladas com suporte a ZTS.
Como a maioria dos gerenciadores de pacotes não oferece atualmente versões ZTS
de suas extensões, você terá que compilá-las você mesmo.

View File

@@ -8,11 +8,11 @@ O FrankenPHP processará as requisições recebidas em poucos milissegundos.
### Docker
Defina o valor da variável de ambiente `FRANKENPHP_CONFIG` como
`worker /caminho/para/seu/script/worker.php`:
`worker /caminho/para/seu/worker/script.php`:
```console
docker run \
-e FRANKENPHP_CONFIG="worker /app/caminho/para/seu/script/worker.php" \
-e FRANKENPHP_CONFIG="worker /app/caminho/para/seu/worker/script.php" \
-v $PWD:/app \
-p 80:80 -p 443:443 -p 443:443/udp \
dunglas/frankenphp
@@ -24,7 +24,7 @@ Use a opção `--worker` do comando `php-server` para servir o conteúdo do
diretório atual usando um worker:
```console
frankenphp php-server --worker /caminho/para/seu/script/worker.php
frankenphp php-server --worker /caminho/para/seu/worker/script.php
```
Se a sua aplicação PHP estiver [embutida no binário](embed.md), você pode
@@ -32,30 +32,29 @@ adicionar um `Caddyfile` personalizado no diretório raiz da aplicação.
Ele será usado automaticamente.
Também é possível
[reiniciar o worker em caso de alterações no arquivo](config.md#monitorando-alteracoes-em-arquivos)
[reiniciar o worker em caso de alterações em arquivos](config.md#monitorando-alteracoes-em-arquivos)
com a opção `--watch`.
O comando a seguir acionará uma reinicialização se qualquer arquivo terminado em
`.php` no diretório `/caminho/para/sua/aplicacao/` ou subdiretórios for
modificado:
```console
frankenphp php-server --worker /caminho/para/seu/script/worker.php --watch="/caminho/para/sua/aplicacao/**/*.php"
frankenphp php-server --worker /caminho/para/seu/worker/script.php --watch="/caminho/para/sua/aplicacao/**/*.php"
```
## Tempo de execução do Symfony
## Symfony Runtime
O modo worker do FrankenPHP é suportado pelo
[Componente Symfony Runtime](https://symfony.com/doc/current/components/runtime.html).
Para iniciar qualquer aplicação Symfony em um worker, instale o pacote
FrankenPHP do
[tempo de execução do PHP](https://github.com/php-runtime/runtime):
FrankenPHP do [PHP Runtime](https://github.com/php-runtime/runtime):
```console
composer require runtime/frankenphp-symfony
```
Inicie seu servidor de aplicações definindo a variável de ambiente `APP_RUNTIME`
para usar o tempo de execução Symfony do FrankenPHP:
para usar o Symfony Runtime do FrankenPHP:
```console
docker run \
@@ -83,7 +82,7 @@ uma biblioteca de terceiros:
// interrompida
ignore_user_abort(true);
// Inicializa sua aplicação
// Inicializa a aplicação
require __DIR__.'/vendor/autoload.php';
$myApp = new \App\Kernel();
@@ -125,7 +124,7 @@ docker run \
dunglas/frankenphp
```
Por padrão, 2 workers por CPU são iniciados.
Por padrão, são iniciados 2 workers por CPU.
Você também pode configurar o número de workers a serem iniciados:
```console
@@ -151,7 +150,7 @@ requisições a serem processadas, definindo uma variável de ambiente chamada
Embora seja possível reiniciar os workers
[em alterações de arquivo](config.md#monitorando-alteracoes-em-arquivos), também
é possível reiniciar todos os workers normalmente por meio da
é possível reiniciar todos os workers graciosamente por meio da
[API de administração do Caddy](https://caddyserver.com/docs/api).
Se o administrador estiver habilitado no seu
[Caddyfile](config.md#configuracao-do-caddyfile), você pode executar ping no
@@ -166,12 +165,24 @@ curl -X POST http://localhost:2019/frankenphp/workers/restart
Se um worker script travar com um código de saída diferente de zero, o
FrankenPHP o reiniciará com uma estratégia de backoff exponencial.
Se o worker script permanecer ativo por mais tempo do que o último backoff \* 2,
ele não penalizará o worker script e o reiniciará novamente.
ele não irá penalizar o worker script e reiniciá-lo novamente.
No entanto, se o worker script continuar a falhar com um código de saída
diferente de zero em um curto período de tempo (por exemplo, com um erro de
digitação em um script), o FrankenPHP travará com o erro:
`too many consecutive failures` (muitas falhas consecutivas).
O número de falhas consecutivas pode ser configurado no seu
[Caddyfile](config.md#caddyfile-config) com a opção `max_consecutive_failures`:
```caddyfile
frankenphp {
worker {
# ...
max_consecutive_failures 10
}
}
```
## Comportamento das superglobais
As

View File

@@ -9,10 +9,10 @@ comparação com o uso direto do servidor web (sobrecarga de memória, desempenh
reduzido...).
O FrankenPHP permite delegar o envio de arquivos estáticos ao servidor web
**após** a execução de código PHP personalizado.
**após** a execução do código PHP personalizado.
Para fazer isso, sua aplicação PHP precisa simplesmente definir um cabeçalho
HTTP personalizado contendo o caminho do arquivo a ser servido.
Para fazer isso, sua aplicação PHP precisa definir um cabeçalho HTTP
personalizado contendo o caminho do arquivo a ser servido.
O FrankenPHP cuida do resto.
Esse recurso é conhecido como **`X-Sendfile`** para Apache e