mirror of
https://github.com/dunglas/frankenphp.git
synced 2025-12-24 13:38:11 +08:00
feat: translate file docs/extensions.md (#1843)
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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 dá 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
|
||||
|
||||
@@ -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).
|
||||
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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`.
|
||||
|
||||
@@ -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
1001
docs/pt-br/extensions.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 só 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
|
||||
|
||||
Reference in New Issue
Block a user