environments目录是Yii2高级模板多环境部署的核心模板仓库,不直接运行,而是通过php init将dev/prod等子目录中的配置文件复制覆盖到frontend/backend/common等实际配置路径,实现环境隔离与安全管控。

安装 Yii2 高级模板后,environments 目录不是可选附件,而是整套多环境部署机制的核心。它不直接参与运行,但决定了 dev、prod 等环境的配置如何生成、隔离和生效。
environments 目录的真实作用
它本身不是运行时加载的配置源,而是一套模板仓库:为不同环境预先准备好的、结构化的配置快照。执行 php init 时,系统会根据你选择的环境(如 Development),把对应子目录(如 environments/dev)里的配置文件,复制覆盖到实际应用目录(frontend/config、backend/config、common/config)中。
这意味着:
– 你改的是 environments/dev/common/config/main-local.php,不是 common/config/main-local.php;
– 后者是 init 生成的结果,不应手动修改(尤其不能提交到 Git);
– 所有带 -local.php 后缀的文件,默认被 .gitignore 排除,保障敏感信息(如数据库密码、密钥)不泄露。
标准目录结构与分工
environments/ 下通常包含:
-
dev/:开发环境模板
– 启用调试工具条(debug toolbar)
– 开启详细错误显示
– 使用本地数据库连接(localhost、root等)
– 日志写入runtime/logs,不压缩 -
prod/:生产环境模板
– 关闭调试模式(YII_DEBUG = false)
– 错误仅记录日志,不向用户暴露
– 数据库使用线上凭证,连接池、超时等参数更严格
– 静态资源启用版本哈希(assetManager配置) -
test/(可选):测试环境模板
– 使用内存数据库(如 SQLite in-memory)或专用测试库
– 自动清空测试数据(通过 fixtures 或 database migration)
– 配合 Codeception 运行时加载
每个环境子目录内,按应用层级组织:common/config/ → 全局共享配置(如数据库、日志)frontend/config/ → 前端专属(如 URL 规则、主题)backend/config/ → 后端专属(如后台路由、权限控制)
配置加载顺序与合并逻辑
以前端应用为例,最终生效的配置由以下文件逐层合并:
-
common/config/main.php:基础框架配置(必须) -
frontend/config/main.php:前端业务配置(必须) -
common/config/main-local.php:当前环境下的本地化覆盖(如数据库地址) -
frontend/config/main-local.php:前端专属本地化(如管理员邮箱)
注意:main-local.php 文件在 init 后才存在,且只存在于各应用 config 目录下——它们是 environments 对应文件的“部署产物”,不是源文件。
关键操作提醒
– 不要跳过 init:未运行 php init,项目无法启动(缺少 runtime、assets、入口文件);
– 修改前先 init:改了 environments/dev 里的文件,必须再运行一次 init(选对应环境)才能生效;
– 区分 -local 和非 -local:非 -local 文件(如 web.php)可提交 Git,用于定义结构;-local 文件只存敏感值,绝不提交;
– 自定义环境很简单:复制一份 dev 改名为 staging,在 init 脚本里增加选项即可支持新环境。











