配置管理 - 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函数可以查看工具包里的相应介绍。