이진 패키징

webman은 프로젝트를 이진 파일로 패키징하는 것을 지원하여, webman이 PHP 환경 없이도 Linux 시스템에서 실행될 수 있습니다.

주의
패키징된 파일은 현재 x86_64 아키텍처의 Linux 시스템에서만 실행을 지원하며, Windows 및 Mac 시스템은 지원하지 않습니다.
php.ini의 phar 구성 옵션을 끄고, 즉 phar.readonly = 0으로 설정해야 합니다.

명령줄 도구 설치

composer require webman/console

패키징

명령어를 실행합니다.

php webman build:bin

동시에 어떤 PHP 버전으로 패키징할지 지정할 수 있습니다. 예:

php webman build:bin 8.1

패키징 후 build 디렉터리에 webman.bin 파일이 생성됩니다.

시작

webman.bin을 Linux 서버에 업로드한 후 ./webman.bin start 또는 ./webman.bin start -d를 실행하여 시작합니다.

원리

  • 먼저 로컬 webman 프로젝트를 phar 파일로 패키징합니다.
  • 그런 다음 원격으로 php8.x.micro.sfx를 로컬로 다운로드합니다.
  • php8.x.micro.sfx와 phar 파일을 결합하여 하나의 이진 파일로 만듭니다.

주의 사항

  • 로컬 PHP 버전과 패키징 버전이 일치하는 것을 권장합니다. 예를 들어 로컬은 PHP 8.1이고, 패키징도 PHP 8.1을 사용하여 호환성 문제를 피해야 합니다.
  • 패키징 과정에서 PHP 8의 소스 코드가 다운로드되지만, 로컬에 설치되지는 않으며, 로컬 PHP 환경에 영향을 주지 않습니다.
  • webman.bin은 현재 x86_64 아키텍처의 Linux 시스템에서만 실행을 지원하며, Mac 시스템에서는 실행이 지원되지 않습니다.
  • 패키징된 프로젝트는 reload를 지원하지 않으며, 코드 업데이트 시 restart로 재시작해야 합니다.
  • 기본적으로 env 파일은 패키징되지 않습니다(config/plugin/webman/console/app.php의 exclude_files에서 제어됨), 따라서 시작할 때 env 파일은 webman.bin과 동일한 디렉터리에 두어야 합니다.
  • 실행 과정에서 webman.bin이 있는 디렉터리에 runtime 디렉터리가 생성되며, 로그 파일을 저장하는 데 사용됩니다.
  • 현재 webman.bin은 외부 php.ini 파일을 읽지 않으며, 사용자 정의 php.ini가 필요하면 /config/plugin/webman/console/app.php 파일의 custom_ini에서 설정해야 합니다.
  • 패키징할 필요가 없는 일부 파일은 config/plugin/webman/console/app.php에서 제외할 수 있으며, 패키징된 파일의 크기가 너무 커지는 것을 방지할 수 있습니다.
  • 이진 패키징은 swoole 코루틴을 사용할 수 없습니다.
  • 사용자 업로드 파일을 이진 패키지 내에 저장하지 마십시오. phar:// 프로토콜을 통해 사용자 업로드 파일을 조작하는 것은 매우 위험합니다(Phar 역직렬화 취약점). 사용자 업로드 파일은 반드시 패키지 외부의 디스크에 별도로 저장해야 합니다.
  • 비즈니스 요구 사항으로 public 디렉터리에 파일을 업로드해야 하는 경우, public 디렉터리를 독립적으로 webman.bin이 있는 디렉터리에 두어야 하며, 이때 config/app.php를 다음과 같이 구성하고 다시 패키징해야 합니다.
    'public_path' => base_path(false) . DIRECTORY_SEPARATOR . 'public',

정적 PHP 단독 다운로드

가끔 PHP 환경을 배포하고 싶지 않고 PHP 실행 파일만 필요한 경우, 여기에서 정적 PHP 다운로드를 클릭하여 다운로드할 수 있습니다.

提示
정적 PHP에 php.ini 파일을 지정해야 하는 경우, 다음 명령을 사용하십시오: php -c /your/path/php.ini start.php start -d

지원하는 확장

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

프로젝트 출처

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