mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
prefix dspace environment variables
This commit is contained in:
29
README.md
29
README.md
@@ -120,11 +120,6 @@ DSPACE_HOST # The host name of the angular application
|
||||
DSPACE_PORT # The port number of the angular application
|
||||
DSPACE_NAMESPACE # The namespace of the angular application
|
||||
DSPACE_SSL # Whether the angular application uses SSL [true/false]
|
||||
|
||||
DSPACE_REST_HOST # The host name of the REST application
|
||||
DSPACE_REST_PORT # The port number of the REST application
|
||||
DSPACE_REST_NAMESPACE # The namespace of the REST application
|
||||
DSPACE_REST_SSL # Whether the angular REST uses SSL [true/false]
|
||||
```
|
||||
|
||||
All other settings can be set using the following convention for naming the environment variables:
|
||||
@@ -134,14 +129,36 @@ All other settings can be set using the following convention for naming the envi
|
||||
|
||||
e.g.
|
||||
|
||||
```
|
||||
```bash
|
||||
# The host name of the REST application
|
||||
dspace.rest.host => DSPACE_REST_HOST
|
||||
|
||||
# The port number of the REST application
|
||||
dspace.rest.port => DSPACE_REST_PORT
|
||||
|
||||
# The namespace of the REST application
|
||||
dspace.rest.nameSpace => DSPACE_REST_NAMESPACE
|
||||
|
||||
# Whether the angular REST uses SSL [true/false]
|
||||
dspace.rest.ssl => DSPACE_REST_SSL
|
||||
|
||||
cache.msToLive.default => CACHE_MSTOLIVE_DEFAULT
|
||||
auth.ui.timeUntilIdle => AUTH_UI_TIMEUNTILIDLE
|
||||
```
|
||||
|
||||
The equavelant to the non-conventional legacy settings:
|
||||
|
||||
```bash
|
||||
DSPACE_UI_HOST => DSPACE_HOST
|
||||
DSPACE_UI_PORT => DSPACE_PORT
|
||||
DSPACE_UI_NAMESPACE => DSPACE_NAMESPACE
|
||||
DSPACE_UI_SSL => DSPACE_SSL
|
||||
```
|
||||
|
||||
The same settings can also be overwritten by setting system environment variables instead, E.g.:
|
||||
```bash
|
||||
export DSPACE_HOST=api7.dspace.org
|
||||
export DSPACE_UI_PORT=4200
|
||||
```
|
||||
|
||||
The priority works as follows: **environment variable** overrides **variable in `.env` file** overrides external config set by `APP_CONFIG_PATH` overrides **`config.(prod or dev).yml`**
|
||||
|
@@ -5,11 +5,11 @@ Default configuration file is located at `config/config.yml`. All configuration
|
||||
- Create a new `config.(dev or development).yml` file in `config/` for `development` environment;
|
||||
- Create a new `config.(prod or production).yml` file in `config/` for `production` environment;
|
||||
|
||||
Alternatively, create a desired app config file at an external location and set the path as environment variable `APP_CONFIG_PATH`.
|
||||
Alternatively, create a desired app config file at an external location and set the path as environment variable `DSPACE_APP_CONFIG_PATH`.
|
||||
|
||||
e.g.
|
||||
```
|
||||
APP_CONFIG_PATH=/usr/local/dspace/config/config.yml
|
||||
DSPACE_APP_CONFIG_PATH=/usr/local/dspace/config/config.yml
|
||||
```
|
||||
|
||||
Configuration options can be overridden by setting environment variables.
|
||||
@@ -36,10 +36,10 @@ Alternately you can set the following environment variables. If any of these are
|
||||
```
|
||||
or
|
||||
```
|
||||
UI_SSL=true
|
||||
UI_HOST=localhost
|
||||
UI_PORT=4000
|
||||
UI_NAMESPACE=/
|
||||
DSPACE_UI_SSL=true
|
||||
DSPACE_UI_HOST=localhost
|
||||
DSPACE_UI_PORT=4000
|
||||
DSPACE_UI_NAMESPACE=/
|
||||
```
|
||||
|
||||
## DSpace's REST endpoint
|
||||
@@ -61,13 +61,6 @@ Alternately you can set the following environment variables. If any of these are
|
||||
DSPACE_REST_PORT=443
|
||||
DSPACE_REST_NAMESPACE=/server
|
||||
```
|
||||
or
|
||||
```
|
||||
REST_SSL=true
|
||||
REST_HOST=api7.dspace.org
|
||||
REST_PORT=443
|
||||
REST_NAMESPACE=/server
|
||||
```
|
||||
|
||||
## Environment variable naming convention
|
||||
|
||||
|
@@ -14,6 +14,14 @@ const CONFIG_PATH = join(process.cwd(), 'config');
|
||||
|
||||
type Environment = 'production' | 'development' | 'test';
|
||||
|
||||
const DSPACE = (key: string): string => {
|
||||
return `DSPACE_${key}`;
|
||||
};
|
||||
|
||||
const ENV = (key: string, prefix = false): any => {
|
||||
return prefix ? process.env[DSPACE(key)] : process.env[key];
|
||||
};
|
||||
|
||||
const getBooleanFromString = (variable: string): boolean => {
|
||||
return variable === 'true' || variable === '1';
|
||||
};
|
||||
@@ -24,8 +32,8 @@ const getNumberFromString = (variable: string): number => {
|
||||
|
||||
const getEnvironment = (): Environment => {
|
||||
let environment: Environment = 'development';
|
||||
if (isNotEmpty(process.env.NODE_ENV)) {
|
||||
switch (process.env.NODE_ENV) {
|
||||
if (isNotEmpty(ENV('NODE_ENV'))) {
|
||||
switch (ENV('NODE_ENV')) {
|
||||
case 'prod':
|
||||
case 'production':
|
||||
environment = 'production';
|
||||
@@ -37,7 +45,7 @@ const getEnvironment = (): Environment => {
|
||||
case 'development':
|
||||
break;
|
||||
default:
|
||||
console.warn(`Unknown NODE_ENV ${process.env.NODE_ENV}. Defaulting to development`);
|
||||
console.warn(`Unknown NODE_ENV ${ENV('NODE_ENV')}. Defaulting to development`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,19 +110,20 @@ const overrideWithEnvironment = (config: Config, key: string = '') => {
|
||||
if (typeof innerConfig === 'object') {
|
||||
overrideWithEnvironment(innerConfig, variable);
|
||||
} else {
|
||||
if (isNotEmpty(process.env[variable])) {
|
||||
console.log(`Applying environment variable ${variable} with value ${process.env[variable]}`);
|
||||
const value = ENV(variable, true);
|
||||
if (isNotEmpty(value)) {
|
||||
console.log(`Applying environment variable ${DSPACE(variable)} with value ${value}`);
|
||||
switch (typeof innerConfig) {
|
||||
case 'number':
|
||||
config[property] = getNumberFromString(process.env[variable]);
|
||||
config[property] = getNumberFromString(value);
|
||||
break;
|
||||
case 'boolean':
|
||||
config[property] = getBooleanFromString(process.env[variable]);
|
||||
config[property] = getBooleanFromString(value);
|
||||
break;
|
||||
case 'string':
|
||||
config[property] = process.env[variable];
|
||||
config[property] = value;
|
||||
default:
|
||||
console.warn(`Unsupported environment variable type ${typeof innerConfig} ${variable}`);
|
||||
console.warn(`Unsupported environment variable type ${typeof innerConfig} ${DSPACE(variable)}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,6 +131,8 @@ const overrideWithEnvironment = (config: Config, key: string = '') => {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
const buildBaseUrl = (config: ServerConfig): void => {
|
||||
config.baseUrl = [
|
||||
config.ssl ? 'https://' : 'http://',
|
||||
@@ -168,7 +179,7 @@ export const buildAppConfig = (destConfigPath?: string): AppConfig => {
|
||||
}
|
||||
|
||||
// override with external config if specified by environment variable `APP_CONFIG_PATH`
|
||||
const externalConfigPath = process.env.APP_CONFIG_PATH;
|
||||
const externalConfigPath = ENV('APP_CONFIG_PATH', true);
|
||||
if (isNotEmpty(externalConfigPath)) {
|
||||
if (fs.existsSync(externalConfigPath)) {
|
||||
overrideWithConfig(appConfig, externalConfigPath);
|
||||
@@ -181,16 +192,16 @@ export const buildAppConfig = (destConfigPath?: string): AppConfig => {
|
||||
overrideWithEnvironment(appConfig);
|
||||
|
||||
// apply existing non convention UI environment variables
|
||||
appConfig.ui.host = isNotEmpty(process.env.DSPACE_HOST) ? process.env.DSPACE_HOST : appConfig.ui.host;
|
||||
appConfig.ui.port = isNotEmpty(process.env.DSPACE_PORT) ? getNumberFromString(process.env.DSPACE_PORT) : appConfig.ui.port;
|
||||
appConfig.ui.nameSpace = isNotEmpty(process.env.DSPACE_NAMESPACE) ? process.env.DSPACE_NAMESPACE : appConfig.ui.nameSpace;
|
||||
appConfig.ui.ssl = isNotEmpty(process.env.DSPACE_SSL) ? getBooleanFromString(process.env.DSPACE_SSL) : appConfig.ui.ssl;
|
||||
appConfig.ui.host = isNotEmpty(ENV('HOST', true)) ? ENV('HOST', true) : appConfig.ui.host;
|
||||
appConfig.ui.port = isNotEmpty(ENV('PORT', true)) ? getNumberFromString(ENV('PORT', true)) : appConfig.ui.port;
|
||||
appConfig.ui.nameSpace = isNotEmpty(ENV('NAMESPACE', true)) ? ENV('NAMESPACE', true) : appConfig.ui.nameSpace;
|
||||
appConfig.ui.ssl = isNotEmpty(ENV('SSL', true)) ? getBooleanFromString(ENV('SSL', true)) : appConfig.ui.ssl;
|
||||
|
||||
// apply existing non convention REST environment variables
|
||||
appConfig.rest.host = isNotEmpty(process.env.DSPACE_REST_HOST) ? process.env.DSPACE_REST_HOST : appConfig.rest.host;
|
||||
appConfig.rest.port = isNotEmpty(process.env.DSPACE_REST_PORT) ? getNumberFromString(process.env.DSPACE_REST_PORT) : appConfig.rest.port;
|
||||
appConfig.rest.nameSpace = isNotEmpty(process.env.DSPACE_REST_NAMESPACE) ? process.env.DSPACE_REST_NAMESPACE : appConfig.rest.nameSpace;
|
||||
appConfig.rest.ssl = isNotEmpty(process.env.DSPACE_REST_SSL) ? getBooleanFromString(process.env.DSPACE_REST_SSL) : appConfig.rest.ssl;
|
||||
appConfig.rest.host = isNotEmpty(ENV('REST_HOST', true)) ? ENV('REST_HOST', true) : appConfig.rest.host;
|
||||
appConfig.rest.port = isNotEmpty(ENV('REST_PORT', true)) ? getNumberFromString(ENV('REST_PORT', true)) : appConfig.rest.port;
|
||||
appConfig.rest.nameSpace = isNotEmpty(ENV('REST_NAMESPACE', true)) ? ENV('REST_NAMESPACE', true) : appConfig.rest.nameSpace;
|
||||
appConfig.rest.ssl = isNotEmpty(ENV('REST_SSL', true)) ? getBooleanFromString(ENV('REST_SSL', true)) : appConfig.rest.ssl;
|
||||
|
||||
// apply build defined production
|
||||
appConfig.production = env === 'production';
|
||||
|
Reference in New Issue
Block a user