重编译swoole支持OpenSSL
anlondon Lv6

Dockerfile 方式

来源:phpswoole/swoole

注:因为版本更新,可能出现下载的软件不兼容。需要确定你系统版本以及支持的软件版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 使用的是php7.2-fpm
FROM php:7.2-fpm

# Version
ENV SWOOLE_VERSION 4.5.6

# Timezone
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' > /etc/timezone

# Libs
# 注:libz-dev是 swoole-ssl 模块需要的插件
RUN apt-get update \
&& apt-get install -y \
curl \
wget \
git \
zip \
libz-dev \
libssl-dev \
libnghttp2-dev \
libpcre3-dev \
&& apt-get clean \
&& apt-get autoremove

# Swoole extension
RUN wget https://github.com/swoole/swoole-src/archive/v${SWOOLE_VERSION}.tar.gz -O swoole.tar.gz \
&& mkdir -p swoole \
&& tar -xf swoole.tar.gz -C swoole --strip-components=1 \
&& rm swoole.tar.gz \
&& ( \
cd swoole \
&& phpize \
&& ./configure --enable-async-redis --enable-mysqlnd --enable-openssl --enable-http2 \
&& make -j$(nproc) \
&& make install \
) \
&& rm -r swoole \
&& docker-php-ext-enable swoole
WORKDIR /home/wwwroot/default/swoole4

EXPOSE 9000
CMD ["php-fpm"]

其他镜像

如果上述方式,不可用,可以更换镜像

  1. phpswoole/swoole
  2. swoole-docker|PHP7.2-cli、MySQL、Redis、Inotify|swolle全模块

pecl安装(手动)

来源:pecl install swoole扩展安装

资料:Ubuntu查看openssl相关情况

  1. 检查是否有安装swoole、swoole-ssl

    1
    2
    3
    4
    5
    # 是否安装swoole
    pecl list

    # 是否启用了swoole-ssl模块 看是否有openssl
    php --ri swoole
  2. 如有安装swoole,但没有启用swoole-ssl

    1
    2
    #卸载
    pecl uninstall swoole
  3. 安装依赖

    1
    2
    apt-get install libssl-dev
    apt-get install openssl
  4. 查看openssl位置

    1
    2
    3
    4
    openssl version -a

    OpenSSL 1.1.0j 20 Nov 2018
    OPENSSLDIR: "/usr/lib/ssl"
  5. 安装swoole

    1
    2
    #注:pecl默认使用最新版,如果php版本不是最新版,需要指定支持的版本
    pecl install swoole-4.5.6
  6. 如果需要开启openssl的话,在下边的提示中输入yes

    1
    2
    3
    4
    enable openssl support? [no] : # 询问是否启用openssl

    # 为了openssl 起作用,最好加上openssl的目录
    enable openssl support? [no] :yes --with-openssl-dir=/usr/lib/ssl
  7. 验证是否安装成功

    1
    2
    # 看是否有openssl
    php --ri swoole

wget源码安装

  1. 下载:

    1
    wget https://pecl.php.net/get/swoole-4.5.6.tgz
  2. 解压并进入文件夹

    1
    2
    3
    tar zxvf swoole-4.5.6.tgz

    cd swoole-4.5.6
  3. 生成 config.m4

    1
    phpize
  4. 查看php-config路径

    1
    2
    whereis php-config
    # php-config: /usr/local/php/bin/php-config
  5. 配置 Swoole 编译选项并启用 SWOOLE_SSL

    1
    ./configure --enable-openssl --with-php-config=/usr/bin/php-config
  6. 执行 make 命令编译 Swoole:

    1
    make
  7. 执行 make install 命令安装编译后的 Swoole:

    1
    make install
  8. 编辑 PHP 配置文件(例如 php.ini)并启用 Swoole 扩展:

    1
    2
    3
    4
    vim /etc/php.ini

    #在文件中找到扩展部分,添加以下行:
    extension=swoole.so
  9. 检查是否成功

    1
    2
    3
    php --ri swoole

    # 出现 openssl 则表示成功

git方式

  1. 安装编译Swoole所需的依赖项:

    1
    2
    sudo apt-get update
    sudo apt-get install -y php-dev libssl-dev
  2. 克隆 Swoole 的源代码:

    1
    git clone https://github.com/swoole/swoole-src.git
  3. 进入 swoole-src 目录:

    1
    cd swoole-src
  4. 检查 swoole-src 目录下是否有 config.m4 文件,如果没有,请运行以下命令生成它:

    1
    phpize
  5. 配置 Swoole 编译选项并启用 SWOOLE_SSL

    1
    2
    3
    4
    5
    6
    #查看php-config路径,并替换下方--with-php-config的路径
    whereis php-config


    ./configure --enable-openssl --with-php-config=your_php-config_path
    # 如果提示 ./configure: 没有那个文件或目录 ,则执行上一步
  6. 执行 make 命令编译 Swoole:

    1
    make
  7. 执行 make install 命令安装编译后的 Swoole:

    1
    make install
  8. 编辑 PHP 配置文件(例如 php.ini)并启用 Swoole 扩展:

    1
    2
    3
    4
    vim /etc/php.ini

    #在文件中找到扩展部分,添加以下行:
    extension=swoole.so
  9. 保存并关闭文件。并重新启动 Web 服务器或 PHP-FPM 进程以使更改生效:

    1
    2
    3
    sudo service apache2 restart  # 如果使用 Apache
    #
    sudo service php-fpm restart # 如果使用 PHP-FPM

参考:

  1. php安装swoole扩展开启openssl报错问题

  2. 使用DockerFile安装Swoole4

  3. 重新编译安装swoole支持OpenSSL

  4. 执行“apt-get update”命令提示“404 Not Found”错误怎么办?

  5. pecl install swoole扩展安装

  6. Ubuntu查看openssl相关情况

  7. swoole-docker|PHP7.2-cli、MySQL、Redis、Inotify|swolle全模块

  8. phpswoole/swoole

 Comments