feat(appstore): add service volumes and published ports

This commit is contained in:
2026-05-24 07:28:18 +00:00
parent e6ebac76b4
commit 5228eeaa23
26 changed files with 1790 additions and 348 deletions
+22
View File
@@ -227,6 +227,7 @@ export class ManagedDcRouterManager {
const image = this.getImage();
const token = await this.getAdminToken();
const dataDir = await this.getAbsoluteDataDir();
await this.writeManagedConfig(dataDir);
await this.oneboxRef.docker.pullImage(image);
@@ -234,6 +235,7 @@ export class ManagedDcRouterManager {
Image: image,
Env: [
`DCROUTER_BASE_DIR=${internalBaseDir}`,
`DCROUTER_CONFIG_PATH=${internalBaseDir}/managed-config.json`,
`DCROUTER_ADMIN_API_TOKEN=${token}`,
'DCROUTER_ADMIN_API_TOKEN_NAME=Onebox Managed Admin Token',
],
@@ -268,6 +270,26 @@ export class ManagedDcRouterManager {
logger.success(`Managed dcrouter container started: ${response.body.Id}`);
}
private async writeManagedConfig(dataDirArg: string): Promise<void> {
const configPath = plugins.path.join(dataDirArg, 'managed-config.json');
try {
const existingConfig = await Deno.readTextFile(configPath);
JSON.parse(existingConfig);
return;
} catch (error) {
if (!(error instanceof Deno.errors.NotFound)) {
throw new Error(`Managed dcrouter config exists but is not valid JSON: ${getErrorMessage(error)}`);
}
}
const config = {
smartProxyConfig: {
routes: [],
},
};
await Deno.writeTextFile(configPath, JSON.stringify(config, null, 2));
}
private async getExistingContainer(): Promise<any | null> {
const filters = encodeURIComponent(JSON.stringify({ name: [containerName] }));
const response = await this.dockerClient!.request('GET', `/containers/json?all=true&filters=${filters}`, {});