Azure App Service SSH修改/home外内容不持久化,如何保存OCI8配置变更?
解决方案
Azure App Service Linux 基于容器运行,容器镜像层为只读,仅
/home目录为挂载的持久化存储卷,每次实例重启/重新部署都会重置容器内/home以外的所有文件,因此直接通过SSH修改系统目录的配置无法持久化,需通过官方提供的启动自定义机制实现修改的持久化。
方法1:通用自定义修改持久化(适合需要改系统配置、安装扩展的场景)
- 把你需要执行的所有配置修改操作(比如安装OCI8扩展、复制配置文件、修改系统参数的命令)整理为shell脚本,例如命名为
init_oci8.sh,上传到/home目录下的固定路径,比如/home/site/startup-scripts/init_oci8.sh - SSH连接到App Service后,给脚本添加执行权限:
chmod +x /home/site/startup-scripts/init_oci8.sh - 进入Azure门户对应App Service的管理页,依次打开「配置」->「常规设置」->「启动命令」,填入脚本的完整路径:
/home/site/startup-scripts/init_oci8.sh,保存配置后实例会自动重启,之后每次容器启动都会自动执行脚本内的修改操作,实现配置持久化 - 脚本参考示例(适配PHP+Apache运行栈):
#!/bin/bash # 复制提前存放在/home目录的OCI8配置到PHP配置扫描目录 cp /home/site/custom-ini/oci8.ini /usr/local/etc/php/conf.d/ # 原有服务启动命令,不能省略 apache2-foreground
方法2:PHP配置专属简化方案(仅需修改PHP运行参数时使用)
如果不需要修改系统级配置,仅需要添加/修改OCI8相关的PHP配置,可以直接把自定义ini文件放到/home/site/ini目录,Azure App Service的PHP运行栈默认会在启动时自动加载该目录下所有后缀为.ini的配置文件,无需额外编写启动脚本。
示例/home/site/ini/oci8.ini内容:
extension=oci8.so oci8.persistent_timeout = -1 oci8.ping_interval = 60 # 其余自定义OCI8配置
注意:如果OCI8扩展未预装在运行镜像中,安装扩展的命令仍然需要写入启动脚本执行,因为扩展默认安装在系统非持久化目录,每次重启都需要重新安装
验证配置生效
重启实例后,SSH连接执行php -i | grep oci8即可查看OCI8配置是否加载成功,也可以在站点目录放置phpinfo页面访问确认。
内容的提问来源于stack exchange,提问作者Pand005
相关产品推荐
相关产品推荐

