Бинарная упаковка
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