feat(dcrouter): add managed local dcrouter mode with status controls and gateway integration
This commit is contained in:
+29
-3
@@ -25,6 +25,7 @@ import { ProxyLogReceiver } from './proxy-log-receiver.ts';
|
||||
import { BackupManager } from './backup-manager.ts';
|
||||
import { BackupScheduler } from './backup-scheduler.ts';
|
||||
import { ExternalGatewayManager } from './external-gateway.ts';
|
||||
import { ManagedDcRouterManager } from './managed-dcrouter.ts';
|
||||
import { OpsServer } from '../opsserver/index.ts';
|
||||
|
||||
export class Onebox {
|
||||
@@ -45,6 +46,7 @@ export class Onebox {
|
||||
public proxyLogReceiver: ProxyLogReceiver;
|
||||
public backupManager: BackupManager;
|
||||
public backupScheduler: BackupScheduler;
|
||||
public managedDcRouter: ManagedDcRouterManager;
|
||||
public externalGateway: ExternalGatewayManager;
|
||||
public opsServer: OpsServer;
|
||||
|
||||
@@ -88,7 +90,8 @@ export class Onebox {
|
||||
// Initialize Backup scheduler
|
||||
this.backupScheduler = new BackupScheduler(this);
|
||||
|
||||
// Initialize optional dcrouter edge gateway integration
|
||||
// Initialize optional dcrouter gateway integration
|
||||
this.managedDcRouter = new ManagedDcRouterManager(this);
|
||||
this.externalGateway = new ExternalGatewayManager(this);
|
||||
|
||||
// Initialize OpsServer (TypedRequest-based server)
|
||||
@@ -111,6 +114,20 @@ export class Onebox {
|
||||
// Initialize Docker
|
||||
await this.docker.init();
|
||||
|
||||
try {
|
||||
await this.managedDcRouter.prepareGatewaySettings();
|
||||
} catch (error) {
|
||||
logger.warn(`Managed dcrouter settings preparation failed: ${getErrorMessage(error)}`);
|
||||
}
|
||||
|
||||
if (this.managedDcRouter.getMode() !== 'managed') {
|
||||
try {
|
||||
await this.managedDcRouter.stop();
|
||||
} catch (error) {
|
||||
logger.warn(`Failed to stop inactive managed dcrouter: ${getErrorMessage(error)}`);
|
||||
}
|
||||
}
|
||||
|
||||
// Start proxy log receiver before reverse proxy startup.
|
||||
try {
|
||||
await this.proxyLogReceiver.start();
|
||||
@@ -128,8 +145,9 @@ export class Onebox {
|
||||
// Start HTTP reverse proxy (non-critical - don't fail init if ports are busy)
|
||||
// Use 8080/8443 in dev mode to avoid permission issues
|
||||
const isDev = Deno.env.get('ONEBOX_DEV') === 'true' || Deno.args.includes('--ephemeral');
|
||||
const httpPort = isDev ? 8080 : 80;
|
||||
const httpsPort = isDev ? 8443 : 443;
|
||||
const isManagedDcRouter = this.managedDcRouter.getMode() === 'managed';
|
||||
const httpPort = isDev || isManagedDcRouter ? 8080 : 80;
|
||||
const httpsPort = isDev || isManagedDcRouter ? 8443 : 443;
|
||||
|
||||
try {
|
||||
await this.reverseProxy.startHttp(httpPort);
|
||||
@@ -165,6 +183,14 @@ export class Onebox {
|
||||
logger.warn('Cloudflare domain sync initialization failed - domain sync will be limited');
|
||||
}
|
||||
|
||||
// Initialize managed local dcrouter before syncing delegated routes.
|
||||
try {
|
||||
await this.managedDcRouter.init();
|
||||
} catch (error) {
|
||||
logger.warn('Managed dcrouter initialization failed - local gateway sync will be disabled');
|
||||
logger.warn(`Error: ${getErrorMessage(error)}`);
|
||||
}
|
||||
|
||||
// Initialize external dcrouter gateway (non-critical)
|
||||
try {
|
||||
await this.externalGateway.init();
|
||||
|
||||
Reference in New Issue
Block a user