GJ 站长论坛・社区规则,请知晓

宝塔面板怎么配置环境变量

chinaz
chinaz 初级会员超兽战士
发布于 2026-10-08 16:46 ·8 浏览 ·0 回复

按这篇做完,你能在宝塔面板里给系统、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 配置。

  1. 面板左侧「软件商店」→ 找到已安装的 PHP(比如 PHP 8.0)→ 点「设置」→「配置修改」。
  2. 在打开的 php-fpm.conf 里找到 include=/www/server/php/80/etc/php-fpm.d/*.conf 这一行,说明真正的 pool 配置在 /www/server/php/80/etc/php-fpm.d/www.conf。用面板「文件」功能打开这个文件。
  3. 在 [www] 段落里加两行:
clear_env = no
env[APP_ENV] = production
env[DB_HOST] = 127.0.0.1
  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 骗不了已经在运行的进程。
版权声明:本文来自 GJ站长论坛《宝塔面板怎么配置环境变量》
原文链接:https://www.gj0.com/thread-1059.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~