PHP Server Monitor 3.5.2 配置参数详解
PHP Server Monitor 3.5.2 四层配置参数全解:config.php、psmconfig.inc.php 常量、psm_config 表 47 个键值实测导出与 Docker 环境变量,含语言切换即改即生效实测与生产配置模板。
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.php | Web 根目录(容器内 /var/www/html/config.php) | 数据库连接六要素 + PSM_BASE_URL/PSM_WEBCRON_KEY | 编辑文件;Docker 默认模式由入口脚本自动生成 |
② psmconfig.inc.php | src/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 修改方式与生效时机(实测:切换界面语言)
三种修改途径与生效时机:
- Web 界面 Config 页:日常途径,保存即写
psm_config,下一次请求即生效(无缓存重启需求); - 直接改
psm_config表:批量/脚本化时用,同样即时生效(psm_get_conf()每次进程启动从库加载); - 改
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.php | PSM_DB_HOST | (安装向导填) | 数据库主机 |
| config.php | PSM_DB_PORT | ''/3306 | 数据库端口,空=默认 3306 |
| config.php | PSM_DB_USER / PSM_DB_PASS | (安装向导填) | 数据库账号 |
| config.php | PSM_DB_NAME | (安装向导填) | 数据库名 |
| config.php | PSM_DB_PREFIX | monitor_(示例文件) | 表前缀,Docker 示例用 psm_ |
| config.php | PSM_BASE_URL | '' | 强制指定站点 URL(cron 场景) |
| config.php | PSM_WEBCRON_KEY | '' | webcron 访问密钥 |
| 常量 | PSM_VERSION | 3.5.2 | 程序版本号 |
| 常量 | PSM_UPDATE_URL / PSM_UPDATE_INTERVAL | api.github.com / 86400 | 新版本检查地址与周期 |
| 常量 | PSM_LOGIN_HASH_COST_FACTOR | '10' | 密码哈希 cost 因子 |
| 常量 | PSM_LOGIN_COOKIE_RUNTIME | 1209600 | "记住我"Cookie 有效期(秒,14 天) |
| 常量 | PSM_LOGIN_COOKIE_DOMAIN | null | Cookie 域 |
| 常量 | PSM_LOGIN_COOKIE_SECRET_KEY | (安装随机) | Cookie 签名密钥,改了会使所有登录态失效 |
| 常量 | PSM_LOGIN_RESET_RUNTIME | 3600 | 密码重置链接有效期(秒) |
| 常量 | PSM_CRON_TIMEOUT | 600 | cron 防重入锁超时(秒) |
| 常量 | PSM_CURL_TIMEOUT | 10 | curl/连接默认超时(秒,可按监控项覆盖) |
| 常量 | PSM_THEME | default | 主题 |
| 常量 | PSM_MODULE_DEFAULT | server_status | 默认模块 |
| 常量 | PSM_JABBER_FORCE_TLS / PSM_JABBER_AUTH_TYPE | true / PLAIN | Jabber 连接参数 |
| psm_config | language | en_US | 界面语言 |
| psm_config | auto_refresh_servers | 0 | 状态页自动刷新(秒,0=关) |
| psm_config | alert_type | status | 告警记录类型(status/offline/always) |
| psm_config | email_status / email_smtp* / email_from_* | 1 / 空 / monitor@example.org 等 | 邮件通知 |
| psm_config | sms_status / sms_gateway* / sms_from | 0 / messagebird / 占位 | 短信通知 |
| psm_config | pushover_status / pushover_api_token | 0 / 空 | Pushover 通知 |
| psm_config | telegram_status / telegram_api_token | 0 / 空 | Telegram 通知 |
| psm_config | jabber_status / jabber_* | 1 / 空 | Jabber/XMPP 通知 |
| psm_config | log_status / log_email / log_sms / log_pushover / log_telegram / log_jabber | 全部 1 | 各类事件是否写日志 |
| psm_config | log_retention_period | 365 | 日志保留天数 |
| psm_config | proxy / proxy_url / proxy_user / proxy_password | 0 / 空 | 出网代理 |
| psm_config | show_update / last_update_check / version_update_check | 1 / 时间戳 / 3.5.2 | 版本检查 |
| psm_config | cron_running / cron_running_time | 0 / 时间戳 | cron 防重入锁(运行时状态) |
| psm_config | cron_off_running / cron_off_running_time | 0 / 时间戳 | -s off 专用锁 |
| psm_config | password_encrypt_key | (安装随机 40 位 hex) | 监控项网站密码加密密钥 |
| psm_config | version | 3.5.2 | 已安装版本(升级标记) |
| Docker | MYSQL_*、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_email | Server 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 省请求。
八、参考链接
- 站内:《PHP Server Monitor 3.5.2 Docker Compose 部署指南》(本文所有实测环境的部署过程)
- 源码仓库:https://github.com/phpservermon/phpservermon (本文引用的
config.php.sample、psmconfig.inc.php、ConfigController.php、StatusNotifier.php均出自 v3.5.2 源码包) - 官方安装文档(config.php 与 cron 配置章节):https://docs.phpservermonitor.org/en/latest/install.html
- 3.5.2 源码包:https://github.com/phpservermon/phpservermon/archive/v3.5.2.tar.gz