配置管理 - 985ch/egg-sachikawa GitHub Wiki

一旦一个项目具备了一定的规模之后,其配置文件就会变得相当庞大而变得难以维护。除此之外,为了保证部分涉及敏感数据的安全性,某些配置直接写在代码中上传到代码库也会带来一定的风险。为了解决这些问题,egg-sachikawa对配置做了一些额外的约定。

配置引用

为了解决配置文件规模过大的问题,建议在config目录下以环境为名建立新的目录,然后再以配置名为名建立配置文件,并在原配置文件中统一引用。在这种管理模式下的配置目录类似这样:

config
  ├── plugin.js
  ├── config.default.js
  └── default
         ├── sequelize.js
         ├── cache9.js
         └── rpcLike.js

在每个配置文件导出对应JSON之后,再在配置文件里引用这个配置文件,通过这种方法可以显著的改善配置文件本身的复杂度,使之更易于维护。

环境变量

在eggjs中,允许通过配置文件的文件名来让项目根据环境来加载配置。在这种情况下可以通过禁止上传包含敏感信息的配置文件(例如config.prod.js)来保证敏感数据的安全性。但是在这种条件下可能会出现开发者在测试环境下修改了配置上传,而维护者没有同步修改正式环境配置的情况,因此在本框架中,推荐使用环境变量来对敏感信息和其他差异化数据进行管理。

// redis配置
'use strict';

const { env } = require('egg-sachikawa').Utils;

module.exports = {
  default: {
    port: 6379,
    password: env('REDIS_PASSWORD'),
    host: env('REDIS_URL'),
  },
  app: true,
  agent: false,
  clients: {
    lock: {
      db: 0,
    },
    cache: {
      db: 1,
    },
    cacheSub: {
      db: 2,
    },
    cachePub: {
      db: 2,
    },
  },
};

以上示例展示了如何使用环境变量来配置Redis连接,关于为何使用env函数可以查看工具包里的相应介绍。