Empacotamento Binário

O webman suporta empacotar o projeto em um único arquivo binário, permitindo que o webman funcione em sistemas Linux sem um ambiente PHP.

Atenção
O arquivo empacotado atualmente só é suportado em sistemas Linux com arquitetura x86_64, não suportando sistemas Windows e Mac.
É necessário desativar a opção de configuração phar no php.ini, configurando phar.readonly = 0.

Instalação da Ferramenta de Linha de Comando

composer require webman/console

Empacotamento

Execute o comando

php webman build:bin

Você também pode especificar a versão do PHP para empacotar, por exemplo:

php webman build:bin 8.1

Após o empacotamento, um arquivo webman.bin será gerado no diretório bulid.

Inicialização

Envie o webman.bin para o servidor Linux e execute ./webman.bin start ou ./webman.bin start -d para iniciar.

Princípio

  • Primeiro, o projeto local do webman é empacotado em um arquivo phar.
  • Em seguida, o php8.x.micro.sfx é baixado para o local.
  • O php8.x.micro.sfx e o arquivo phar são concatenados em um único arquivo binário.

Considerações

  • É fortemente recomendado que a versão do PHP local e a versão empacotada sejam as mesmas, por exemplo, se o local é PHP 8.1, use PHP 8.1 para empacotar, evitando problemas de compatibilidade.
  • O empacotamento baixará o código-fonte do PHP 8, mas não instalará localmente, portanto, não afetará o ambiente PHP local.
  • O webman.bin atualmente só suporta execução em sistemas Linux com arquitetura x86_64, e não suporta execução em sistemas Mac.
  • O projeto empacotado não suporta reload; para atualizar o código, é necessário reiniciar com restart.
  • Por padrão, o arquivo env não é incluído no empacotamento (controlado pelo exclude_files em config/plugin/webman/console/app.php), portanto, o arquivo env deve ser colocado no mesmo diretório que o webman.bin ao iniciar.
  • Durante a execução, um diretório runtime será gerado no diretório onde o webman.bin está localizado, para armazenar os arquivos de log.
  • Atualmente, o webman.bin não lerá arquivos php.ini externos; se você precisar de um php.ini personalizado, configure o custom_ini no arquivo /config/plugin/webman/console/app.php.
  • Alguns arquivos não precisam ser empacotados; você pode configurá-los para serem excluídos em config/plugin/webman/console/app.php, evitando que o arquivo empacotado fique muito grande.
  • O empacotamento binário não suporta o uso de corrotinas swoole.
  • Nunca armazene arquivos enviados pelos usuários dentro do pacote binário, pois operar arquivos enviados pelo usuário com o protocolo phar:// é extremamente perigoso (vulnerabilidade de desserialização de phar). Arquivos enviados pelo usuário devem ser armazenados separadamente em um disco fora do pacote.
  • Se sua aplicação precisar enviar arquivos para o diretório public, você deve separá-lo e colocá-lo no diretório onde o webman.bin está localizado. Neste caso, você precisa configurar config/app.php da seguinte forma e reempacotar.
    'public_path' => base_path(false) . DIRECTORY_SEPARATOR . 'public',

Download Separado do PHP Estático

Às vezes, você só não quer implantar o ambiente PHP, apenas precisando de um arquivo executável PHP. Clique aqui para baixar PHP estático.

Dica
Se você precisar especificar um arquivo php.ini para o PHP estático, use o seguinte comando php -c /your/path/php.ini start.php start -d.

Extensões Suportadas

Core, date, libxml, openssl, pcre, sqlite3, zlib, amqp, apcu, bcmath, calendar, ctype, curl, dba, dom, sockets, event, hash, fileinfo, filter, gd, gettext, json, iconv, SPL, session, standard, mbstring, igbinary, imagick, exif, mongodb, msgpack, mysqlnd, mysqli, pcntl, PDO, pdo_mysql, pdo_pgsql, pdo_sqlite, pdo_sqlsrv, pgsql, Phar, posix, readline, redis, Reflection, shmop, SimpleXML, soap, sodium, sqlsrv, sysvmsg, sysvsem, sysvshm, tokenizer, xlswriter, xml, xmlreader, xmlwriter, xsl, zip, memcache, Zend OPcache.

Origem do Projeto

https://github.com/crazywhalecc/static-php-cli
https://github.com/walkor/static-php-cli