* feat: add Brazilian Portuguese * Translate file README.md * Update file README.md * Translate file docs/classic.md * Translate file docs/worker.md * Translate file docs/early-hints.md * Translate file docs/mercure.md * Translate file docs/x-sendfile.md * Translate file docs/config.md * Translate file docs/docker.md * Minor fixes * Translate file docs/production.md * Translate file CONTRIBUTING.md * Minor fixes * Translate file docs/performance.md * Minor fixes * Translate file docs/embed.md * Minor fixes * Minor fixes * Translate file docs/static.md * Translate file docs/compile.md * Minor fixes * Translate file docs/metrics.md * Translate file docs/laravel.md * Translate file docs/known-issues.md * Minor fixes * Translate file docs/github-actions.md * Fix build * Fix build * fix: remove text already translated * feat: update translation * fix: format comments based on other translations
5.2 KiB
Aplicações PHP como binários independentes
O FrankenPHP tem a capacidade de incorporar o código-fonte e os recursos 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 independentes que incluem a própria aplicação, o interpretador PHP e o Caddy, um servidor web de nível de produção.
Saiba mais sobre esse recurso na apresentação feita por Kévin na SymfonyCon 2023.
Para incorporar aplicações Laravel, leia esta entrada específica na documentação.
Preparando sua aplicação
Antes de criar o binário independente, certifique-se de que sua aplicação esteja 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).
- Remover arquivos desnecessários, como
.gitou testes, para reduzir o tamanho do seu binário final.
Por exemplo, para uma aplicação Symfony, você pode usar os seguintes comandos:
# Exporta o projeto para se livrar de .git/, etc.
mkdir $TMPDIR/minha-aplicacao-preparada
git archive HEAD | tar -x -C $TMPDIR/minha-aplicacao-preparada
cd $TMPDIR/minha-aplicacao-preparada
# Define as variáveis de ambiente adequadas
echo APP_ENV=prod > .env.local
echo APP_DEBUG=0 >> .env.local
# Remove os testes e outros arquivos desnecessários para economizar espaço.
# Como alternativa, adicione esses arquivos com o atributo export-ignore no seu
# arquivo .gitattributes.
rm -Rf tests/
# Instala as dependências
composer install --ignore-platform-reqs --no-dev -a
# Otimiza o arquivo .env
composer dump-env prod
Personalizando a configuração
Para personalizar
a configuração, você pode colocar um arquivo Caddyfile e um
arquivo php.ini no diretório principal da aplicação a ser incorporada
($TMPDIR/minha-aplicacao-preparada no exemplo anterior).
Criando um binário do Linux
A maneira mais fácil de criar um binário do Linux é usar o builder baseado em Docker que fornecemos.
-
Crie um arquivo chamado
static-build.Dockerfileno repositório da sua aplicação:FROM --platform=linux/amd64 dunglas/frankenphp:static-builder # Copia sua aplicação WORKDIR /go/src/app/dist/app COPY . . # Compila o binário estático WORKDIR /go/src/app/ RUN EMBED=dist/app/ ./build-static.shCaution
Alguns arquivos
.dockerignore(por exemplo, o.dockerignorepadrão do Docker do Symfony) ignorarão o diretóriovendor/e os arquivos.env. Certifique-se de ajustar ou remover o arquivo.dockerignoreantes da compilação. -
Construa:
docker build -t aplicacao-estatica -f static-build.Dockerfile . -
Extraia o binário:
docker cp $(docker create --name aplicacao-estatica-tmp aplicacao-estatica):/go/src/app/dist/frankenphp-linux-x86_64 minha-aplicacao ; docker rm aplicacao-estatica-tmp
O binário resultante é o arquivo minha-aplicacao no diretório atual.
Criando um binário para outros sistemas operacionais
Se você não quiser usar o Docker ou quiser compilar um binário para macOS, use o script de shell que fornecemos:
git clone https://github.com/dunglas/frankenphp
cd frankenphp
EMBED=/caminho/para/sua/aplicacao ./build-static.sh
O binário resultante é o arquivo frankenphp-<os>-<arch> no diretório dist/.
Usando o binário
É isso! O arquivo minha-aplicacao (ou dist/frankenphp-<os>-<arch> em outros
sistemas operacionais) contém sua aplicação independente!
Para iniciar a aplicação web, execute:
./minha-aplicacao php-server
Se a sua aplicação contiver um worker script, inicie o worker com algo como:
./minha-aplicacao php-server --worker public/index.php
Para habilitar HTTPS (um certificado Let's Encrypt é criado automaticamente), HTTP/2 e HTTP/3, especifique o nome de domínio a ser usado:
./minha-aplicacao php-server --domain localhost
Você também pode executar os scripts PHP CLI incorporados ao seu binário:
./minha-aplicacao php-cli bin/console
Extensões PHP
Por padrão, o script criará 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.
Para personalizar as extensões, use a variável de ambiente PHP_EXTENSIONS.
Personalizando a compilação
Leia a documentação da compilação estática para ver como personalizar o binário (extensões, versão do PHP...).
Distribuindo o binário
No Linux, o binário criado é compactado usando UPX.
No Mac, para reduzir o tamanho do arquivo antes de enviá-lo, você pode
compactá-lo.
Recomendamos usar xz.