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'];

好像在配置文件中也能使用该环境变量,具体方法待查。

参考文章

posted @   幸福的路痴  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示