codeigniter多环境配置与部署核心是同一套代码自动适配开发、测试、生产环境,关键在于分离不变逻辑与可变参数,通过.env统一管理环境变量(如ci_environment、db_host)、动态生成base_url、web根目录指向public/、按环境选用数据库/session驱动。

CodeIgniter项目多环境配置与部署的核心,是让同一套代码在开发、测试、生产等不同环境下自动适配,而不是靠手动改配置、复制文件或临时注释。关键在于分离“不变的逻辑”和“可变的参数”,用标准化机制驱动环境切换。
用.env统一管理环境变量
CI4原生支持.env文件,CI3可通过vlucas/phpdotenv引入。所有可能变动的参数都应从中抽离:
- 数据库连接信息(DB_HOST、DB_USERNAME、DB_PASSWORD)
- 运行环境标识(CI_ENVIRONMENT = development 或 production)
- 应用基础地址(app.baseURL,本地用http://localhost:8080,线上填域名)
- 调试与日志开关(app.debug = true、LOG_THRESHOLD = 1)
.env文件不提交到Git;部署时由CI/CD流程或运维脚本注入真实值。示例中本地写DB_HOST=localhost,线上写DB_HOST=pg-prod-01.internal,零代码修改即可切换。
base_url必须动态生成
硬编码$config['base_url'] = 'http://localhost/myapp/'会导致静态资源404、API请求跨域失败、CDN无法生效。正确做法是推导而非填写:
- CI4:在app/Config/App.php中,用
$_SERVER['HTTP_HOST']和$_SERVER['HTTPS']组合协议与域名 - CI3:在application/config/config.php顶部加判断逻辑:
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://';<br>$config['base_url'] = $protocol . $_SERVER['HTTP_HOST'] . '/';
这样无论你用127.0.0.1:8000、dev.myapp.test还是www.myapp.com访问,都能生成正确的资源路径。
Web服务器根目录必须指向public/
CI4严格遵循前端控制器模式,所有请求必须经由public/index.php入口。常见错误是把整个项目目录扔进/var/www/html,导致:
- writable/目录被直接暴露在Web下,存在安全风险
- 路由解析失败,404泛滥
- vendor/和app/等敏感目录可被直接访问
Apache需启用mod_rewrite并配置.htaccess隐藏index.php;Nginx需将root设为/path/to/myproject/public,并确保index index.php。同时确认www-data(或对应用户)对writable/有读写权限。
数据库与Session存储要按环境选型
开发阶段可用Filesystem驱动快速验证,但上线必须切换为更可靠、可共享的后端:
- Database驱动:适合中大型项目,Session数据存MySQL/PostgreSQL/瀚高V9.0,天然支持主从、备份与监控
- Redis驱动:高并发场景首选,读写毫秒级,自动过期,避免文件锁争用
- 配置统一走.env,如sess_driver = database、sess_save_path = ci_sessions
特别注意:若用瀚高V9.0等兼容PostgreSQL的数据库,只需将dbdriver设为postgre,其余字段(hostname、username等)保持一致,无需额外适配层。











