PHP-CI框架下,兼容docker,配置不同的环境下的数据库

解决问题: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 写入对应环境的数据库配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值