PHP Server Monitor 3.5.2 配置参数详解

PHP Server Monitor 3.5.2 四层配置参数全解:config.php、psmconfig.inc.php 常量、psm_config 表 47 个键值实测导出与 Docker 环境变量,含语言切换即改即生效实测与生产配置模板。

PHP Server Monitor自托管监控PHP 应用2026/11/01

PHP Server Monitor 3.5.2 配置参数详解

目标:把 PHP Server Monitor 3.5.2 的全部配置参数一次讲清——config.php 文件参数、psmconfig.inc.php 程序常量、psm_config 数据库表(Web 配置界面背后的存储)与 Docker 环境变量四层,逐个给出实测默认值、取值范围、生效时机与修改方法。全部参数值与实测结果来自本文同环境真实部署(Ubuntu 26.04.1 LTS,Docker Compose 部署,见站内《PHP Server Monitor 3.5.2 Docker Compose 部署指南》)。

一、环境信息

  • PHP Server Monitor 3.5.2(官方 Dockerfile 自构建镜像,phpservermonitor:3.5.2)
  • MariaDB 10.6(实测 10.6.28),数据库名 phpservermonitor,表前缀 psm_
  • 部署方式:Docker Compose(容器 phpservermon-3.5.2-web / phpservermon-3.5.2-db,端口 8138,部署目录 /opt/data/quzuo/tmp/php-server-monitor/stack)
  • 源码参照:v3.5.2.tar.gz 官方源码包(本地解包路径 /opt/data/quzuo/tmp/php-server-monitor/phpservermon-3.5.2/,本文所有"源码位置"均相对该目录)
  • 实测时间:2026-11-01

二、前置条件

  • 已按部署指南完成 PSM 安装向导(能登录 Config 界面);
  • 容器可用 docker exec 进入(本文查库命令均通过 docker exec phpservermon-3.5.2-db mariadb ... 实测);
  • 源码包在手(核对常量含义用,非必需)。

三、参数查看与修改方式

3.1 三层参数体系

PSM 3.5.2 的配置分散在三个层级,优先级与存放位置各不相同:

层级位置存什么怎么改
① config.phpWeb 根目录(容器内 /var/www/html/config.php)数据库连接六要素 + PSM_BASE_URL/PSM_WEBCRON_KEY编辑文件;Docker 默认模式由入口脚本自动生成
② psmconfig.inc.phpsrc/includes/psmconfig.inc.php版本号、安全/会话常量、cron/curl 超时等程序级常量随源码改(改后需重建镜像或改容器内文件)
③ psm_config 表数据库(9 张业务表之一)界面 Config 模块的全部表单值 + 系统运行时状态Web 界面 Config 页(推荐)或直接改表

3.2 查看方式(实测)

# ① 查看 config.php(Docker 自动生成后的实际内容)
docker exec phpservermon-3.5.2-web cat /var/www/html/config.php
<?php
define('PSM_DB_HOST', 'db');
define('PSM_DB_PORT', '');
define('PSM_DB_USER', 'phpservermonitor');
define('PSM_DB_PASS', 'q1w2e3r4');
define('PSM_DB_NAME', 'phpservermonitor');
define('PSM_DB_PREFIX', 'psm_');
?>
# ③ 导出 psm_config 表全部键值(实测 47 行)
docker exec phpservermon-3.5.2-db mariadb -uphpservermonitor -pq1w2e3r4 phpservermonitor \
  -e 'SELECT `key`,`value` FROM psm_config ORDER BY `key`;'
key	                    value
alert_type	            status
auto_refresh_servers	0
cron_off_running	    0
cron_off_running_time	1793505777
cron_running	        0
cron_running_time	    1793505983
email_from_email	    monitor@example.org
email_from_name	        Server Monitor
email_smtp	
email_smtp_host	
email_smtp_password	
email_smtp_port	
email_smtp_security	
email_smtp_username	
email_status	        1
jabber_domain	
jabber_host	
jabber_password	
jabber_port	
jabber_status	        1
jabber_username	
language	            en_US
last_update_check	    1793505075
log_email	            1
log_jabber	            1
log_pushover	        1
log_retention_period	365
log_sms	                1
log_status	            1
log_telegram	        1
password_encrypt_key	c7940c5f5dbc1748ee340f149b42f4caf411e336
proxy	                0
proxy_password	
proxy_url	
proxy_user	
pushover_api_token	
pushover_status	        0
show_update	            1
sms_from	            1234567890
sms_gateway	            messagebird
sms_gateway_password	password
sms_gateway_username	username
sms_status	            0
telegram_api_token	
telegram_status	        0
version	                3.5.2
version_update_check	3.5.2

💡 说明:sms_gateway_username/password 的默认值是安装程序写死的占位(username/password,见 src/psm/Util/Install/Installer.php),不是真实凭据;未启用 SMS(sms_status=0)时无害,启用前应替换。password_encrypt_key 是安装时随机生成的 40 位 hex,用于加密监控项的网站密码(见五、5.6),丢了就无法解密已保存的 website_password。

3.3 修改方式与生效时机(实测:切换界面语言)

三种修改途径与生效时机:

  1. Web 界面 Config 页:日常途径,保存即写 psm_config,下一次请求即生效(无缓存重启需求);
  2. 直接改 psm_config 表:批量/脚本化时用,同样即时生效(psm_get_conf() 每次进程启动从库加载);
  3. 改 config.php/psmconfig.inc.php:改 PHP 文件即刻生效(每个请求都会读);Docker 下注意 PSM_AUTO_CONFIGURE=true 时 config.php 每次容器启动会被入口脚本重写,持久化改法见《PHP Server Monitor 3.5.2 Docker Compose 部署指南》第八节。

实测验证"改表即生效":把 language 从 en_US 改为 zh_CN,不重启任何进程,刷新页面即切换:

UPDATE psm_config SET value='zh_CN' WHERE `key`='language';

实测结果(登录后抓取页面 <title>):

zh_CN 下 title: SERVER MONITOR - 状态
页面出现中文(监控/服务器): True
en_US 下 title: SERVER MONITOR - Status   (改回后)

PSM 内置 27 个语言包(src/lang/ 目录实测:bg_BG、ca_ES、cs_CZ、da_DK、de_DE、en_US、es_ES、et_ET、fa_IR、fi_FI、fr_FR、it_IT、ja_JP、ko_KR、nl_NL、no_NB、pl_PL、pt_BR、ru_RU、sk_SK、sl_SI、sv_SE、tr_TR、uk_UA、vi_VN、zh_CN、zh_TW),language 键取值即这些文件名(不含 .lang.php)。

四、参数总览

按层级与用途的完整参数地图(默认值=3.5.2 全新安装实测值):

层级参数默认值作用
config.phpPSM_DB_HOST(安装向导填)数据库主机
config.phpPSM_DB_PORT''/3306数据库端口,空=默认 3306
config.phpPSM_DB_USER / PSM_DB_PASS(安装向导填)数据库账号
config.phpPSM_DB_NAME(安装向导填)数据库名
config.phpPSM_DB_PREFIXmonitor_(示例文件)表前缀,Docker 示例用 psm_
config.phpPSM_BASE_URL''强制指定站点 URL(cron 场景)
config.phpPSM_WEBCRON_KEY''webcron 访问密钥
常量PSM_VERSION3.5.2程序版本号
常量PSM_UPDATE_URL / PSM_UPDATE_INTERVALapi.github.com / 86400新版本检查地址与周期
常量PSM_LOGIN_HASH_COST_FACTOR'10'密码哈希 cost 因子
常量PSM_LOGIN_COOKIE_RUNTIME1209600"记住我"Cookie 有效期(秒,14 天)
常量PSM_LOGIN_COOKIE_DOMAINnullCookie 域
常量PSM_LOGIN_COOKIE_SECRET_KEY(安装随机)Cookie 签名密钥,改了会使所有登录态失效
常量PSM_LOGIN_RESET_RUNTIME3600密码重置链接有效期(秒)
常量PSM_CRON_TIMEOUT600cron 防重入锁超时(秒)
常量PSM_CURL_TIMEOUT10curl/连接默认超时(秒,可按监控项覆盖)
常量PSM_THEMEdefault主题
常量PSM_MODULE_DEFAULTserver_status默认模块
常量PSM_JABBER_FORCE_TLS / PSM_JABBER_AUTH_TYPEtrue / PLAINJabber 连接参数
psm_configlanguageen_US界面语言
psm_configauto_refresh_servers0状态页自动刷新(秒,0=关)
psm_configalert_typestatus告警记录类型(status/offline/always)
psm_configemail_status / email_smtp* / email_from_*1 / 空 / monitor@example.org 等邮件通知
psm_configsms_status / sms_gateway* / sms_from0 / messagebird / 占位短信通知
psm_configpushover_status / pushover_api_token0 / 空Pushover 通知
psm_configtelegram_status / telegram_api_token0 / 空Telegram 通知
psm_configjabber_status / jabber_*1 / 空Jabber/XMPP 通知
psm_configlog_status / log_email / log_sms / log_pushover / log_telegram / log_jabber全部 1各类事件是否写日志
psm_configlog_retention_period365日志保留天数
psm_configproxy / proxy_url / proxy_user / proxy_password0 / 空出网代理
psm_configshow_update / last_update_check / version_update_check1 / 时间戳 / 3.5.2版本检查
psm_configcron_running / cron_running_time0 / 时间戳cron 防重入锁(运行时状态)
psm_configcron_off_running / cron_off_running_time0 / 时间戳-s off 专用锁
psm_configpassword_encrypt_key(安装随机 40 位 hex)监控项网站密码加密密钥
psm_configversion3.5.2已安装版本(升级标记)
DockerMYSQL_*、PHP_TIME_ZONE、PSM_REFRESH_RATE_SECONDS 等见镜像 ENV生成 config.php / 内置 cron 循环 / php.ini 时区

五、核心参数分类详解

5.1 config.php——数据库连接参数(PSM_DB_*)

源码默认模板 config.php.sample(官方仓库随包分发):

<?php
define('PSM_DB_PREFIX', 'monitor_');
define('PSM_DB_USER', 'db_user');
define('PSM_DB_PASS', 'db_pass');
define('PSM_DB_NAME', 'db_name');
define('PSM_DB_HOST', 'localhost');
define('PSM_DB_PORT', '3306'); //3306 is the default port for MySQL. If no specfic port is used, leave it empty.
define('PSM_BASE_URL', '');
define('PSM_WEBCRON_KEY', '');
  • PSM_DB_HOST:主机名/IP。Docker Compose 里填服务名 db(实测可用);Socket 连接场景可填 localhost;
  • PSM_DB_PORT:留空即用默认 3306(示例文件注释原文如此;实测 Docker 生成值为 '',连接正常);
  • PSM_DB_PREFIX:全部 9 张表的前缀,安装后不可改(已建表不会跟着改名);多实例共用一个库时用不同前缀隔离;
  • PSM_DB_USER/PASS/NAME:安装向导设置后基本不再动;修改后无需重启 PHP,下个请求生效。

5.2 config.php——PSM_BASE_URL 与 PSM_WEBCRON_KEY

  • PSM_BASE_URL(默认空):不设时 PSM 自动从 HTTP 请求推导站点 URL;cron/CLI 场景没有 HTTP 上下文,通知邮件里的链接、页面跳转可能出错,此时显式设置,例如 define('PSM_BASE_URL', 'https://monitor.example.com');。也可不改文件、在 cron 命令行用 --uri= 参数临时指定(见 cron 托管篇);psmconfig.inc.php 里亦保留了同名 define 注释(//define('PSM_BASE_URL', null);),效果相同;
  • PSM_WEBCRON_KEY(默认空):webcron(通过 HTTP 触发检测)的密钥。空值时 webcron 只信任 IP 白名单(PSM_CRON_ALLOW 常量,默认空数组——源码 src/bootstrap.php 实测 define('PSM_CRON_ALLOW', serialize(array()))),因此直接用浏览器访问 cron/status.cron.php 会 403(实测回显 403 Forbidden / IP address not allowed)。设为随机串后,cron/status.cron.php?webcron_key=<key> 可从任意 IP 触发检测。细节见本专栏 cron 托管篇。

5.3 psmconfig.inc.php——程序常量

位于 src/includes/psmconfig.inc.php,随源码分发,改后需同步进镜像或容器:

  • PSM_CRON_TIMEOUT = 600:cron 防重入锁的"假定死亡"超时。上一轮检测崩溃未释放 cron_running 锁时,600 秒后下一次 cron 强制继续。设 0 可禁用锁。配合 --timeout=x 命令行参数可单次覆盖(实测见 cron 托管篇);
  • PSM_CURL_TIMEOUT = 10:Website 类型 curl 检测与 Service 类型 fsockopen 的默认超时(秒)。监控项单独填了 timeout 就按监控项的来(实测:Gmail SMTP 示例项超时显示 rtime=10.016 即此默认值兜底);
  • PSM_LOGIN_HASH_COST_FACTOR = '10':password_hash() 的 cost。每次登录都要算一遍,调高会线性增加登录 CPU 开销;改大会导致现有密码哈希仍可验证但强度不升级,重置密码后才用新 cost;
  • PSM_LOGIN_COOKIE_RUNTIME = 1209600:"Remember me" Cookie 有效期 14 天(秒);
  • PSM_LOGIN_COOKIE_SECRET_KEY:安装时随机生成(实测安装后该常量已是随机串),参与 Cookie 签名;更换后全员登录态失效;
  • PSM_LOGIN_RESET_RUNTIME = 3600:忘记密码邮件里的重置链接 1 小时有效;
  • PSM_UPDATE_URL / PSM_UPDATE_INTERVAL:版本检查请求 https://api.github.com/repos/phpservermon/phpservermon/releases/latest,每天最多一次(86400 秒);界面 Config 里关掉"check updates"即不再请求(对应 show_update 键);
  • PSM_THEME = 'default' / PSM_MODULE_DEFAULT = 'server_status':主题目录(src/templates/<主题>)与未指定 mod 时的默认模块;
  • PSM_JABBER_FORCE_TLS = true / PSM_JABBER_AUTH_TYPE = 'PLAIN':Jabber 通知的传输与认证方式(AUTH_TYPE 可选 PLAIN、X-OAUTH2、DIGEST-MD5、CRAM-MD5、SCRAM-SHA-1、ANONYMOUS、EXTERNAL,源码注释原文)。

5.4 psm_config——通用与界面参数

  • language(实测 en_US → zh_CN 即改即生效,见三、3.3):界面语言;
  • auto_refresh_servers(0):状态页自动刷新间隔(秒)。0 关闭;设 60 则状态页每分钟自动刷新(适合挂在值班大屏);
  • alert_type(status):服务器状态变化写入日志/触发告警的口径,界面下拉三选(源码 ConfigController.php 实测取值):status(仅上线→离线/离线→上线变化)、offline(只要离线就告警)、always(每轮都记录);
  • show_update(1):是否显示新版本提示;last_update_check / version_update_check 是检查结果的时间戳与版本号缓存,运行时字段不建议手改;
  • proxy / proxy_url / proxy_user / proxy_password:检测请求走代理。proxy=1 启用,proxy_url 形如 http://proxy.example.com:7897。监控点出网受限时用。

5.5 psm_config——通知渠道参数(五渠道)

PSM 3.5.2 支持五种通知渠道,每渠道一组键 + 一个 *_status 开关;监控项上另有 per-server 的渠道勾选(psm_servers 表的 email/sms/pushover/telegram/jabber 列),两级都开了才会发。

Email(默认启用,实测 email_status=1)

参数默认值说明
email_from_name / email_from_emailServer Monitor / monitor@example.org发件人显示
email_smtp空空=PHP mail()(需要 MTA,容器里实测报 sh: 1: /usr/sbin/sendmail: not found);设 smtp=走 PHPMailer SMTP
email_smtp_host / email_smtp_port空 / 空SMTP 服务器与端口(465/587)
email_smtp_security空界面下拉三选(源码实测取值):''(None)、ssl、tls
email_smtp_username / email_smtp_password空 / 空SMTP 认证

SMS(默认关闭):sms_gateway(实测默认 messagebird)+sms_gateway_username/sms_gateway_password+sms_from(实测默认占位 1234567890)。网关实现在 src/psm/Txtmsg/,3.5.2 内置 22 个(实测目录清单):CMBulkSMS、Callr、ClickSend、Clickatell、Core(基类)、FreeMobileSMS、FreeVoipDeal、GatewayAPI、Inetworx、Messagebird、Mosms、Nexmo、Octopush、Plivo、Smsglobal、Smsgw、Smsit、SolutionsInfini、Spryng、Textmarketer、Twilio、TxtmsgInterface(接口)。sms_gateway 的取值即这些类名(首字母小写);国内直发短信无内置网关,需自行实现 TxtmsgInterface。

Pushover / Telegram / Jabber:分别只需 pushover_api_token、telegram_api_token、jabber_host/port/domain/username/password 一组键 + *_status 开关(实测默认:pushover 0、telegram 0、jabber 1)。Telegram 的 chat id 可通过官方引导页获取(常量 PSM_TELEGRAM_GET_ID_URL 指向 https://telegram.me/cid_bot)。

日志开关:log_status/log_email/log_sms/log_pushover/log_telegram/log_jabber(默认全 1)决定哪类事件写入 psm_log 表;log_retention_period=365 为保留天数,cron 每轮会清理过期日志(ArchiveManager 实测随检测执行)。

5.6 psm_config——系统运行时参数(不建议手改)

  • cron_running / cron_running_time:cron 防重入锁。检测开始置 1 + 当前时间戳,结束置 0;PSM_CRON_TIMEOUT 内再次触发会打印 Cron is already running. Exiting. 直接退出(实测回显)。cron_off_running* 是 -s off 模式的独立锁,两把锁互不干扰;
  • password_encrypt_key:安装时随机生成的 40 位 hex,与监控项 ID 拼接后作为 psm_password_encrypt/decrypt() 的密钥,加密每个监控项的网站密码(website_password 列,源码 StatusUpdater.php 实测调用 psm_password_decrypt($this->server['server_id'].psm_get_conf('password_encrypt_key'), ...))。备份请包含此键,否则换库后已存密码无法解密;
  • version:安装/升级版本标记(实测 3.5.2),升级流程靠它判断是否需要执行数据库变更。

5.7 Docker 部署的环境变量参数

Docker 镜像通过环境变量间接配置,入口脚本按 PSM_AUTO_CONFIGURE 把 MYSQL_HOST/PORT/USER/PASSWORD/DATABASE/PREFIX 生成 config.php(即 5.1 的六参数),PHP_TIME_ZONE 经 php.ini 占位符控制 PHP 时区(实测 ini_get('date.timezone') 返回所设值),PSM_REFRESH_RATE_SECONDS 控制容器内置检测循环间隔,PSM_PHP_DEBUG 控制是否生成调试页。完整默认值与实测细节见《PHP Server Monitor 3.5.2 Docker Compose 部署指南》第六节环境变量表,此处不重复。

六、生产配置模板

适用场景:小型自托管监控(50 个以内监控项、1 个管理员 + 若干只读用户),2GB 内存 / 20GB 磁盘即可,检测周期 60 秒。

// config.php(Docker 部署改用环境变量,见 5.7;源码部署直接改此文件)
define('PSM_DB_HOST', '127.0.0.1');
define('PSM_DB_PORT', '');
define('PSM_DB_USER', 'psm');
define('PSM_DB_PASS', '<强密码>');
define('PSM_DB_NAME', 'psm');
define('PSM_DB_PREFIX', 'psm_');
define('PSM_BASE_URL', 'https://monitor.example.com');   // cron/邮件链接需要
define('PSM_WEBCRON_KEY', '<32 位以上随机串>');            // 仅在用 webcron 时设置
-- psm_config 推荐值(其余保持默认)
UPDATE psm_config SET value='zh_CN'  WHERE `key`='language';              -- 中文界面
UPDATE psm_config SET value='0'      WHERE `key`='auto_refresh_servers';  -- 大屏才开自动刷新
UPDATE psm_config SET value='90'     WHERE `key`='log_retention_period';  -- 日志留 90 天即可
-- 邮件通知走 SMTP(避免依赖本机 MTA):
UPDATE psm_config SET value='smtp'   WHERE `key`='email_smtp';
UPDATE psm_config SET value='smtp.example.com' WHERE `key`='email_smtp_host';
UPDATE psm_config SET value='587'    WHERE `key`='email_smtp_port';
UPDATE psm_config SET value='tls'    WHERE `key`='email_smtp_security';
UPDATE psm_config SET value='alert@example.com' WHERE `key`='email_from_email';
-- 关闭不用的渠道,减少无效日志:
UPDATE psm_config SET value='0' WHERE `key` IN ('sms_status','pushover_status','telegram_status','jabber_status');
// psmconfig.inc.php 保持默认即可;仅当监控项普遍需要更长超时时调整:
define('PSM_CURL_TIMEOUT', 15);   // 弱网目标 10 秒不够时

⚠️ 注意:psm_config 直接 UPDATE 与界面修改等价,但界面会校验取值范围(如 alert_type 只认三选),直接改表需自己保证值合法;改完无需重启。

七、常见问题(FAQ)

Q1:改了 config.php,重启容器后又被改回去?

PSM_AUTO_CONFIGURE=true 时入口脚本每次启动都按 MYSQL_* 环境变量重写 config.php。要么改环境变量,要么设 PSM_AUTO_CONFIGURE=false 并挂载自己的 config.php(实测机制与改法见部署指南第八节)。

Q2:language 改成 zh_CN 后界面还是英文?

实测改 psm_config.language 是即时生效的(见三、3.3)。若仍英文,检查拼写(必须是 src/lang/ 里存在的包名,如 zh_CN 而非 zh-cn)。

Q3:邮件发不出去,日志报 /usr/sbin/sendmail: not found?

默认 email_smtp 为空走 PHP mail(),容器内没有 MTA。把 email_smtp 设为 smtp 并按 5.5 填 email_smtp_host/port/security/username/password(生产模板见六、)。

Q4:PSM_BASE_URL 什么时候必须设?

cron 触发检测时没有 HTTP 上下文,psm_build_url() 无法自动推导站点 URL(psmconfig.inc.php 中该常量的注释原文即写明 "Useful for cronjobs if it cannot be auto-detected"),通知邮件里的"查看详情"链接会不完整。源码/二进制部署在 config.php 固定即可;Docker 源码模式也可用 cron 的 --uri= 参数临时指定(见 cron 托管篇)。

Q5:换了数据库服务器,监控项里保存的网站密码全失效?

website_password 用 password_encrypt_key(psm_config 表)+ 监控项 ID 加密。迁移时必须把 psm_config 全表(尤其 password_encrypt_key)一起搬,否则无法解密(解密逻辑见 5.6 源码说明)。

Q6:version / cron_running 这些键能手动改吗?

不要。version 是升级流程的判断依据,cron_running* 是运行时锁——实测手动置 1 会让下一次 cron 直接退出(Cron is already running. Exiting.),忘了复位会卡 600 秒(PSM_CRON_TIMEOUT)。

Q7:状态页想实时点,怎么配?

auto_refresh_servers 设为刷新秒数(如 30),状态页会按周期自动刷新;大屏常开即可,平时建议 0 省请求。

八、参考链接