宝塔面板怎么配置环境变量
按这篇做完,你能在宝塔面板里给系统、PHP、Node 项目分别配好环境变量,并且知道改完后去哪里重启才生效。
环境变量最容易踩的坑不是「怎么加」,而是「加给谁」。宝塔面板里至少有四个互相独立的环境:SSH 登录的系统环境、PHP-FPM 进程环境、Node/PM2 项目环境、面板计划任务环境。加错地方就会出现「命令行能读到,网站读不到」的情况。下面按场景逐个说。
第一步:确认你要给谁用
打开宝塔面板,左侧菜单「终端」(旧版本叫「SSH 终端」)或直接用 Xshell、PuTTY 登录服务器,执行:
echo $PATH
这是系统环境。如果你在终端里 export FOO=bar 后能 echo $FOO 出来,但打开网站 getenv('FOO') 是空,说明你要改的不是系统环境,而是下面第三步的 PHP-FPM 环境。
第二步:配置系统级环境变量(对所有用户生效)
这一步做完,SSH 新会话和面板里跑的 shell 脚本都能读到变量。推荐写到 /etc/profile.d/ 目录,而不是直接改 /etc/profile,避免面板升级时文件被覆盖。
vi /etc/profile.d/myenv.sh
写入内容,比如:
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
export APP_ENV=production
保存后执行:
chmod +x /etc/profile.d/myenv.sh
source /etc/profile.d/myenv.sh
验证:echo $JAVA_HOME 有输出即成功。
注意:
source只对当前这个终端窗口生效。已经在跑的 PHP-FPM、Node 进程不会自动读到新变量,必须重启对应服务。
如果只想给 root 用户配,改 /root/.bashrc,加完同样 source /root/.bashrc。
第三步:配置 PHP 项目的环境变量
PHP-FPM 默认会清空父进程环境(clear_env = yes),所以光改 /etc/profile 对网站没用,必须写进 FPM 的 pool 配置。
- 面板左侧「软件商店」→ 找到已安装的 PHP(比如 PHP 8.0)→ 点「设置」→「配置修改」。
- 在打开的
php-fpm.conf里找到include=/www/server/php/80/etc/php-fpm.d/*.conf这一行,说明真正的 pool 配置在/www/server/php/80/etc/php-fpm.d/www.conf。用面板「文件」功能打开这个文件。 - 在
[www]段落里加两行:
clear_env = no
env[APP_ENV] = production
env[DB_HOST] = 127.0.0.1
- 回到 PHP 设置页,点「服务」→「重启」。
验证:写个 test.php 内容为 <?php echo getenv('APP_ENV');,浏览器访问该文件,输出 production 就对了。
注意:
clear_env = no必须加上,否则env[...]那几行不生效。另外 PHP 8.0 和 7.4 的配置文件路径不同(/www/server/php/74/...),别改错版本目录。
第四步:配置 Node 项目的环境变量
如果你用的是面板的 Node 项目管理功能(面板 7.9 以上版本),直接走界面最简单:
左侧「网站」→ 顶部「Node项目」→ 找到你的项目点「编辑」→ 在「环境变量」输入框里一行写一个,格式为 KEY=VALUE,例如:
NODE_ENV=production
PORT=3000
填完点「提交」,再点项目的「重启」。
如果用 PM2 手动部署,改项目根目录的 ecosystem.config.js:
module.exports = {
apps: [{
name: 'myapp',
script: 'app.js',
env: { NODE_ENV: 'production', PORT: 3000 }
}]
}
然后执行 pm2 restart myapp --update-env。不加 --update-env,PM2 会沿用旧的环境变量,这是最常见的失败原因。
第五步:让计划任务和 crontab 也读到变量
面板「计划任务」里执行的 Shell 脚本不在登录 shell 里运行,不会加载 /etc/profile。稳妥做法是在脚本开头显式 source:
#!/bin/bash
source /etc/profile.d/myenv.sh
写完后点计划任务的「执行」按钮手动跑一次,看日志输出是否正确。
小结
- 环境变量分系统级、PHP-FPM、Node、计划任务四套,先确认目标再动手。
- 系统级写在
/etc/profile.d/xxx.sh,改完source,新开的终端才生效。 - PHP 必须在
php-fpm.d/www.conf里加clear_env = no和env[KEY] = value,然后重启 PHP。 - Node 用面板界面直接填,或 PM2 的
ecosystem.config.js,重启时带--update-env。 - 计划任务脚本不会被登录 shell 加载,脚本开头自己
source一次。 - 任何改完都要重启对应服务,光
source骗不了已经在运行的进程。
原文链接:https://www.gj0.com/thread-1059.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。