feat(dcrouter): add configurable baseDir and centralized path resolution; use resolved data paths for storage, cache and DNS

This commit is contained in:
2026-02-16 09:52:38 +00:00
parent 4d77a94bbb
commit 090bd747e1
6 changed files with 55 additions and 38 deletions

View File

@@ -23,9 +23,12 @@ import { MetricsManager } from './monitoring/index.js';
import { RadiusServer, type IRadiusServerConfig } from './radius/index.js';
export interface IDcRouterOptions {
/**
/** Base directory for all dcrouter data. Defaults to ~/.serve.zone/dcrouter */
baseDir?: string;
/**
* Direct SmartProxy configuration - gives full control over HTTP/HTTPS and TCP/SNI traffic
* This is the preferred way to configure HTTP/HTTPS and general TCP/SNI traffic
* This is the preferred way to configure HTTP/HTTPS and general TCP/SNI traffic
*/
smartProxyConfig?: plugins.smartproxy.ISmartProxyOptions;
@@ -170,6 +173,7 @@ export interface PortProxyRuleContext {
export class DcRouter {
public options: IDcRouterOptions;
public resolvedPaths: ReturnType<typeof paths.resolvePaths>;
// Core services
public smartProxy?: plugins.smartproxy.SmartProxy;
@@ -210,10 +214,13 @@ export class DcRouter {
...optionsArg
};
// Resolve all data paths from baseDir
this.resolvedPaths = paths.resolvePaths(this.options.baseDir);
// Default storage to filesystem if not configured
if (!this.options.storage) {
this.options.storage = {
fsPath: plugins.path.join(paths.dcrouterHomeDir, 'storage'),
fsPath: this.resolvedPaths.defaultStoragePath,
};
}
@@ -372,7 +379,7 @@ export class DcRouter {
// Initialize CacheDb singleton
this.cacheDb = CacheDb.getInstance({
storagePath: cacheConfig.storagePath || paths.defaultTsmDbPath,
storagePath: cacheConfig.storagePath || this.resolvedPaths.defaultTsmDbPath,
dbName: cacheConfig.dbName || 'dcrouter',
debug: false,
});
@@ -1306,7 +1313,7 @@ export class DcRouter {
try {
// Ensure paths are imported
const dnsDir = paths.dnsRecordsDir;
const dnsDir = this.resolvedPaths.dnsRecordsDir;
// Check if directory exists
if (!plugins.fs.existsSync(dnsDir)) {
@@ -1370,7 +1377,7 @@ export class DcRouter {
}
// Ensure necessary directories exist
paths.ensureDirectories();
paths.ensureDataDirectories(this.resolvedPaths);
// Generate DKIM keys for each email domain
for (const domainConfig of this.options.emailConfig.domains) {