INTEGRITY Dokumentace

Začínáme

1. Nainstalujte preview balíček

V projektu Workers, který již používá Sandbox, nebo v novém projektu založeném na šabloně Sandbox:

npm i @cloudflare/sandbox@next

Vytvořte a nasaďte Worker a image kontejneru sandboxu ze stejné náhledové řady.

2. Exportujte třídu Sandbox

import { Sandbox } from "@cloudflare/sandbox";

export { Sandbox };
import { Sandbox } from "@cloudflare/sandbox";

export { Sandbox };

Udržujte svůj wrangler Durable Object binding a konfigurace kontejneru. Proměnné přenosu specifické pro náhled nejsou vyžadovány.

3. Spusťte proces

exec() spustí program z argv : pole s cestou nebo názvem spustitelného souboru, a poté jeho argumenty. Čeká, dokud sandbox nebude moci proces spustit, poté vrátí handle procesu. Ano, ne počkejte, až proces skončí.

Shromážděte výsledky pomocí metod handle, jako například output(), nebo streamujte pomocí logs().

import { getSandbox, proxyToSandbox } from "@cloudflare/sandbox";

export { Sandbox } from "@cloudflare/sandbox";

export default {
	async fetch(request, env) {
		const proxy = await proxyToSandbox(request, env);
		if (proxy) return proxy;

		const sandbox = getSandbox(env.Sandbox, "preview-demo");
		const process = await sandbox.exec(["python3", "-c", "print(2 + 2)"]);
		const output = await process.output({ encoding: "utf8" });

		return Response.json({
			id: process.id,
			pid: process.pid,
			stdout: output.stdout,
			exitCode: output.exitCode,
		});
	},
};
import { getSandbox, proxyToSandbox } from "@cloudflare/sandbox";

export { Sandbox } from "@cloudflare/sandbox";

type Env = {
	Sandbox: DurableObjectNamespace<import("@cloudflare/sandbox").Sandbox>;
};

export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		const proxy = await proxyToSandbox(request, env);
		if (proxy) return proxy;

		const sandbox = getSandbox(env.Sandbox, "preview-demo");
		const process = await sandbox.exec(["python3", "-c", "print(2 + 2)"]);
		const output = await process.output({ encoding: "utf8" });

		return Response.json({
			id: process.id,
			pid: process.pid,
			stdout: output.stdout,
			exitCode: output.exitCode,
		});
	},
};

Každá položka argv je jeden argument procesu. SDK ne spustí shell a provede ne escapuje argv stejně jako shell. Mezery a speciální znaky uvnitř položky zůstanou součástí daného argumentu.

Syntaxe shellu (&&, roury, přesměrování, globy) vyžaduje explicitní shell se skriptem jako samostatným argumentem:

const process = await sandbox.exec([
	"/bin/bash",
	"-lc",
	"echo hello && uname -a",
]);
const { stdout } = await process.output({ encoding: "utf8" });
const process = await sandbox.exec([
	"/bin/bash",
	"-lc",
	"echo hello && uname -a",
]);
const { stdout } = await process.output({ encoding: "utf8" });

4. Jak se to liší od stabilního balíčku

Next