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 nophp.ini
, configurandophar.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 comandophp -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