diff --git a/server/src/app.module.ts b/server/src/app.module.ts index df05daf3e2..aa7dbd94fe 100644 --- a/server/src/app.module.ts +++ b/server/src/app.module.ts @@ -8,6 +8,7 @@ import { OpenTelemetryModule } from 'nestjs-otel'; import { commandsAndQuestions } from 'src/commands'; import { IWorker } from 'src/constants'; import { controllers } from 'src/controllers'; +import { StorageCore } from 'src/cores/storage.core'; import { ImmichWorker } from 'src/enum'; import { MaintenanceAuthGuard } from 'src/maintenance/maintenance-auth.guard'; import { MaintenanceWebsocketRepository } from 'src/maintenance/maintenance-websocket.repository'; @@ -128,6 +129,8 @@ export class MaintenanceModule { } async onModuleInit() { + StorageCore.setMediaLocation(this.maintenanceWorkerService.detectMediaLocation()); + await this.maintenanceWorkerService.logSecret(); } } diff --git a/server/src/maintenance/maintenance-worker.service.ts b/server/src/maintenance/maintenance-worker.service.ts index 2a9605a2a9..a251d8b953 100644 --- a/server/src/maintenance/maintenance-worker.service.ts +++ b/server/src/maintenance/maintenance-worker.service.ts @@ -113,6 +113,32 @@ export class MaintenanceWorkerService { }; } + /** + * {@link _StorageService.detectMediaLocation} + */ + detectMediaLocation(): string { + const envData = this.configRepository.getEnv(); + if (envData.storage.mediaLocation) { + return envData.storage.mediaLocation; + } + + const targets: string[] = []; + const candidates = ['/data', '/usr/src/app/upload']; + + for (const candidate of candidates) { + const exists = this.storageRepository.existsSync(candidate); + if (exists) { + targets.push(candidate); + } + } + + if (targets.length === 1) { + return targets[0]; + } + + return '/usr/src/app/upload'; + } + private async secret(): Promise { const state = (await this.systemMetadataRepository.get(SystemMetadataKey.MaintenanceMode)) as { secret: string;