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

Posted WeiAreYoung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 写入对应环境的数据库配置。

以上是关于PHP-CI框架下,兼容docker,配置不同的环境下的数据库的主要内容,如果未能解决你的问题,请参考以下文章

Docker -- 初识DockerDocker和虚拟机的差别Docker的架构

docker

升级SpringBoot 2.1.X 各jar包冲突、兼容问题

Docker基础入门 —— 简介

Docker总结

初识Docker