必须先安装alpine构建依赖:autoconf、g++、make、openssl-dev、linux-headers、pcre2-dev;再用pecl install swoole --configureoptions '--enable-openssl --enable-http2'并docker-php-ext-enable swoole,或改用源码编译确保路径与php版本严格匹配。

pecl install swoole 在 Alpine 上直接跑会失败,缺一堆头文件和构建工具。必须先装依赖,再用 pecl 或源码编译,否则必然卡在 linux/aio_abi.h: No such file or directory 或 autoconf: not found。
必须提前安装的 Alpine 构建依赖
Alpine 默认极简,连gcc、make、autoconf 都没有,更别提 OpenSSL 和 Linux 内核头文件。漏任何一个,phpize 或 pecl install 都会中断:
-
apk add --no-cache autoconf g++ make(基础构建链) -
apk add --no-cache openssl-dev(否则--enable-openssl报错或 HTTPS 功能缺失) -
apk add --no-cache linux-headers(关键!解决linux/aio_abi.h找不到问题) -
apk add --no-cache pcre2-dev(替代旧版pcre-dev,Alpine 3.14+ 默认用 pcre2)
推荐用 pecl install,但要加 --configureoptions
pecl install swoole 默认不启用 OpenSSL 和 HTTP/2,而生产环境通常需要。直接运行会装出一个功能阉割版。正确做法是:
- 先清空缓存避免旧参数干扰:
pecl clear-cache - 显式传参启用关键特性:
pecl install swoole --configureoptions '--enable-openssl --enable-http2' - 安装完立刻启用:
docker-php-ext-enable swoole(Docker 环境)或手动加extension=swoole.so到php.ini
注意:Alpine 的 pecl 有时会忽略 --configureoptions,如果发现编译日志里没出现 checking for OpenSSL support... yes,就改用源码编译。
源码编译更可控,但路径和配置项不能错
从 GitHub 拉最新稳定版比 PECL 更稳(尤其 Alpine 对版本敏感):- 克隆并进入:
git clone @#@#@#@#@#@#@#@#@#@0 && cd swoole-src - 确保当前 PHP 版本支持该 Swoole 版本(例如 PHP 8.2 不兼容 Swoole 4.8.x)
- 运行:
phpize && ./configure --with-php-config=$(which php-config) --enable-openssl --enable-http2 make && make install
常见坑:
-
which php-config必须输出路径,否则./configure会找不到 PHP 配置 -
make install输出的swoole.so路径可能不是默认extension_dir,要用php -i | grep extension_dir确认 - 如果
php -m看不到 swoole,但phpinfo()有,说明 CLI 和 FPM 加载了不同php.ini,得分别检查
验证时别只信 php -m
php -m | grep swoole 只查 CLI SAPI,而 Web 服务通常走 FPM。真实环境要三处都确认:
- CLI:
php -m | grep swoole - FPM:
php-fpm -m | grep swoole(或看phpinfo()页面) - 功能级验证:
php --ri swoole查看是否启用了openssl和http2字段
最容易被忽略的是:Alpine 的 php.ini 文件可能有多个(/etc/php*/conf.d/ 下的碎片化配置),extension=swoole.so 写在错误路径的 ini 里等于没写。用 php --ini 看加载顺序,优先往最末尾那个 conf.d 目录里放启用文件。











