バイナリパッケージ
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
パッケージ化後、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バージョンとパッケージバージョンが一致することを強く推奨します。例えば、ローカルがPHP8.1の場合、パッケージもPHP8.1を使用し、互換性の問題を避けます。
- パッケージ化はPHP8のソースコードをダウンロードしますが、ローカルにインストールすることはありませんので、ローカルの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