mirror of
https://github.com/immich-app/immich.git
synced 2025-01-06 11:56:46 +01:00
Allow the use of SSL connections to the postgres database. (#1256)
* Allow the use of SSL connections to the postgres database. * Add default SSL false when no env set * Add commented out example of DB_SSL env * Refactor add SSL option into PostgresConnectionOptions * Refactor the database connection to optionally use a URL string instead of the env variables * Refactor the database connection based on feedback * Add dynamic validation around the DB envs * Remove DB_URL from example * Fix rebase * Add back the optional database port in the example * Formatted file correctly * change types to a const to fix tests
This commit is contained in:
parent
652f5cbf20
commit
5340683199
2 changed files with 24 additions and 9 deletions
|
@ -16,14 +16,21 @@ const jwtSecretValidator: Joi.CustomValidator<string> = (value) => {
|
||||||
return value;
|
return value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const WHEN_DB_URL_SET = Joi.when('DB_URL', {
|
||||||
|
is: Joi.exist(),
|
||||||
|
then: Joi.string().optional(),
|
||||||
|
otherwise: Joi.string().required(),
|
||||||
|
});
|
||||||
|
|
||||||
export const immichAppConfig: ConfigModuleOptions = {
|
export const immichAppConfig: ConfigModuleOptions = {
|
||||||
envFilePath: '.env',
|
envFilePath: '.env',
|
||||||
isGlobal: true,
|
isGlobal: true,
|
||||||
validationSchema: Joi.object({
|
validationSchema: Joi.object({
|
||||||
NODE_ENV: Joi.string().required().valid('development', 'production', 'staging').default('development'),
|
NODE_ENV: Joi.string().required().valid('development', 'production', 'staging').default('development'),
|
||||||
DB_USERNAME: Joi.string().required(),
|
DB_USERNAME: WHEN_DB_URL_SET,
|
||||||
DB_PASSWORD: Joi.string().required(),
|
DB_PASSWORD: WHEN_DB_URL_SET,
|
||||||
DB_DATABASE_NAME: Joi.string().required(),
|
DB_DATABASE_NAME: WHEN_DB_URL_SET,
|
||||||
|
DB_URL: Joi.string().optional(),
|
||||||
JWT_SECRET: Joi.string().required().custom(jwtSecretValidator),
|
JWT_SECRET: Joi.string().required().custom(jwtSecretValidator),
|
||||||
DISABLE_REVERSE_GEOCODING: Joi.boolean().optional().valid(true, false).default(false),
|
DISABLE_REVERSE_GEOCODING: Joi.boolean().optional().valid(true, false).default(false),
|
||||||
REVERSE_GEOCODING_PRECISION: Joi.number().optional().valid(0, 1, 2, 3).default(3),
|
REVERSE_GEOCODING_PRECISION: Joi.number().optional().valid(0, 1, 2, 3).default(3),
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
import { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions';
|
import { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions';
|
||||||
import { DataSource } from 'typeorm';
|
import { DataSource } from 'typeorm';
|
||||||
|
|
||||||
export const databaseConfig: PostgresConnectionOptions = {
|
const baseDatabaseConfig: PostgresConnectionOptions = {
|
||||||
type: 'postgres',
|
type: 'postgres',
|
||||||
host: process.env.DB_HOSTNAME || 'immich_postgres',
|
|
||||||
port: parseInt(process.env.DB_PORT || '5432'),
|
|
||||||
username: process.env.DB_USERNAME,
|
|
||||||
password: process.env.DB_PASSWORD,
|
|
||||||
database: process.env.DB_DATABASE_NAME,
|
|
||||||
entities: [__dirname + '/../**/*.entity.{js,ts}'],
|
entities: [__dirname + '/../**/*.entity.{js,ts}'],
|
||||||
synchronize: false,
|
synchronize: false,
|
||||||
migrations: [__dirname + '/../migrations/*.{js,ts}'],
|
migrations: [__dirname + '/../migrations/*.{js,ts}'],
|
||||||
|
@ -15,4 +10,17 @@ export const databaseConfig: PostgresConnectionOptions = {
|
||||||
connectTimeoutMS: 10000, // 10 seconds
|
connectTimeoutMS: 10000, // 10 seconds
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const envBasedDatabaseConfig = {
|
||||||
|
host: process.env.DB_HOSTNAME || 'immich_postgres',
|
||||||
|
port: parseInt(process.env.DB_PORT || '5432'),
|
||||||
|
username: process.env.DB_USERNAME,
|
||||||
|
password: process.env.DB_PASSWORD,
|
||||||
|
database: process.env.DB_DATABASE_NAME,
|
||||||
|
};
|
||||||
|
|
||||||
|
const url = process.env.DB_URL;
|
||||||
|
const additionalSSLDatabaseConfig = url ? { url } : envBasedDatabaseConfig;
|
||||||
|
|
||||||
|
export const databaseConfig: PostgresConnectionOptions = { ...baseDatabaseConfig, ...additionalSSLDatabaseConfig };
|
||||||
|
|
||||||
export const dataSource = new DataSource(databaseConfig);
|
export const dataSource = new DataSource(databaseConfig);
|
||||||
|
|
Loading…
Reference in a new issue