Бинарная упаковка

Webman поддерживает упаковку проекта в единственный бинарный файл, что позволяет запускать Webman на Linux-системах без окружения PHP.

Внимание
Упакованный файл в настоящее время поддерживает работу только на Linux-системах с архитектурой x86_64 и не поддерживает Windows и macOS.
Необходимо отключить опцию конфигурации php.ini для phar, установив phar.readonly = 0.

Установка командного инструмента

composer require webman/console

Упаковка

Выполните команду

php webman build:bin

При этом можно указать, с какой версией PHP упаковывать, например

php webman build:bin 8.1

После упаковки в каталоге bulid будет создан файл 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 в настоящее время поддерживает работу только на Linux-системах с архитектурой x86_64, не поддерживает работу на macOS.
  • Упакованный проект не поддерживает перезагрузку (reload), для обновления кода необходимо использовать перезапуск (restart).
  • По умолчанию env-файл не упаковывается (это контролируется параметром exclude_files в config/plugin/webman/console/app.php), поэтому во время запуска файл 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.ini для статического PHP, используйте следующую команду 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