Apache运行时的系统环境变量设置
最近在研究git的webhook,想以此实现代码的自动部署。其核心内容就是一个php函数shell_exec()
。我找到了一个厉害的php部署工具,叫做Deployer。尽管如此,还是遇到了一个很大的坑。
首先说明一下,这里所说的环境变量,是linux服务器上执行env
命令得到的环境变量,为了与apache服务器本身的环境变量区分开来,这里将前者称为系统环境变量。
apache系统环境变量
默认情况下,apache以用户www-data
运行服务,系统环境变量就是宿主用户www-data的环境变量。然而,rapache在配置文件中对宿主的环境变量进行了修改。
查看系统环境变量
通过以下php代码,可以查看系统环境变量的内容(前提是关闭php安全模式),可以发现环境变量中是没有HOME
的。
<?php
var_dump(shell_exec('env'));
设置系统环境变量
参考文件/etc/apache2/envvars
中的一段配置:
# this won't be correct after changing uid
unset HOME
# 省略了一部分配置内容
export APACHE_RUN_USER=www-data
这段配置删除了环境变量HOME
,同时配置了APACHE_RUN_USER
这一项。有需要修改或者添加环境变量即可按照该格式操作。
如何找到配置文件/etc/apache2/envvars
,执行命令find /etc/apache2 -type f|xargs grep APACHE_RUN_USER
解决的问题
使用deployer
部署项目,配置文件没有问题。在命令行下部署成功。通过php执行部署命令时,到deploy:vendors
这一步失败。开启调试模式,发现composer报错,要求设置HOME
或者COMPOSER_HOME
环境变量。
[RuntimeException]
The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly
同时以下代码执行的结果为NULL
<?php
var_dump(shell_exec('composer'));
按照上一点设置系统环境变量后,deployer成功部署,php脚本也能正常输出内容。
apache环境变量
简单说明一下
设置变量
<VirtualHost *:80/>
DocumentRoot /var/www/html
ServerName www.domain.com
SetEnv ENV production
</VirtualHost>
获取变量
<?php
echo $_SERVER['ENV'];
好像在配置文件中也能使用该环境变量,具体方法待查。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南