如何在Azure App Service(PHP 8.2/Linux)中安装php-ssh2扩展?
在Azure App Service(Linux + PHP 8.2)中安装php-ssh2扩展的解决方法
针对你安装php-ssh2时遇到的「Not candidate version」问题,原因是默认软件仓库没有适配PHP 8.2的预编译包,下面是两种可行的解决办法:
方法一:自定义启动脚本编译安装(快速验证)
- 登录Azure门户,进入你的App Service资源,在配置 > 常规设置里,将启动命令设为
./startup.sh(如果之前有其他命令,直接替换)。 - 打开Kudu控制台(地址是
https://<你的应用名称>.scm.azurewebsites.net/),进入site/wwwroot目录,创建startup.sh脚本,粘贴以下内容:
#!/bin/bash # 安装编译所需依赖 apt-get update && apt-get install -y libssh2-1-dev gcc make php8.2-dev # 安装适配PHP8.2的ssh2版本 pecl install ssh2-1.3.1 # 添加扩展配置到PHP配置文件 echo "extension=ssh2.so" >> /etc/php/8.2/cli/php.ini echo "extension=ssh2.so" >> /etc/php/8.2/fpm/php.ini # 重启PHP-FPM使配置生效 service php8.2-fpm restart
- 给脚本添加执行权限:
chmod +x startup.sh - 重启App Service,等待编译安装完成后,可在Kudu控制台执行
php -m查看是否包含ssh2扩展。
方法二:自定义Docker镜像(长期稳定部署)
如果你的应用需要频繁重启或缩放,方法一每次重启都要重新编译,推荐用自定义镜像:
- 创建
Dockerfile,内容如下:
FROM mcr.microsoft.com/appsvc/php:8.2-apache_20240507 # 安装依赖、编译ssh2扩展,并清理冗余包 RUN apt-get update && apt-get install -y libssh2-1-dev gcc make php8.2-dev \ && pecl install ssh2-1.3.1 \ && echo "extension=ssh2.so" >> /etc/php/8.2/apache2/php.ini \ && apt-get remove --purge -y gcc make php8.2-dev \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/*
- 构建镜像并推送到Azure Container Registry,然后在App Service的部署中心切换为使用自定义镜像部署即可。
注意事项
- 务必指定兼容PHP8.2的ssh2版本(1.3.1是经过验证的稳定版,最新版本可自行确认兼容性)。
- 使用方法一时,若开启了自动缩放,每个新实例启动时都会执行脚本安装扩展。
内容的提问来源于stack exchange,提问作者Uhmazing34
相关产品推荐
相关产品推荐

