From 35f83d7c2d6e56dfc9015ca2d1df10f469411503 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Wed, 29 Apr 2026 02:05:53 +0000 Subject: [PATCH] fix: isolate platform service data dirs --- ts/classes/platform-services/providers/base.ts | 10 ++++++++++ ts/classes/platform-services/providers/clickhouse.ts | 4 ++-- ts/classes/platform-services/providers/mariadb.ts | 4 ++-- ts/classes/platform-services/providers/minio.ts | 4 ++-- ts/classes/platform-services/providers/mongodb.ts | 4 ++-- ts/classes/platform-services/providers/redis.ts | 4 ++-- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/ts/classes/platform-services/providers/base.ts b/ts/classes/platform-services/providers/base.ts index 9c7d580..c4760fc 100644 --- a/ts/classes/platform-services/providers/base.ts +++ b/ts/classes/platform-services/providers/base.ts @@ -103,6 +103,16 @@ export abstract class BasePlatformServiceProvider implements IPlatformServicePro return `onebox-${this.type}`; } + /** + * Get the host data directory for a platform service. + */ + protected getPlatformDataDir(serviceDirectoryArg: string): string { + const configuredDataDir = this.oneboxRef.database.getSetting('dataDir'); + const baseDataDir = configuredDataDir || + (Deno.env.get('ONEBOX_DEV') === 'true' ? './.nogit/platform-data' : '/var/lib/onebox'); + return `${baseDataDir.replace(/\/+$/, '')}/${serviceDirectoryArg}`; + } + /** * Generate a resource name from a user service name */ diff --git a/ts/classes/platform-services/providers/clickhouse.ts b/ts/classes/platform-services/providers/clickhouse.ts index 155399a..777c0d1 100644 --- a/ts/classes/platform-services/providers/clickhouse.ts +++ b/ts/classes/platform-services/providers/clickhouse.ts @@ -30,7 +30,7 @@ export class ClickHouseProvider extends BasePlatformServiceProvider { return { image: 'clickhouse/clickhouse-server:latest', port: 8123, // HTTP interface - volumes: ['/var/lib/onebox/clickhouse:/var/lib/clickhouse'], + volumes: [`${this.getPlatformDataDir('clickhouse')}:/var/lib/clickhouse`], environment: { CLICKHOUSE_DB: 'default', // Password will be generated and stored encrypted @@ -53,7 +53,7 @@ export class ClickHouseProvider extends BasePlatformServiceProvider { async deployContainer(): Promise { const config = this.getDefaultConfig(); const containerName = this.getContainerName(); - const dataDir = '/var/lib/onebox/clickhouse'; + const dataDir = this.getPlatformDataDir('clickhouse'); logger.info(`Deploying ClickHouse platform service as ${containerName}...`); diff --git a/ts/classes/platform-services/providers/mariadb.ts b/ts/classes/platform-services/providers/mariadb.ts index 5880465..0d592c0 100644 --- a/ts/classes/platform-services/providers/mariadb.ts +++ b/ts/classes/platform-services/providers/mariadb.ts @@ -30,7 +30,7 @@ export class MariaDBProvider extends BasePlatformServiceProvider { return { image: 'mariadb:11', port: 3306, - volumes: ['/var/lib/onebox/mariadb:/var/lib/mysql'], + volumes: [`${this.getPlatformDataDir('mariadb')}:/var/lib/mysql`], environment: { MARIADB_ROOT_PASSWORD: '', // Password will be generated and stored encrypted @@ -52,7 +52,7 @@ export class MariaDBProvider extends BasePlatformServiceProvider { async deployContainer(): Promise { const config = this.getDefaultConfig(); const containerName = this.getContainerName(); - const dataDir = '/var/lib/onebox/mariadb'; + const dataDir = this.getPlatformDataDir('mariadb'); logger.info(`Deploying MariaDB platform service as ${containerName}...`); diff --git a/ts/classes/platform-services/providers/minio.ts b/ts/classes/platform-services/providers/minio.ts index 735cbb7..b2d4c42 100644 --- a/ts/classes/platform-services/providers/minio.ts +++ b/ts/classes/platform-services/providers/minio.ts @@ -30,7 +30,7 @@ export class MinioProvider extends BasePlatformServiceProvider { return { image: 'minio/minio:latest', port: 9000, - volumes: ['/var/lib/onebox/minio:/data'], + volumes: [`${this.getPlatformDataDir('minio')}:/data`], command: 'server /data --console-address :9001', environment: { MINIO_ROOT_USER: 'admin', @@ -57,7 +57,7 @@ export class MinioProvider extends BasePlatformServiceProvider { async deployContainer(): Promise { const config = this.getDefaultConfig(); const containerName = this.getContainerName(); - const dataDir = '/var/lib/onebox/minio'; + const dataDir = this.getPlatformDataDir('minio'); logger.info(`Deploying MinIO platform service as ${containerName}...`); diff --git a/ts/classes/platform-services/providers/mongodb.ts b/ts/classes/platform-services/providers/mongodb.ts index 16d35c6..3ef7b4e 100644 --- a/ts/classes/platform-services/providers/mongodb.ts +++ b/ts/classes/platform-services/providers/mongodb.ts @@ -30,7 +30,7 @@ export class MongoDBProvider extends BasePlatformServiceProvider { return { image: 'mongo:4.4', port: 27017, - volumes: ['/var/lib/onebox/mongodb:/data/db'], + volumes: [`${this.getPlatformDataDir('mongodb')}:/data/db`], environment: { MONGO_INITDB_ROOT_USERNAME: 'admin', // Password will be generated and stored encrypted @@ -52,7 +52,7 @@ export class MongoDBProvider extends BasePlatformServiceProvider { async deployContainer(): Promise { const config = this.getDefaultConfig(); const containerName = this.getContainerName(); - const dataDir = '/var/lib/onebox/mongodb'; + const dataDir = this.getPlatformDataDir('mongodb'); logger.info(`Deploying MongoDB platform service as ${containerName}...`); diff --git a/ts/classes/platform-services/providers/redis.ts b/ts/classes/platform-services/providers/redis.ts index d4ae7c5..ffa1f9d 100644 --- a/ts/classes/platform-services/providers/redis.ts +++ b/ts/classes/platform-services/providers/redis.ts @@ -30,7 +30,7 @@ export class RedisProvider extends BasePlatformServiceProvider { return { image: 'redis:7-alpine', port: 6379, - volumes: ['/var/lib/onebox/redis:/data'], + volumes: [`${this.getPlatformDataDir('redis')}:/data`], environment: {}, }; } @@ -48,7 +48,7 @@ export class RedisProvider extends BasePlatformServiceProvider { async deployContainer(): Promise { const config = this.getDefaultConfig(); const containerName = this.getContainerName(); - const dataDir = '/var/lib/onebox/redis'; + const dataDir = this.getPlatformDataDir('redis'); logger.info(`Deploying Redis platform service as ${containerName}...`);