Browse Source

Merge branch 'main' of github.com:immich-app/immich

Alex Tran 2 years ago
parent
commit
de4a699c46

+ 10 - 3
server/libs/common/src/config/app.config.ts

@@ -16,14 +16,21 @@ const jwtSecretValidator: Joi.CustomValidator<string> = (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 = {
   envFilePath: '.env',
   isGlobal: true,
   validationSchema: Joi.object({
     NODE_ENV: Joi.string().required().valid('development', 'production', 'staging').default('development'),
-    DB_USERNAME: Joi.string().required(),
-    DB_PASSWORD: Joi.string().required(),
-    DB_DATABASE_NAME: Joi.string().required(),
+    DB_USERNAME: WHEN_DB_URL_SET,
+    DB_PASSWORD: WHEN_DB_URL_SET,
+    DB_DATABASE_NAME: WHEN_DB_URL_SET,
+    DB_URL: Joi.string().optional(),
     JWT_SECRET: Joi.string().required().custom(jwtSecretValidator),
     DISABLE_REVERSE_GEOCODING: Joi.boolean().optional().valid(true, false).default(false),
     REVERSE_GEOCODING_PRECISION: Joi.number().optional().valid(0, 1, 2, 3).default(3),

+ 14 - 6
server/libs/infra/src/db/config/database.config.ts

@@ -1,13 +1,8 @@
 import { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions';
 import { DataSource } from 'typeorm';
 
-export const databaseConfig: PostgresConnectionOptions = {
+const baseDatabaseConfig: PostgresConnectionOptions = {
   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}'],
   synchronize: false,
   migrations: [__dirname + '/../migrations/*.{js,ts}'],
@@ -15,4 +10,17 @@ export const databaseConfig: PostgresConnectionOptions = {
   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);