webman支持将项目打包成一个二进制文件,这使得webman无需php环境也能在linux系统运行起来。
注意
- 打包后的文件目前只支持运行在
x86_64
架构的linux
系统上,不支持mac系统 - 需要关闭
php.ini
的phar
配置选项,既设置phar.readonly = 0
安装webman
代码语言:javascript复制composer create-project workerman/webman webman2024
安装命令行
代码语言:javascript复制cd webman2024
composer require webman/console
配置
打开 webman2024/config/plugin/webman/console/app.php
文件,修改以下配置
'exclude_pattern' => '#^(?!.*(composer.json|/.github/|/.idea/|/.git/|/.setting/|/runtime/|/vendor-bin/|vendor/webman/admin))(.*)$#',
该配置项主要用于打包时排除一些无用的目录及文件,避免打包体积过大。
打包
运行命令
代码语言:javascript复制/usr/local/php-8.2.14/bin/php webman build:bin
如果提示以下信息表示没有关闭php.ini
的phar
配置选项
代码语言:javascript复制重新打包
webman2024$ /usr/local/php-8.2.14/bin/php webman build:bin 8.2
Phar packing...
Files collect complete, begin add file to Phar.
Write requests to the Phar archive, save changes to disk.
Use PHP8.2 ...
Saved webman.bin to /home/www/build/webman2024/build/webman.bin
Build Success!
打包后会在bulid
目录生成一个webman.bin
文件
.
├── build
│ ├── php8.2.micro.sfx
│ ├── php8.2.micro.sfx.zip
│ ├── webman.bin
│ └── webman.phar
启动
将webman.bin
上传至Linux
服务器,执行 ./webman.bin start
或 ./webman.bin start -d
即可启动。
$ ./webman.bin start
Workerman[./webman.bin] start in DEBUG mode
------------------------------------------- WORKERMAN -------------------------------------------
Workerman version:4.1.14 PHP version:8.2.8 Event-Loop:WorkermanEventsEvent
-------------------------------------------- WORKERS --------------------------------------------
proto user worker listen processes status
tcp www webman http://0.0.0.0:8787 8 [OK]
tcp www monitor none 1 [OK]
-------------------------------------------------------------------------------------------------
Press Ctrl C to stop. Start success.
查看运行状态
代码语言:javascript复制$ ./webman.bin status
Workerman[./webman.bin] status
----------------------------------------------GLOBAL STATUS----------------------------------------------------
Workerman version:4.1.14 PHP version:8.2.8
start time:2024-01-03 09:06:20 run 0 days 0 hours
load average: 0.16, 0.11, 0.09 event-loop:WorkermanEventsEvent
2 workers 9 processes
worker_name exit_status exit_count
webman 0 0
monitor 0 0
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid memory listening worker_name connections send_fail timers total_request qps status
13279 99.06M http://0.0.0.0:8787 webman 0 0 0 0 0 [idle]
13280 99.06M http://0.0.0.0:8787 webman 0 0 0 0 0 [idle]
13281 99.06M http://0.0.0.0:8787 webman 0 0 0 0 0 [idle]
13283 99.06M http://0.0.0.0:8787 webman 0 0 0 0 0 [idle]
13285 99.06M http://0.0.0.0:8787 webman 0 0 0 0 0 [idle]
13286 99.06M http://0.0.0.0:8787 webman 0 0 0 0 0 [idle]
13287 99.06M http://0.0.0.0:8787 webman 0 0 0 0 0 [idle]
13289 99.06M http://0.0.0.0:8787 webman 0 0 0 0 0 [idle]
13291 98.68M none monitor 0 0 1 0 0 [idle]
----------------------------------------------PROCESS STATUS---------------------------------------------------
Summary 890M - - 0 0 1 0 0 [Summary]
打包原理
- 将本地
webman
项目打包成一个phar
文件 - 然后远程下载
php8.x.micro.sfx
到本地 - 将
php8.x.micro.sfx
和phar
文件拼接为一个二进制文件
注意事项
- 本地php版本
php>=7.2
都可以执行打包命令 - 但是只能打包成php8的二进制文件
- 强烈建议本地php版本和打包版本一致,也就是如果本地是php8.0,打包也用php8.0,避免出现兼容问题
- 打包会下载php8的源码,但是并不会本地安装,不会影响本地php环境
webman.bin
目前只支持在x86_64
架构的linux系统运行,不支持在mac系统运行- 默认不打包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
中设置
PHP如何打包二进制文件
1、新建文件 tinywan.php
,内容如下
<?php
echo 'Hello, this is Tinywan awesome app ' . PHP_EOL;
2、将micro.sfx
和php
文件拼接为一个二进制文件
cat php8.2.micro.sfx tinywan.php > tinywan
3、赋予二进制文件执行权限
代码语言:javascript复制chmod 0755 tinywan
4、执行二进制文件
代码语言:javascript复制$ ./tinywan
Hello, this is Tinywan awesome app
static-php-cli
static-php-cli:
在Linux、macOS、FreeBSD、Windows(Linux)上构建独立的PHP二进制文件,与PHP项目一起,包括流行的扩展。
了解更多:https://github.com/crazywhalecc/static-php-cli/blob/main/README-zh.md