diff --git a/packages/backend-core/src/environment.ts b/packages/backend-core/src/environment.ts index 1bea1f3692..155f09e6d9 100644 --- a/packages/backend-core/src/environment.ts +++ b/packages/backend-core/src/environment.ts @@ -96,6 +96,7 @@ const environment = { SALT_ROUNDS: process.env.SALT_ROUNDS, REDIS_URL: process.env.REDIS_URL || "localhost:6379", REDIS_PASSWORD: process.env.REDIS_PASSWORD || "budibase", + REDIS_CLUSTERED: process.env.REDIS_CLUSTERED, MOCK_REDIS: process.env.MOCK_REDIS, MINIO_ACCESS_KEY: process.env.MINIO_ACCESS_KEY, MINIO_SECRET_KEY: process.env.MINIO_SECRET_KEY, diff --git a/packages/backend-core/src/redis/redis.ts b/packages/backend-core/src/redis/redis.ts index 186865ccda..2d54b51a9f 100644 --- a/packages/backend-core/src/redis/redis.ts +++ b/packages/backend-core/src/redis/redis.ts @@ -12,7 +12,7 @@ import * as timers from "../timers" const RETRY_PERIOD_MS = 2000 const STARTUP_TIMEOUT_MS = 5000 -const CLUSTERED = false +const CLUSTERED = env.REDIS_CLUSTERED const DEFAULT_SELECT_DB = SelectableDatabase.DEFAULT // for testing just generate the client once @@ -81,7 +81,7 @@ function init(selectDb = DEFAULT_SELECT_DB) { if (client) { client.disconnect() } - const { redisProtocolUrl, opts, host, port } = getRedisOptions(CLUSTERED) + const { redisProtocolUrl, opts, host, port } = getRedisOptions() if (CLUSTERED) { client = new Redis.Cluster([{ host, port }], opts) diff --git a/packages/backend-core/src/redis/utils.ts b/packages/backend-core/src/redis/utils.ts index 7606c77b87..2c49ee4941 100644 --- a/packages/backend-core/src/redis/utils.ts +++ b/packages/backend-core/src/redis/utils.ts @@ -57,7 +57,7 @@ export enum SelectableDatabase { UNUSED_14 = 15, } -export function getRedisOptions(clustered = false) { +export function getRedisOptions() { let password = env.REDIS_PASSWORD let url: string[] | string = env.REDIS_URL.split("//") // get rid of the protocol @@ -83,7 +83,7 @@ export function getRedisOptions(clustered = false) { const opts: any = { connectTimeout: CONNECT_TIMEOUT_MS, } - if (clustered) { + if (env.REDIS_CLUSTERED) { opts.redisOptions = {} opts.redisOptions.tls = {} opts.redisOptions.password = password diff --git a/packages/server/src/api/routes/public/index.ts b/packages/server/src/api/routes/public/index.ts index e2bce1e730..bed798f75b 100644 --- a/packages/server/src/api/routes/public/index.ts +++ b/packages/server/src/api/routes/public/index.ts @@ -42,8 +42,14 @@ if (!env.isTest()) { host: REDIS_OPTS.host, port: REDIS_OPTS.port, }, - password: REDIS_OPTS.opts.password, - database: 1, + password: + REDIS_OPTS.opts.password || REDIS_OPTS.opts.redisOptions.password, + } + + if (!env.REDIS_CLUSTERED) { + // Can't set direct redis db in clustered env + // @ts-ignore + options.database = 1 } } rateLimitStore = new Stores.Redis(options) diff --git a/packages/server/src/environment.ts b/packages/server/src/environment.ts index 1bd5a6486c..bcf9488777 100644 --- a/packages/server/src/environment.ts +++ b/packages/server/src/environment.ts @@ -47,6 +47,7 @@ const environment = { MINIO_SECRET_KEY: process.env.MINIO_SECRET_KEY, REDIS_URL: process.env.REDIS_URL, REDIS_PASSWORD: process.env.REDIS_PASSWORD, + REDIS_CLUSTERED: process.env.REDIS_CLUSTERED, HTTP_MIGRATIONS: process.env.HTTP_MIGRATIONS, API_REQ_LIMIT_PER_SEC: process.env.API_REQ_LIMIT_PER_SEC, GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,