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'];
好像在配置文件中也能使用该环境变量,具体方法待查。

浙公网安备 33010602011771号