瀏覽代碼

fix: disable running migrations in worker mode of a given service

Karol Sójko 1 年之前
父節點
當前提交
a82b9a0c8a

+ 1 - 1
packages/auth/bin/backup.ts

@@ -75,7 +75,7 @@ const requestBackups = async (
   })
 }
 
-const container = new ContainerConfigLoader()
+const container = new ContainerConfigLoader('worker')
 void container.load().then((container) => {
   dayjs.extend(utc)
 

+ 1 - 1
packages/auth/bin/cleanup.ts

@@ -18,7 +18,7 @@ const cleanup = async (
   await cleanupExpiredSessions.execute({ date })
 }
 
-const container = new ContainerConfigLoader()
+const container = new ContainerConfigLoader('worker')
 void container.load().then((container) => {
   const env: Env = new Env()
   env.load()

+ 1 - 1
packages/auth/bin/stats.ts

@@ -8,7 +8,7 @@ import TYPES from '../src/Bootstrap/Types'
 import { Env } from '../src/Bootstrap/Env'
 import { PersistStatistics } from '../src/Domain/UseCase/PersistStatistics/PersistStatistics'
 
-const container = new ContainerConfigLoader()
+const container = new ContainerConfigLoader('worker')
 void container.load().then((container) => {
   const env: Env = new Env()
   env.load()

+ 1 - 1
packages/auth/bin/transition.ts

@@ -35,7 +35,7 @@ const requestTransition = async (
   }
 }
 
-const container = new ContainerConfigLoader()
+const container = new ContainerConfigLoader('worker')
 void container.load().then((container) => {
   dayjs.extend(utc)
 

+ 1 - 1
packages/auth/bin/user_email_backup.ts

@@ -63,7 +63,7 @@ const requestBackups = async (
   return
 }
 
-const container = new ContainerConfigLoader()
+const container = new ContainerConfigLoader('worker')
 void container.load().then((container) => {
   dayjs.extend(utc)
 

+ 1 - 1
packages/auth/bin/worker.ts

@@ -9,7 +9,7 @@ import { DomainEventSubscriberFactoryInterface } from '@standardnotes/domain-eve
 import * as dayjs from 'dayjs'
 import * as utc from 'dayjs/plugin/utc'
 
-const container = new ContainerConfigLoader()
+const container = new ContainerConfigLoader('worker')
 void container.load().then((container) => {
   dayjs.extend(utc)
 

+ 3 - 1
packages/auth/src/Bootstrap/Container.ts

@@ -274,6 +274,8 @@ import { UserAddedToSharedVaultEventHandler } from '../Domain/Handler/UserAddedT
 import { UserRemovedFromSharedVaultEventHandler } from '../Domain/Handler/UserRemovedFromSharedVaultEventHandler'
 
 export class ContainerConfigLoader {
+  constructor(private mode: 'server' | 'worker' = 'server') {}
+
   async load(configuration?: {
     controllerConatiner?: ControllerContainerInterface
     directCallDomainEventPublisher?: DirectCallDomainEventPublisher
@@ -310,7 +312,7 @@ export class ContainerConfigLoader {
     }
     container.bind<winston.Logger>(TYPES.Auth_Logger).toConstantValue(logger)
 
-    const appDataSource = new AppDataSource(env)
+    const appDataSource = new AppDataSource({ env, runMigrations: this.mode === 'server' })
     await appDataSource.initialize()
 
     logger.debug('Database initialized')

+ 29 - 24
packages/auth/src/Bootstrap/DataSource.ts

@@ -23,7 +23,12 @@ import { TypeORMSharedVaultUser } from '../Infra/TypeORM/TypeORMSharedVaultUser'
 export class AppDataSource {
   private _dataSource: DataSource | undefined
 
-  constructor(private env: Env) {}
+  constructor(
+    private configuration: {
+      env: Env
+      runMigrations: boolean
+    },
+  ) {}
 
   getRepository<Entity extends ObjectLiteral>(target: EntityTarget<Entity>): Repository<Entity> {
     if (!this._dataSource) {
@@ -38,12 +43,12 @@ export class AppDataSource {
   }
 
   get dataSource(): DataSource {
-    this.env.load()
+    this.configuration.env.load()
 
-    const isConfiguredForMySQL = this.env.get('DB_TYPE') === 'mysql'
+    const isConfiguredForMySQL = this.configuration.env.get('DB_TYPE') === 'mysql'
 
-    const maxQueryExecutionTime = this.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
-      ? +this.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
+    const maxQueryExecutionTime = this.configuration.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
+      ? +this.configuration.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
       : 45_000
 
     const commonDataSourceOptions = {
@@ -68,28 +73,28 @@ export class AppDataSource {
         TypeORMSharedVaultUser,
       ],
       migrations: [`${__dirname}/../../migrations/${isConfiguredForMySQL ? 'mysql' : 'sqlite'}/*.js`],
-      migrationsRun: true,
-      logging: <LoggerOptions>this.env.get('DB_DEBUG_LEVEL', true) ?? 'info',
+      migrationsRun: this.configuration.runMigrations,
+      logging: <LoggerOptions>this.configuration.env.get('DB_DEBUG_LEVEL', true) ?? 'info',
     }
 
     if (isConfiguredForMySQL) {
-      const inReplicaMode = this.env.get('DB_REPLICA_HOST', true) ? true : false
+      const inReplicaMode = this.configuration.env.get('DB_REPLICA_HOST', true) ? true : false
 
       const replicationConfig = {
         master: {
-          host: this.env.get('DB_HOST'),
-          port: parseInt(this.env.get('DB_PORT')),
-          username: this.env.get('DB_USERNAME'),
-          password: this.env.get('DB_PASSWORD'),
-          database: this.env.get('DB_DATABASE'),
+          host: this.configuration.env.get('DB_HOST'),
+          port: parseInt(this.configuration.env.get('DB_PORT')),
+          username: this.configuration.env.get('DB_USERNAME'),
+          password: this.configuration.env.get('DB_PASSWORD'),
+          database: this.configuration.env.get('DB_DATABASE'),
         },
         slaves: [
           {
-            host: this.env.get('DB_REPLICA_HOST', true),
-            port: parseInt(this.env.get('DB_PORT')),
-            username: this.env.get('DB_USERNAME'),
-            password: this.env.get('DB_PASSWORD'),
-            database: this.env.get('DB_DATABASE'),
+            host: this.configuration.env.get('DB_REPLICA_HOST', true),
+            port: parseInt(this.configuration.env.get('DB_PORT')),
+            username: this.configuration.env.get('DB_USERNAME'),
+            password: this.configuration.env.get('DB_PASSWORD'),
+            database: this.configuration.env.get('DB_DATABASE'),
           },
         ],
         removeNodeErrorCount: 10,
@@ -103,11 +108,11 @@ export class AppDataSource {
         supportBigNumbers: true,
         bigNumberStrings: false,
         replication: inReplicaMode ? replicationConfig : undefined,
-        host: inReplicaMode ? undefined : this.env.get('DB_HOST'),
-        port: inReplicaMode ? undefined : parseInt(this.env.get('DB_PORT')),
-        username: inReplicaMode ? undefined : this.env.get('DB_USERNAME'),
-        password: inReplicaMode ? undefined : this.env.get('DB_PASSWORD'),
-        database: inReplicaMode ? undefined : this.env.get('DB_DATABASE'),
+        host: inReplicaMode ? undefined : this.configuration.env.get('DB_HOST'),
+        port: inReplicaMode ? undefined : parseInt(this.configuration.env.get('DB_PORT')),
+        username: inReplicaMode ? undefined : this.configuration.env.get('DB_USERNAME'),
+        password: inReplicaMode ? undefined : this.configuration.env.get('DB_PASSWORD'),
+        database: inReplicaMode ? undefined : this.configuration.env.get('DB_DATABASE'),
       }
 
       this._dataSource = new DataSource(mySQLDataSourceOptions)
@@ -115,7 +120,7 @@ export class AppDataSource {
       const sqliteDataSourceOptions: SqliteConnectionOptions = {
         ...commonDataSourceOptions,
         type: 'sqlite',
-        database: this.env.get('DB_SQLITE_DATABASE_PATH'),
+        database: this.configuration.env.get('DB_SQLITE_DATABASE_PATH'),
         enableWAL: true,
         busyErrorRetry: 2000,
       }

+ 1 - 1
packages/auth/src/Bootstrap/MigrationsDataSource.ts

@@ -4,4 +4,4 @@ import { Env } from './Env'
 const env: Env = new Env()
 env.load()
 
-export const MigrationsDataSource = new AppDataSource(env).dataSource
+export const MigrationsDataSource = new AppDataSource({ env, runMigrations: true }).dataSource

+ 1 - 1
packages/revisions/bin/worker.ts

@@ -7,7 +7,7 @@ import { Env } from '../src/Bootstrap/Env'
 import { DomainEventSubscriberFactoryInterface } from '@standardnotes/domain-events'
 import { ContainerConfigLoader } from '../src/Bootstrap/Container'
 
-const container = new ContainerConfigLoader()
+const container = new ContainerConfigLoader('worker')
 void container.load().then((container) => {
   const env: Env = new Env()
   env.load()

+ 3 - 1
packages/revisions/src/Bootstrap/Container.ts

@@ -70,6 +70,8 @@ import { RemoveRevisionsFromSharedVault } from '../Domain/UseCase/RemoveRevision
 import { ItemRemovedFromSharedVaultEventHandler } from '../Domain/Handler/ItemRemovedFromSharedVaultEventHandler'
 
 export class ContainerConfigLoader {
+  constructor(private mode: 'server' | 'worker' = 'server') {}
+
   async load(configuration?: {
     controllerConatiner?: ControllerContainerInterface
     directCallDomainEventPublisher?: DirectCallDomainEventPublisher
@@ -115,7 +117,7 @@ export class ContainerConfigLoader {
 
     container.bind<TimerInterface>(TYPES.Revisions_Timer).toDynamicValue(() => new Timer())
 
-    const appDataSource = new AppDataSource(env)
+    const appDataSource = new AppDataSource({ env, runMigrations: this.mode === 'server' })
     await appDataSource.initialize()
 
     logger.debug('Database initialized')

+ 38 - 32
packages/revisions/src/Bootstrap/DataSource.ts

@@ -12,7 +12,12 @@ export class AppDataSource {
   private _dataSource: DataSource | undefined
   private _secondaryDataSource: DataSource | undefined
 
-  constructor(private env: Env) {}
+  constructor(
+    private configuration: {
+      env: Env
+      runMigrations: boolean
+    },
+  ) {}
 
   getRepository<Entity extends ObjectLiteral>(target: EntityTarget<Entity>): Repository<Entity> {
     if (!this._dataSource) {
@@ -39,20 +44,20 @@ export class AppDataSource {
   }
 
   get secondaryDataSource(): DataSource | undefined {
-    this.env.load()
+    this.configuration.env.load()
 
-    if (this.env.get('SECONDARY_DB_ENABLED', true) !== 'true') {
+    if (this.configuration.env.get('SECONDARY_DB_ENABLED', true) !== 'true') {
       return undefined
     }
 
     this._secondaryDataSource = new DataSource({
       type: 'mongodb',
-      host: this.env.get('MONGO_HOST'),
+      host: this.configuration.env.get('MONGO_HOST'),
       authSource: 'admin',
-      port: parseInt(this.env.get('MONGO_PORT')),
-      username: this.env.get('MONGO_USERNAME'),
-      password: this.env.get('MONGO_PASSWORD', true),
-      database: this.env.get('MONGO_DATABASE'),
+      port: parseInt(this.configuration.env.get('MONGO_PORT')),
+      username: this.configuration.env.get('MONGO_USERNAME'),
+      password: this.configuration.env.get('MONGO_PASSWORD', true),
+      database: this.configuration.env.get('MONGO_DATABASE'),
       entities: [MongoDBRevision],
       retryWrites: false,
       synchronize: true,
@@ -62,15 +67,16 @@ export class AppDataSource {
   }
 
   get dataSource(): DataSource {
-    this.env.load()
+    this.configuration.env.load()
 
-    const isConfiguredForMySQL = this.env.get('DB_TYPE') === 'mysql'
+    const isConfiguredForMySQL = this.configuration.env.get('DB_TYPE') === 'mysql'
 
     const isConfiguredForHomeServerOrSelfHosting =
-      this.env.get('MODE', true) === 'home-server' || this.env.get('MODE', true) === 'self-hosted'
+      this.configuration.env.get('MODE', true) === 'home-server' ||
+      this.configuration.env.get('MODE', true) === 'self-hosted'
 
-    const maxQueryExecutionTime = this.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
-      ? +this.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
+    const maxQueryExecutionTime = this.configuration.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
+      ? +this.configuration.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
       : 45_000
 
     const migrationsSourceDirectoryName = isConfiguredForMySQL
@@ -83,28 +89,28 @@ export class AppDataSource {
       maxQueryExecutionTime,
       entities: [isConfiguredForHomeServerOrSelfHosting ? SQLRevision : SQLLegacyRevision],
       migrations: [`${__dirname}/../../migrations/${migrationsSourceDirectoryName}/*.js`],
-      migrationsRun: true,
-      logging: <LoggerOptions>this.env.get('DB_DEBUG_LEVEL', true) ?? 'info',
+      migrationsRun: this.configuration.runMigrations,
+      logging: <LoggerOptions>this.configuration.env.get('DB_DEBUG_LEVEL', true) ?? 'info',
     }
 
     if (isConfiguredForMySQL) {
-      const inReplicaMode = this.env.get('DB_REPLICA_HOST', true) ? true : false
+      const inReplicaMode = this.configuration.env.get('DB_REPLICA_HOST', true) ? true : false
 
       const replicationConfig = {
         master: {
-          host: this.env.get('DB_HOST'),
-          port: parseInt(this.env.get('DB_PORT')),
-          username: this.env.get('DB_USERNAME'),
-          password: this.env.get('DB_PASSWORD'),
-          database: this.env.get('DB_DATABASE'),
+          host: this.configuration.env.get('DB_HOST'),
+          port: parseInt(this.configuration.env.get('DB_PORT')),
+          username: this.configuration.env.get('DB_USERNAME'),
+          password: this.configuration.env.get('DB_PASSWORD'),
+          database: this.configuration.env.get('DB_DATABASE'),
         },
         slaves: [
           {
-            host: this.env.get('DB_REPLICA_HOST', true),
-            port: parseInt(this.env.get('DB_PORT')),
-            username: this.env.get('DB_USERNAME'),
-            password: this.env.get('DB_PASSWORD'),
-            database: this.env.get('DB_DATABASE'),
+            host: this.configuration.env.get('DB_REPLICA_HOST', true),
+            port: parseInt(this.configuration.env.get('DB_PORT')),
+            username: this.configuration.env.get('DB_USERNAME'),
+            password: this.configuration.env.get('DB_PASSWORD'),
+            database: this.configuration.env.get('DB_DATABASE'),
           },
         ],
         removeNodeErrorCount: 10,
@@ -118,11 +124,11 @@ export class AppDataSource {
         supportBigNumbers: true,
         bigNumberStrings: false,
         replication: inReplicaMode ? replicationConfig : undefined,
-        host: inReplicaMode ? undefined : this.env.get('DB_HOST'),
-        port: inReplicaMode ? undefined : parseInt(this.env.get('DB_PORT')),
-        username: inReplicaMode ? undefined : this.env.get('DB_USERNAME'),
-        password: inReplicaMode ? undefined : this.env.get('DB_PASSWORD'),
-        database: inReplicaMode ? undefined : this.env.get('DB_DATABASE'),
+        host: inReplicaMode ? undefined : this.configuration.env.get('DB_HOST'),
+        port: inReplicaMode ? undefined : parseInt(this.configuration.env.get('DB_PORT')),
+        username: inReplicaMode ? undefined : this.configuration.env.get('DB_USERNAME'),
+        password: inReplicaMode ? undefined : this.configuration.env.get('DB_PASSWORD'),
+        database: inReplicaMode ? undefined : this.configuration.env.get('DB_DATABASE'),
       }
 
       this._dataSource = new DataSource(mySQLDataSourceOptions)
@@ -130,7 +136,7 @@ export class AppDataSource {
       const sqliteDataSourceOptions: SqliteConnectionOptions = {
         ...commonDataSourceOptions,
         type: 'sqlite',
-        database: this.env.get('DB_SQLITE_DATABASE_PATH'),
+        database: this.configuration.env.get('DB_SQLITE_DATABASE_PATH'),
         enableWAL: true,
         busyErrorRetry: 2000,
       }

+ 1 - 1
packages/revisions/src/Bootstrap/MigrationsDataSource.ts

@@ -4,4 +4,4 @@ import { Env } from './Env'
 const env: Env = new Env()
 env.load()
 
-export const MigrationsDataSource = new AppDataSource(env).dataSource
+export const MigrationsDataSource = new AppDataSource({ env, runMigrations: true }).dataSource

+ 1 - 1
packages/syncing-server/bin/transition.ts

@@ -24,7 +24,7 @@ const requestTransition = async (
   return
 }
 
-const container = new ContainerConfigLoader()
+const container = new ContainerConfigLoader('worker')
 void container.load().then((container) => {
   const env: Env = new Env()
   env.load()

+ 1 - 1
packages/syncing-server/bin/worker.ts

@@ -7,7 +7,7 @@ import { Env } from '../src/Bootstrap/Env'
 import { DomainEventSubscriberFactoryInterface } from '@standardnotes/domain-events'
 import { ContainerConfigLoader } from '../src/Bootstrap/Container'
 
-const container = new ContainerConfigLoader()
+const container = new ContainerConfigLoader('worker')
 void container.load().then((container) => {
   const env: Env = new Env()
   env.load()

+ 3 - 1
packages/syncing-server/src/Bootstrap/Container.ts

@@ -173,6 +173,8 @@ export class ContainerConfigLoader {
   private readonly DEFAULT_MAX_ITEMS_LIMIT = 300
   private readonly DEFAULT_FILE_UPLOAD_PATH = `${__dirname}/../../uploads`
 
+  constructor(private mode: 'server' | 'worker' = 'server') {}
+
   async load(configuration?: {
     controllerConatiner?: ControllerContainerInterface
     directCallDomainEventPublisher?: DirectCallDomainEventPublisher
@@ -211,7 +213,7 @@ export class ContainerConfigLoader {
     }
     container.bind<winston.Logger>(TYPES.Sync_Logger).toConstantValue(logger)
 
-    const appDataSource = new AppDataSource(env)
+    const appDataSource = new AppDataSource({ env, runMigrations: this.mode === 'server' })
     await appDataSource.initialize()
 
     logger.debug('Database initialized')

+ 38 - 32
packages/syncing-server/src/Bootstrap/DataSource.ts

@@ -15,7 +15,12 @@ export class AppDataSource {
   private _dataSource: DataSource | undefined
   private _secondaryDataSource: DataSource | undefined
 
-  constructor(private env: Env) {}
+  constructor(
+    private configuration: {
+      env: Env
+      runMigrations: boolean
+    },
+  ) {}
 
   getRepository<Entity extends ObjectLiteral>(target: EntityTarget<Entity>): Repository<Entity> {
     if (!this._dataSource) {
@@ -42,20 +47,20 @@ export class AppDataSource {
   }
 
   get secondaryDataSource(): DataSource | undefined {
-    this.env.load()
+    this.configuration.env.load()
 
-    if (this.env.get('SECONDARY_DB_ENABLED', true) !== 'true') {
+    if (this.configuration.env.get('SECONDARY_DB_ENABLED', true) !== 'true') {
       return undefined
     }
 
     this._secondaryDataSource = new DataSource({
       type: 'mongodb',
-      host: this.env.get('MONGO_HOST'),
+      host: this.configuration.env.get('MONGO_HOST'),
       authSource: 'admin',
-      port: parseInt(this.env.get('MONGO_PORT')),
-      username: this.env.get('MONGO_USERNAME'),
-      password: this.env.get('MONGO_PASSWORD', true),
-      database: this.env.get('MONGO_DATABASE'),
+      port: parseInt(this.configuration.env.get('MONGO_PORT')),
+      username: this.configuration.env.get('MONGO_USERNAME'),
+      password: this.configuration.env.get('MONGO_PASSWORD', true),
+      database: this.configuration.env.get('MONGO_DATABASE'),
       entities: [MongoDBItem],
       retryWrites: false,
       synchronize: true,
@@ -65,14 +70,15 @@ export class AppDataSource {
   }
 
   get dataSource(): DataSource {
-    this.env.load()
+    this.configuration.env.load()
 
-    const isConfiguredForMySQL = this.env.get('DB_TYPE') === 'mysql'
+    const isConfiguredForMySQL = this.configuration.env.get('DB_TYPE') === 'mysql'
     const isConfiguredForHomeServerOrSelfHosting =
-      this.env.get('MODE', true) === 'home-server' || this.env.get('MODE', true) === 'self-hosted'
+      this.configuration.env.get('MODE', true) === 'home-server' ||
+      this.configuration.env.get('MODE', true) === 'self-hosted'
 
-    const maxQueryExecutionTime = this.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
-      ? +this.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
+    const maxQueryExecutionTime = this.configuration.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
+      ? +this.configuration.env.get('DB_MAX_QUERY_EXECUTION_TIME', true)
       : 45_000
 
     const migrationsSourceDirectoryName = isConfiguredForMySQL
@@ -92,28 +98,28 @@ export class AppDataSource {
         TypeORMMessage,
       ],
       migrations: [`${__dirname}/../../migrations/${migrationsSourceDirectoryName}/*.js`],
-      migrationsRun: true,
-      logging: <LoggerOptions>this.env.get('DB_DEBUG_LEVEL', true) ?? 'info',
+      migrationsRun: this.configuration.runMigrations,
+      logging: <LoggerOptions>this.configuration.env.get('DB_DEBUG_LEVEL', true) ?? 'info',
     }
 
     if (isConfiguredForMySQL) {
-      const inReplicaMode = this.env.get('DB_REPLICA_HOST', true) ? true : false
+      const inReplicaMode = this.configuration.env.get('DB_REPLICA_HOST', true) ? true : false
 
       const replicationConfig = {
         master: {
-          host: this.env.get('DB_HOST'),
-          port: parseInt(this.env.get('DB_PORT')),
-          username: this.env.get('DB_USERNAME'),
-          password: this.env.get('DB_PASSWORD'),
-          database: this.env.get('DB_DATABASE'),
+          host: this.configuration.env.get('DB_HOST'),
+          port: parseInt(this.configuration.env.get('DB_PORT')),
+          username: this.configuration.env.get('DB_USERNAME'),
+          password: this.configuration.env.get('DB_PASSWORD'),
+          database: this.configuration.env.get('DB_DATABASE'),
         },
         slaves: [
           {
-            host: this.env.get('DB_REPLICA_HOST', true),
-            port: parseInt(this.env.get('DB_PORT')),
-            username: this.env.get('DB_USERNAME'),
-            password: this.env.get('DB_PASSWORD'),
-            database: this.env.get('DB_DATABASE'),
+            host: this.configuration.env.get('DB_REPLICA_HOST', true),
+            port: parseInt(this.configuration.env.get('DB_PORT')),
+            username: this.configuration.env.get('DB_USERNAME'),
+            password: this.configuration.env.get('DB_PASSWORD'),
+            database: this.configuration.env.get('DB_DATABASE'),
           },
         ],
         removeNodeErrorCount: 10,
@@ -127,11 +133,11 @@ export class AppDataSource {
         supportBigNumbers: true,
         bigNumberStrings: false,
         replication: inReplicaMode ? replicationConfig : undefined,
-        host: inReplicaMode ? undefined : this.env.get('DB_HOST'),
-        port: inReplicaMode ? undefined : parseInt(this.env.get('DB_PORT')),
-        username: inReplicaMode ? undefined : this.env.get('DB_USERNAME'),
-        password: inReplicaMode ? undefined : this.env.get('DB_PASSWORD'),
-        database: inReplicaMode ? undefined : this.env.get('DB_DATABASE'),
+        host: inReplicaMode ? undefined : this.configuration.env.get('DB_HOST'),
+        port: inReplicaMode ? undefined : parseInt(this.configuration.env.get('DB_PORT')),
+        username: inReplicaMode ? undefined : this.configuration.env.get('DB_USERNAME'),
+        password: inReplicaMode ? undefined : this.configuration.env.get('DB_PASSWORD'),
+        database: inReplicaMode ? undefined : this.configuration.env.get('DB_DATABASE'),
       }
 
       this._dataSource = new DataSource(mySQLDataSourceOptions)
@@ -139,7 +145,7 @@ export class AppDataSource {
       const sqliteDataSourceOptions: SqliteConnectionOptions = {
         ...commonDataSourceOptions,
         type: 'sqlite',
-        database: this.env.get('DB_SQLITE_DATABASE_PATH'),
+        database: this.configuration.env.get('DB_SQLITE_DATABASE_PATH'),
         enableWAL: true,
         busyErrorRetry: 2000,
       }

+ 1 - 1
packages/syncing-server/src/Bootstrap/MigrationsDataSource.ts

@@ -4,4 +4,4 @@ import { Env } from './Env'
 const env: Env = new Env()
 env.load()
 
-export const MigrationsDataSource = new AppDataSource(env).dataSource
+export const MigrationsDataSource = new AppDataSource({ env, runMigrations: true }).dataSource