fix: isolate platform service data dirs

This commit is contained in:
2026-04-29 02:05:53 +00:00
parent c451d71a97
commit 35f83d7c2d
6 changed files with 20 additions and 10 deletions
@@ -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
*/
@@ -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<string> {
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}...`);
@@ -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<string> {
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}...`);
@@ -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<string> {
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}...`);
@@ -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<string> {
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}...`);
@@ -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<string> {
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}...`);