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

原文链接:https://blog.csdn.net/donwei8/article/details/107357748/

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享