解决问题:ci开发的系统,根据环境的不同,可以分为:开发环境/测试环境/线上生产环境,各个环境下涉及的配置信息,如数据库连接信息,可能不一样。此前可能通过手动修改配置文件的方式进行部署,现在改用如下方式。
1、在ci的htdocs目录下的index.php 的最前面,写入:
$environment = "development";
if(isset($_SERVER) && !empty($_SERVER) && is_array($_SERVER)){
// nginx作为web服务器的情况
if(isset($_SERVER["PHPENV"]) && !empty($_SERVER["PHPENV"]) && in_array($_SERVER["PHPENV"],array("development","testing","production"))){
$environment = $_SERVER["PHPENV"];
// nginx作为代理服务器的情况
if(isset($_SERVER["HTTP_PHPENV"]) && !empty($_SERVER["HTTP_PHPENV"]) && in_array($_SERVER["HTTP_PHPENV"],array("development","testing","production"))){
$environment = $_SERVER["HTTP_PHPENV"];
define('ENVIRONMENT',$environment);
以下灰色部分其实不用做。本地环境不配置 PHPENV,上面的代码读取不到该参数,则默认环境为:development
2、对拉取的镜像文件,里面的 nginx 配置文件:/etc/nginx/fastcgi_params ,文件的最后面新增一条名为 PHPENV 的记录,值为当前的环境名称:
localhost:~ apple$ docker exec -it 容器名称 /bin/bash
bash-5.0# vi /etc/nginx/fastcgi_params
# multi-environment config
fastcgi_param PHPENV development;
# wq,保存并退出编辑器
# 退出 docker 容器
bash-5.0# exit
exit
# 宿主机 重启docker 容器
localhost:~ apple$ docker restart 容器名称
2.1、对于作为反向代理的nginx服务器,发送 proxy_set_header PHPENV 参数:(对应程序判断里的 HTTP_PHPENV 参数的判断,对于php,会自动加上一个HTTP_)
upstream backend{
server xxx.com:40001;
server {
listen 80;
server_name xxx.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header PHPENV development;
proxy_pass http://backend;
#access_log /data/logs/dev.xxx.com;
3、在我们的开发环境的 application/config 目录下,新建 多环境的配置文件目录,如 development 、testing、production ,在这些目录里,写入对应环境下的配置文件信息,比如数据库连接在各个环境下不一样,则在三个目录里,分别建立 database.php 写入对应环境的数据库配置。
原文链接:https://blog.csdn.net/donwei8/article/details/107357748/