yii 2.0.47生产环境配置核心是入口脚本硬编码禁用调试(yii_debug=false、yii_env='prod')并前置定义,主配置web.php须移除debug/gii模块、固化tracelevel=0、启用schemacache、剥离main-local.php动态合并、显式注入环境变量、强制启用redis/apcu缓存及assetmanager时间戳。

Yii 2.0.47 生产环境配置文件精简优化,核心不是删代码,而是砍掉所有开发期依赖、关闭调试通道、固化运行时行为。重点在 config/web.php 和入口脚本的协同控制,避免“表面切换、实际没变”的伪生产状态。
入口脚本必须硬编码禁用调试
web/index.php 开头两行必须显式定义,不能依赖默认值或条件判断:
defined('YII_DEBUG') or define('YII_DEBUG', false);defined('YII_ENV') or define('YII_ENV', 'prod');
这两行要放在 require autoload.php 之前。不写等于留后门——哪怕 config/web.php 里写了 'traceLevel' => 0,只要 YII_DEBUG 是 true,日志、调试栏、堆栈信息全会回来。
主配置文件(web.php)只保留运行必需项
删除或注释掉所有带 YII_DEBUG 或 YII_ENV_DEV 的条件分支,例如:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 移除
'debug' => ['class' => 'yii\debug\Module']模块注册 - 移除
'gii' => ['class' => 'yii\gii\Module'] - 把
'log' => [...]中的'traceLevel'固定为 0,'targets'只留文件或 Syslog 目标,去掉ChromePhpTarget等前端调试目标 - 数据库
'enableSchemaCache'设为 true,并确保'schemaCache'指向真实缓存组件(如 redis 或 apcu)
剥离 local 配置,合并进主配置
生产环境不依赖 main-local.php 这类动态合并机制。直接把数据库密码、API 密钥、缓存地址等敏感且固定项,写入 config/web.php 的对应位置(或通过环境变量注入,见下条)。好处是:
- 启动时无文件存在性判断开销
- 避免因权限/路径问题导致
main-local.php加载失败却静默降级 - 配置即代码,部署时可审计、可 diff
若仍需环境变量注入,用 getenv() 显式读取,不要依赖 .env 自动加载(Yii 2.0.47 原生不支持 dotenv):
'dsn' => 'mysql:host=' . getenv('DB_HOST') . ';dbname=' . getenv('DB_NAME'),
'username' => getenv('DB_USER'),
'password' => getenv('DB_PASS'),
],
缓存与静态资源强制启用
生产配置中这几项不能省略,且必须指向真实后端:
-
'cache' => ['class' => 'yii\redis\Cache', 'redis' => ['hostname' => 'redis', 'port' => 6379]](推荐)或yii\caching\ApcuCache -
'assetManager' => ['appendTimestamp' => true],防止浏览器缓存旧 JS/CSS -
'response' => ['class' => 'yii\web\Response', 'format' => 'json', 'charset' => 'UTF-8'],明确输出规范
不配 cache 组件,Schema 缓存、数据缓存、片段缓存全失效;不设 appendTimestamp,前端更新资源后可能白屏。










