4.8 KiB
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. Este é o método recomendado.
Como alternativa, compilações totalmente e principalmente estáticas também podem ser criadas.
Instalar o PHP
O FrankenPHP é compatível com PHP 8.2 e versões superiores.
Com o Homebrew (Linux e Mac)
A maneira mais fácil de instalar uma versão da libphp compatível com o
FrankenPHP é usar os pacotes ZTS fornecidos pelo
Homebrew PHP.
Primeiro, se ainda não o fez, instale o Homebrew.
Em seguida, instale a variante ZTS do PHP, o Brotli (opcional, para suporte à compressão) e o watcher (opcional, para detecção de alterações em arquivos):
brew install shivammathur/php/php-zts brotli watcher
brew link --overwrite --force shivammathur/php/php-zts
Compilando o PHP
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 o código-fonte do PHP e extraia-os:
tar xf php-*
cd php-*/
Em seguida, execute o script configure com as opções necessárias para sua
plataforma.
As seguintes flags ./configure são obrigatórias, mas você pode adicionar
outras, por exemplo, para compilar extensões ou recursos adicionais.
Linux
./configure \
--enable-embed \
--enable-zts \
--disable-zend-signals \
--enable-zend-max-execution-timers
Mac
Use o gerenciador de pacotes Homebrew para instalar as dependências necessárias e opcionais:
brew install libiconv bison brotli re2c pkg-config watcher
echo 'export PATH="/opt/homebrew/opt/bison/bin:$PATH"' >> ~/.zshrc
Em seguida, execute o script configure:
./configure \
--enable-embed \
--enable-zts \
--disable-zend-signals \
--with-iconv=/opt/homebrew/opt/libiconv/
Compilar o PHP
Finalmente, compile e instale o PHP:
make -j"$(getconf _NPROCESSORS_ONLN)"
sudo make install
Instalar dependências opcionais
Alguns recursos do FrankenPHP dependem de dependências opcionais do sistema que 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 | nobrotli |
| Reiniciar workers ao alterar arquivos | Watcher C | nowatcher |
Compilando a aplicação Go
Agora você pode compilar o binário final.
Usando o xcaddy
A maneira recomendada é usar o xcaddy
para compilar o FrankenPHP.
O xcaddy também permite adicionar facilmente
módulos Caddy personalizados e
extensões FrankenPHP:
CGO_ENABLED=1 \
XCADDY_GO_BUILD_FLAGS="-ldflags='-w -s' -tags=nobadger,nomysql,nopgx" \
CGO_CFLAGS=$(php-config --includes) \
CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" \
xcaddy build \
--output frankenphp \
--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
Tip
Se você estiver usando a
libcmusl(o padrão no Alpine Linux) e Symfony, pode ser necessário aumentar o tamanho da pilha padrão. Caso contrário, você poderá receber erros comoPHP Fatal error: Maximum call stack size of 83360 bytes reached during compilation. Try splitting expression.Para fazer isso, altere a variável de ambiente
XCADDY_GO_BUILD_FLAGSpara algo comoXCADDY_GO_BUILD_FLAGS=$'-ldflags "-w -s -extldflags \'-Wl,-z,stack-size=0x80000\'"'(altere o valor do tamanho da pilha de acordo com as necessidades da sua aplicação).
Sem o xcaddy
Alternativamente, é possível compilar o FrankenPHP sem o xcaddy usando o
comando go diretamente:
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