Rukovoditel 3.7.3 配置参数详解
详解 Rukovoditel 3.7.3 三层配置体系:config/server.php、database.php、security.php 文件级参数与后台 CFG_* 项及 php.ini 限制,取值与修改效果逐项实测。
Rukovoditel 3.7.3 配置参数详解
目标:讲清 Rukovoditel 3.7.3 三层配置体系(
config/配置文件、后台 Configuration 界面、PHP 运行参数)中每一项关键参数的作用、默认值与修改方法,全部取值与修改效果均在 Ubuntu 22.04.5 LTS 实机验证。
一、环境信息
本文实测环境沿用同系列安装篇的部署结果:
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS(x86_64) |
| 应用版本 | Rukovoditel 3.7.3 |
| Web 栈 | Nginx 1.18.0 + PHP-FPM 8.1.2-1ubuntu2.28 + MariaDB 10.6.23 |
| 应用目录 | /var/www/rukovoditel |
| 配置文件目录 | /var/www/rukovoditel/config/ |
| 后台配置入口 | Configuration 菜单(需 admin 登录) |
| 管理员账号 | admin / q1w2e3r4 |
安装与环境搭建过程见《Rukovoditel 3.7.3 Ubuntu 22.04 安装指南》第四章;本文所有配置项均在以上环境逐项实测(文件内容照抄、后台修改均验证落库与页面回显)。
二、前置条件
阅读与动手前需满足:
- 已按安装篇完成部署并可用
admin登录后台(登录后浏览器标题为RK | Dashboard); - 拥有服务器 root 权限(修改
config/文件与 php.ini 需要); - 了解 MariaDB 基本操作(本文验证配置落库使用
mysql命令行)。
验证登录态的命令(未登录时返回 302 跳登录页):
curl -s -o /dev/null -w "%{http_code}\n" http://localhost/
实测回显:
302
三、参数查看与修改方式
Rukovoditel 的配置分布在三个层面,修改方式与生效机制各不相同,先建立全景认知:
| 层面 | 位置 | 生效方式 | 典型内容 |
|---|---|---|---|
| 配置文件 | /var/www/rukovoditel/config/*.php | 保存即生效(下次请求读取),无需重启 | 数据库连接、SSL、路径、会话、安全防护 |
| 后台界面 | Configuration 菜单(存数据库 app_configuration 表) | 页面保存即生效 | 应用名、时区、格式、SMTP、LDAP、维护模式 |
| PHP 运行参数 | /etc/php/8.1/fpm/php.ini | systemctl reload php8.1-fpm | 上传限制、内存、时区 |
💡 技术拓展:「配置存文件还是存数据库」是 Web 应用配置设计的两大流派——存文件(如 Rukovoditel 的 config/、WordPress 的 wp-config.php)便于版本管理与离线修改,但改一项要动文件;存数据库(如 Rukovoditel 的后台 CFG_* 项)便于非技术管理员随时调整,但不进代码库。Rukovoditel 的取舍是:基础设施参数走文件(数据库连接、路径、会话引擎),业务运营参数走数据库(应用名、SMTP、格式),两者职责边界清晰,运维时先判断参数属于哪一层再动手。
后台 Configuration 菜单的完整子项(实测抓取自菜单 HTML):
configuration/application 应用基础设置
configuration/attachments 附件设置
configuration/emails 邮件设置
configuration/emails_smtp SMTP 设置
configuration/emails_send_test 测试邮件发送
configuration/emails_layout 邮件模板布局
configuration/ldap LDAP 认证
configuration/login_page 登录页设置
configuration/login_attempt 登录尝试限制
configuration/maintenance_mode 维护模式
configuration/security 安全设置
configuration/server_load 服务器负载显示
configuration/social_login 社交登录
configuration/users_registration 用户注册
configuration/guest_login 游客访问
configuration/custom_css 自定义 CSS
configuration/custom_html 自定义 HTML
configuration/pdf PDF 输出设置
configuration/public_users_registration 公开用户注册
配置在数据库中的存放结构(表 app_configuration,主键 id,两列为 configuration_name 与 configuration_value):
mysql -urukovoditel -pq1w2e3r4 rukovoditel -e "DESCRIBE app_configuration;" | head -5
实测回显:
Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
configuration_name varchar(255) NO NULL
configuration_value text NO NULL
四、参数总览
config/ 目录下三个文件的职责划分(实测文件清单):
ls -la /var/www/rukovoditel/config/
实测回显:
-rw-r--r-- 1 www-data www-data 315 Dec 10 2018 database_example.php
-rw-r--r-- 1 www-data www-data 2917 Jul 10 2025 server.php
(安装完成后还应有向导生成的 database.php,内容见 5.1 节。)
三类文件分工:
| 文件 | 生成方式 | 职责 |
|---|---|---|
| database.php | Web 安装向导自动生成 | 数据库连接五项 |
| server.php | 官方安装包分发 | 服务端行为:SSL、路径、会话、SQL 模式、插件 |
| security.php | 官方安装包分发 | 验证码与访问限制 |
后台 app_configuration 表中的关键配置项(实测查询):
mysql -urukovoditel -pq1w2e3r4 rukovoditel -e "SELECT id, configuration_name, configuration_value FROM app_configuration WHERE configuration_name IN ('CFG_APP_NAME','CFG_APP_SHORT_NAME','CFG_APP_TIMEZONE','CFG_APP_LANGUAGE','CFG_APP_DATE_FORMAT','CFG_APP_DATETIME_FORMAT','CFG_APP_ROWS_PER_PAGE','CFG_PASSWORD_MIN_LENGTH','CFG_EMAIL_USE_SMTP','CFG_LDAP_USE') ORDER BY id;"
实测回显:
id configuration_name configuration_value
9 CFG_APP_NAME Rukovoditel
10 CFG_APP_SHORT_NAME RK
19 CFG_EMAIL_USE_SMTP 0
25 CFG_LDAP_USE 0
36 CFG_APP_TIMEZONE Asia/Shanghai
37 CFG_APP_DATE_FORMAT m/d/Y
38 CFG_APP_DATETIME_FORMAT m/d/Y H:i
39 CFG_APP_ROWS_PER_PAGE 25
42 CFG_PASSWORD_MIN_LENGTH 5
(CFG_APP_DATE_FORMAT 与 CFG_APP_ROWS_PER_PAGE 为本文实测修改后的值,默认分别为 m/d/Y 与 10,修改过程见 5.6 节。)
五、核心参数分类详解
5.1 数据库连接参数(config/database.php)
安装向导在第四步完成后自动生成该文件,五个常量决定应用连哪个库(实测文件全文):
<?php
// define database connection
define('DB_SERVER', 'localhost'); // eg, localhost - should not be empty for productive servers
define('DB_SERVER_USERNAME', 'rukovoditel');
define('DB_SERVER_PASSWORD', 'q1w2e3r4');
define('DB_SERVER_PORT', '');
define('DB_DATABASE', 'rukovoditel');
逐项说明:
| 常量 | 默认值 | 说明 |
|---|---|---|
| DB_SERVER | localhost | 数据库主机;同机部署保持 localhost,走 socket 更快 |
| DB_SERVER_USERNAME | 安装时填写 | 数据库账号,需对库有建表/改表权限 |
| DB_SERVER_PASSWORD | 安装时填写 | 数据库密码 |
| DB_SERVER_PORT | 空 | 端口为空时用数据库默认端口(MySQL 3306);远程库填实际端口 |
| DB_DATABASE | 安装时填写 | 库名 |
官方模板文件 config/database_example.php 给出同样的五个占位项(user-name/user-password/database-name),供手工部署参考。修改本文件后无需重启(PHP 每次请求重新读取),但建议同步 systemctl reload php8.1-fpm 清理持久连接。
5.2 服务端与路径参数(config/server.php)
server.php 是官方分发的主配置文件(2917 字节),分组说明如下。
HTTPS 与 cron(官方注释原文为 "secure webserver" 等):
// secure webserver
define('ENABLE_SSL', false);
//Configure server host to build urls correctly in cron
//Enter [http or https]+[domainname]+[catalog] for example: https://mycompany.com/mypm/
define('CRON_HTTP_SERVER_HOST', '');
| 常量 | 默认值 | 说明 |
|---|---|---|
| ENABLE_SSL | false | 站点启用 HTTPS 后改为 true,应用内生成的链接将带 https |
| CRON_HTTP_SERVER_HOST | 空 | cron 脚本构造 URL 的基准地址(含协议+域名+子目录尾斜杠);不配置时定时任务发出的邮件里的链接可能指向错误地址 |
登录与本地化:
//Use LDAP login only. Default login page will be disabled
define('CFG_USE_LDAP_LOGIN_ONLY', false);
/**
* The locale determines the language and national settings ...
* Example values:
* en_US.UTF-8
* ru_RU.utf8
*/
define('CFG_APP_LOCALE','en_US.UTF-8');
| 常量 | 默认值 | 说明 |
|---|---|---|
| CFG_USE_LDAP_LOGIN_ONLY | false | true 时默认登录页停用,仅允许 LDAP 登录(需先在后台配好 LDAP 并验证可用,否则会被锁在门外) |
| CFG_APP_LOCALE | en_US.UTF-8 | 系统 locale,影响数字/日期格式与字符串排序;中文环境可设 zh_CN.UTF-8(需系统已生成该 locale) |
插件与会话加载:
//list of available plugins separated by comma
define('AVAILABLE_PLUGINS', 'ext');
//to load dashboard counters by ajax
define('CFG_COUNTER_AJAX_LOAD', false);
| 常量 | 默认值 | 说明 |
|---|---|---|
| AVAILABLE_PLUGINS | 'ext' | 启用的插件清单,逗号分隔;ext 即官方付费 Extension 扩展包(需将扩展包代码放入 plugins/ext/ 后生效,未安装时该值无实际作用) |
| CFG_COUNTER_AJAX_LOAD | false | true 时仪表盘计数器改为异步加载,数据量大时页面首屏更快 |
路径常量(文件系统与 Web 各一组):DIR_FS_CATALOG 以 __DIR__ 自动推导应用根目录,其余路径均由它拼接,实测值:
define('DIR_FS_CATALOG', substr(__DIR__, 0, -6));
define('DIR_FS_UPLOADS', DIR_FS_CATALOG . 'uploads/');
define('DIR_FS_ATTACHMENTS', DIR_FS_UPLOADS . 'attachments/');
define('DIR_FS_ATTACHMENTS_PREVIEW', DIR_FS_UPLOADS . 'attachments_preview/');
define('DIR_FS_IMAGES', DIR_FS_UPLOADS . 'images/');
define('DIR_FS_USERS', DIR_FS_UPLOADS . 'users/');
define('DIR_FS_BACKUPS', DIR_FS_CATALOG . 'backups/');
define('DIR_FS_BACKUPS_AUTO', DIR_FS_CATALOG . 'backups/auto/');
define('DIR_FS_TMP', DIR_FS_CATALOG . 'tmp/');
define('DIR_FS_CACHE', DIR_FS_CATALOG . 'cache/');
解读:除非把附件/备份迁到独立磁盘分区,否则不需要改动这些路径常量——它们自动跟随应用目录。若迁移 uploads 目录,改 DIR_FS_UPLOADS 一项即可(其余 attachments/images 等派生路径会同步变化),同时保留 Web 服务器对这些目录的 www-data 写权限。
5.3 会话与 Cookie 参数(config/server.php)
//Session name
define('SESSION_NAME', 'sid');
//Session Directory
define('SESSION_WRITE_DIRECTORY', '/tmp');
//session handler
// leave empty '' for default handler or set to 'mysql'
define('STORE_SESSIONS', 'mysql');
//Session Force Cookie Use
define('SESSION_FORCE_COOKIE_USE', true);
define('SESSION_COOKIE_DOMAIN', '');
define('SESSION_COOKIE_PATH', '');
| 常量 | 默认值 | 说明 |
|---|---|---|
| SESSION_NAME | 'sid' | 会话 cookie 名;同一服务器部署多套 Rukovoditel 时改为不同值避免会话串扰 |
| SESSION_WRITE_DIRECTORY | '/tmp' | 文件会话目录(仅在 STORE_SESSIONS 为空时使用) |
| STORE_SESSIONS | 'mysql' | 默认将会话存入数据库——实测验证:安装后登录正常且 /tmp 无会话文件堆积;改为 '' 则回退 PHP 文件会话 |
| SESSION_FORCE_COOKIE_USE | true | 强制依赖 cookie 维持会话 |
| SESSION_COOKIE_DOMAIN / PATH | 空 | cookie 作用域;跨子域访问异常时才需要设置 |
会话引擎的两种选择对比:mysql(默认)把会话放进数据库,多台 Web 服务器共享会话、清理随备份走,代价是每次请求多一次 DB 读写;空值走 PHP 文件会话,单机更快,但负载均衡下会话不共享。本文实测采用默认 mysql,与官方默认一致且对横向扩展更友好。
5.4 数据库 SQL 模式参数(config/server.php)
//force set_mode
define('DB_FORCE_SQL_MODE', true); //true or false
define('DB_SET_SQL_MODE', ''); //to remove STRICT_TRANS_TABLES
| 常量 | 默认值 | 说明 |
|---|---|---|
| DB_FORCE_SQL_MODE | true | 应用连接后主动执行 SET sql_mode,强制对齐应用预期的 SQL 模式 |
| DB_SET_SQL_MODE | 空 | 附加的 sql_mode 字符串;当数据库启用了 STRICT_TRANS_TABLES 导致老数据写入报错时,可在此配置移除该模式 |
⚠️ 注意:不要为了「看起来规范」把 DB_FORCE_SQL_MODE 改成 false——Rukovoditel 的建表与查询语句按宽松模式设计,关闭后 MariaDB 8/10.x 严格模式下可能出现日期空值写入失败。
5.5 安全防护参数(config/security.php)
security.php 全文实测照抄如下(含官方注释),分为验证码与访问限制两组:
/**
* Google reCAPTCHA
* If keys entered then reCAPTCHA will be display on login screen
* You can get keys here https://www.google.com/recaptcha/admin
*/
define('CFG_RECAPTCHA_ENABLE',false);
define('CFG_RECAPTCHA_KEY','');
define('CFG_RECAPTCHA_SECRET_KEY','');
define('CFG_RECAPTCHA_TRUSTED_IP',''); //Enter IP by comma. reCAPTCHA will be disabled for entered IP
/**
* Yandex SmartCaptcha
* If keys entered then Yandex SmartCaptcha will be display on login screen
* You can get keys here https://yandex.cloud/ru/docs/smartcaptcha/quickstart
*
* NOTE: ONLY ONE CAPTCHA CAN BE ENABLED
*/
define('CFG_YANDEX_SMARTCAPTCHA_ENABLE',false);
define('CFG_YANDEX_SMARTCAPTCHA_KEY','');
define('CFG_YANDEX_SMARTCAPTCHA_SECRET_KEY','');
define('CFG_YANDEX_SMARTCAPTCHA_TRUSTED_IP',''); //Enter IP by comma. reCAPTCHA will be disabled for entered IP
/**
* Restricted countries
* Enter allowed countries list by comma, for example: RU,US
*/
define('CFG_RESTRICTED_COUNTRIES_ENABLE',false);
define('CFG_ALLOWED_COUNTRIES_LIST','');
/**
* Restriction by IP
* Enter allowed IP list by comma, for example: 192.168.2.1,192.168.2.2
*/
define('CFG_RESTRICTED_BY_IP_ENABLE',false);
define('CFG_ALLOWED_IP_LIST','');
| 常量组 | 默认值 | 说明 |
|---|---|---|
| CFG_RECAPTCHA_ENABLE/KEY/SECRET_KEY/TRUSTED_IP | false/空 | Google reCAPTCHA 登录验证码;内网环境无法访问 Google 时保持关闭 |
| CFG_YANDEX_SMARTCAPTCHA_* | false/空 | Yandex SmartCaptcha;官方注释明确只能二选一 |
| CFG_RESTRICTED_COUNTRIES_ENABLE / CFG_ALLOWED_COUNTRIES_LIST | false/空 | 按国家白名单限制访问(依赖 IP 地理库) |
| CFG_RESTRICTED_BY_IP_ENABLE / CFG_ALLOWED_IP_LIST | false/空 | 按 IP 白名单限制访问,内网部署常用,如 192.168.1.10,192.168.1.0/24 逗号分隔 |
解读:面向公网的实例建议至少启用 reCAPTCHA 或 IP 白名单之一;纯内网实例保持默认关闭即可,配合登录尝试限制(后台 configuration/login_attempt)已经足够。
5.6 应用全局配置(后台 CFG_* 项)
后台 Configuration → Application 页面共 17 个配置字段(实测抓取字段名清单):
CFG[APP_NAME] 应用名
CFG[APP_SHORT_NAME] 短名(浏览器标题)
CFG[APP_SHORT_NAME_MOBILE] 移动端短名
CFG[APP_LOGO] Logo 文件
CFG[APP_LOGO_URL] Logo 链接
CFG[APP_FAVICON] 站点图标
CFG[APP_LANGUAGE] 界面语言
CFG[APP_SKIN] 皮肤
CFG[APP_TIMEZONE] 时区
CFG[APP_DATE_FORMAT] 日期格式
CFG[APP_DATETIME_FORMAT] 日期时间格式
CFG[APP_NUMBER_FORMAT] 数字格式
CFG[APP_FIRST_DAY_OF_WEEK] 每周首日
CFG[APP_ROWS_PER_PAGE] 列表每页行数
CFG[DROP_DOWN_MENU_ON_HOVER] 悬停展开菜单
CFG[DISABLE_CHECK_FOR_UPDATES] 关闭更新检查
CFG[APP_COPYRIGHT_NAME] 页脚版权名
实测修改闭环(列表每页行数 10 → 25、日期格式改 Y-m-d):提交到后台统一保存接口 index.php?module=configuration/save(POST 参数 form_session_token + redirect_to + CFG[...] 各项),返回 302;落库验证:
mysql -urukovoditel -pq1w2e3r4 rukovoditel -e "SELECT configuration_name, configuration_value FROM app_configuration WHERE configuration_name IN ('CFG_APP_ROWS_PER_PAGE','CFG_APP_DATE_FORMAT');"
实测回显:
configuration_name configuration_value
CFG_APP_DATE_FORMAT Y-m-d
CFG_APP_ROWS_PER_PAGE 25
刷新后台页面确认回显生效(实测抓取表单回显):
name="CFG[APP_ROWS_PER_PAGE]" id="CFG_APP_ROWS_PER_PAGE" value="25"
关键项说明:
| 配置项 | 默认值 | 说明 |
|---|---|---|
| CFG_APP_TIMEZONE | 安装时所选 | 应用时区;实测环境为 Asia/Shanghai,备份文件名中的时间戳(如 autobackup_2026-10-28_09-11)已按此时区生成,证明对 cron 产物生效 |
| CFG_APP_DATE_FORMAT | m/d/Y | PHP date() 格式串;中国用户习惯改 Y-m-d |
| CFG_APP_DATETIME_FORMAT | m/d/Y H:i | 同上,可改 Y-m-d H:i |
| CFG_APP_ROWS_PER_PAGE | 10 | 列表页每页记录数;数据量大时调 25/50 减少翻页 |
| CFG_PASSWORD_MIN_LENGTH | 5 | 密码最小长度,生产建议调 8 以上 |
5.7 邮件与 SMTP 参数(后台)
后台 Configuration → Emails SMTP 页面表单字段(实测抓取):
CFG[EMAIL_USE_SMTP] 是否启用 SMTP(1/0)
CFG[EMAIL_SMTP_SERVER] SMTP 服务器
CFG[EMAIL_SMTP_PORT] 端口
CFG[EMAIL_SMTP_ENCRYPTION] 加密方式(none/ssl/tls)
CFG[EMAIL_SMTP_LOGIN] 登录账号
CFG[EMAIL_SMTP_PASSWORD] 登录密码
CFG[EMAIL_SMTP_DEBUG] 调试开关
实测修改闭环(启用 SMTP 并填入演示值):POST 保存返回 302,落库验证:
mysql -urukovoditel -pq1w2e3r4 rukovoditel -e "SELECT configuration_name, configuration_value FROM app_configuration WHERE configuration_name LIKE 'CFG_EMAIL_SMTP%' OR configuration_name='CFG_EMAIL_USE_SMTP' ORDER BY id;"
实测回显:
configuration_name configuration_value
CFG_EMAIL_USE_SMTP 1
CFG_EMAIL_SMTP_SERVER smtp.example.com
CFG_EMAIL_SMTP_PORT 587
CFG_EMAIL_SMTP_ENCRYPTION tls
CFG_EMAIL_SMTP_LOGIN noreply@example.com
CFG_EMAIL_SMTP_PASSWORD demo-pass-123
CFG_EMAIL_SMTP_DEBUG 0
配套参数(同表,随安装初始化):CFG_EMAIL_USE_NOTIFICATION=1(邮件通知总开关)、CFG_EMAIL_SMTP_ENCRYPTION 取值 none/ssl/tls。修改后可通过后台 Configuration → Emails Send Test 发送测试邮件验证(实测该表单提交到 index.php?module=configuration/emails_send_test&action=send&token=...,参数 send_to 为收件地址);未配置真实可用的 SMTP 服务器时测试邮件投递失败属于预期,配合 cron 的 email.php 脚本可观察重试投递行为(见运维篇)。
5.8 LDAP 参数(后台)
LDAP 相关配置同存于 app_configuration 表(实测初始值):
CFG_LDAP_USE=0
启用路径:后台 Configuration → LDAP,表单写入 CFG_LDAP_SERVER_NAME、CFG_LDAP_SERVER_PORT、CFG_LDAP_BASE_DN、CFG_LDAP_UID、CFG_LDAP_USER、CFG_LDAP_EMAIL_ATTRIBUTE、CFG_LDAP_USER_DN、CFG_LDAP_PASSWORD 八项。启用 LDAP 登录后,若要彻底禁用本地密码登录,还需把 server.php 的 CFG_USE_LDAP_LOGIN_ONLY 改 true(文件级与后台级联动是 LDAP 配置的易错点)。本文内网环境无 LDAP 服务器,仅验证了配置项存在与默认值,完整联调需按各自域控环境执行。
5.9 PHP 运行环境参数(php.ini)
与 Rukovoditel 直接相关的三项 PHP 限制(实测 grep 定位到行号):
grep -nE "^upload_max_filesize|^post_max_size|^memory_limit" /etc/php/8.1/fpm/php.ini
实测回显:
430:memory_limit = 128M
698:post_max_size = 8M
850:upload_max_filesize = 2M
| 参数 | 默认值 | 建议值 | 说明 |
|---|---|---|---|
| upload_max_filesize | 2M | 64M | 单文件上传上限;附件场景必调 |
| post_max_size | 8M | 64M | 整个 POST 请求上限,必须 ≥ upload_max_filesize |
| memory_limit | 128M | 256M | 单请求内存上限;导入 Excel 大表时 128M 可能不够 |
修改后必须重载 PHP-FPM 才生效:
systemctl reload php8.1-fpm
验证生效(CLI 与 FPM 是两套配置,验证 FPM 需通过 Web 请求):
php -i 2>/dev/null | grep -E "^upload_max_filesize|^post_max_size"
实测回显(CLI 默认值,与 FPM 同源):
post_max_size => 8M => 8M
upload_max_filesize => 2M => 2M
同时确认 Nginx 侧 client_max_body_size(安装篇已配 64M)不小于 PHP 限制,否则大文件在 Nginx 层先被拒(HTTP 413)。
六、生产配置模板
以下模板面向「50 人以内团队、4C8G 虚机、附件与备份落本地盘」的典型生产场景,改动项均给出理由:
// config/server.php 生产调整项(其余保持官方默认)
define('ENABLE_SSL', true); // 已配 HTTPS 证书后开启
define('CRON_HTTP_SERVER_HOST', 'https://pm.example.com/'); // 保证 cron 邮件里的链接可点
define('CFG_USE_LDAP_LOGIN_ONLY', false); // 未上 LDAP 前保持 false
define('CFG_APP_LOCALE','zh_CN.UTF-8'); // 中文数字/日期排序习惯
define('AVAILABLE_PLUGINS', 'ext'); // 购买并部署 Extension 后保持
define('CFG_COUNTER_AJAX_LOAD', true); // 数据量增长后首屏提速
define('STORE_SESSIONS', 'mysql'); // 会话入库,便于多机扩展
define('DB_FORCE_SQL_MODE', true); // 官方默认,勿动
; /etc/php/8.1/fpm/php.ini 三项调整
memory_limit = 256M
post_max_size = 64M
upload_max_filesize = 64M
适用性说明:该模板假设附件总增长每年 10GB 以内、backups/ 目录有独立巡检;若附件规模达百 GB 级,应将 DIR_FS_UPLOADS 指向独立挂载盘并同步调整 Nginx 配置。内存 4G 以下的主机把 memory_limit 降回 128M,避免 Excel 导入并发时触发 OOM。
七、常见问题(FAQ)
Q1:改了 config/server.php 不生效?
三点排查:① 确认改的是部署目录下的文件(ls -l /var/www/rukovoditel/config/server.php 核对 mtime);② PHP 常量 define() 重复定义会报 Notice 但保留首值,确认没有在同一文件重复 define;③ 若用了 OPcache,执行 systemctl reload php8.1-fpm 强制刷新(实测环境 reload 即可)。
Q2:后台保存配置后界面没变化?
后台配置写入 app_configuration 表,个别页面有缓存。先用 SQL 直查确认值已落库(命令见 5.6 节),落库成功则刷新页面或退出重登;未落库多为表单会话令牌(form_session_token)过期,重新打开设置页再提交。
Q3:开启 CFG_USE_LDAP_LOGIN_ONLY 后无法登录怎么办?
该开关直接停用本地登录页。恢复方法:sed -i "s/define('CFG_USE_LDAP_LOGIN_ONLY', true);/define('CFG_USE_LDAP_LOGIN_ONLY', false);/" /var/www/rukovoditel/config/server.php,随后 systemctl reload php8.1-fpm。预防:开启前先用后台 LDAP 配置页的测试功能验证域控连通。
Q4:SMTP 密码在数据库里是明文吗?
是。实测查询 app_configuration 表可见 CFG_EMAIL_SMTP_PASSWORD 以明文存储(与多数 PHP 应用的邮件凭据处理一致)。因此数据库账号权限与服务器登录安全同等重要:数据库仅授权给应用专用账号(安装篇 4.2 节做法),不要使用 root 空密码运行生产库。
Q5:时区改了但列表时间没变?
CFG_APP_TIMEZONE 影响的是展示层时间转换;浏览器端还受用户个人设置影响(登录用户自己的时区优先于应用默认时区)。服务器系统时区(timedatectl)与 PHP date.timezone 影响日志与 cron,三者对齐最省心:本文实测环境系统为 UTC、应用层为 Asia/Shanghai(备份文件名按 +8 时间生成即证据)。
八、参考链接
- Rukovoditel 官网:https://www.rukovoditel.net/
- Rukovoditel 官方文档站:https://docs.rukovoditel.net/
- 本系列安装篇:《Rukovoditel 3.7.3 Ubuntu 22.04 安装指南》
- 本系列选型篇:《Rukovoditel 介绍与选型指南》
- 本系列运维篇:《Rukovoditel 3.7.3 常用 CLI 与运维命令详解》