INTEGRITY Dokumentace

Proměnné prostředí

Každý exec() a createTerminal() spustí nezávislý proces. Shell export v jednom procesu se nepoužije při dalším spuštění. Prostředí procesu nastavte pomocí image kontejneru, setEnvVars, a pro jednotlivé spuštění env.

Používejte proměnné prostředí pro netajný konfigurace (cesty, feature flagy, NODE_ENV, a podobné). Do sandboxu nevkládejte ostré API klíče ani jiné dlouhodobě platné přihlašovací údaje. Pro volání externích služeb vyžadujících přihlašovací údaje použijte handlery pro odchozí provoz aby secrets zůstaly ve Workeru.

Jak proces získává své prostředí

Když se proces spustí, runtime sestaví jeho prostředí z:

  1. kontejner prostředí (image ENV a výchozí hodnoty).
  2. Názvy z setEnvVars, když použijete exec() (popsáno v následující části).
  3. env možnost při tomto spuštění, pokud nějaký předáte.

Pozdější spuštění si neuchovávají překryvné vrstvy z předchozích spuštění. Příkaz, který spustí export FOO=bar uvnitř jednoho procesu nezmění další exec().

Worker bindingy ve vašem fetch handleru nejsou proměnné prostředí procesu. Pouze hodnoty, které předáte přes setEnvVars nebo spusťte env se objeví uvnitř procesu (a to by neměly být dlouhodobě platné tajné klíče).

setEnvVars()

setEnvVars(envVars: Record<string, string | undefined>): Promise<void>
Hodnota Účinek
string Tuto proměnnou prostředí nastavte pro pozdější exec() spouští
undefined Odebrání dříve uložené proměnné

Na každém exec(), SDK při spuštění sloučí uložené názvy do prostředí daného procesu.

Uložené názvy žijí v paměti Durable Object sandboxu. Nezapisují se do souborového systému kontejneru a nejsou součástí zálohy. Po odstranění nebo nahrazení Durable Object zavolejte setEnvVars znovu, pokud tyto názvy stále potřebujete, nebo předejte env při každém exec().

const sandbox = getSandbox(env.Sandbox, "user-123");

await sandbox.setEnvVars({
	NODE_ENV: "production",
	APP_HOME: "/workspace/app",
	LOG_LEVEL: "info",
});

const migrate = await sandbox.exec(["python", "migrate.py"], {
	cwd: "/workspace/app",
});
await migrate.output({ encoding: "utf8" });

const seed = await sandbox.exec(["python", "seed.py"], {
	cwd: "/workspace/app",
});
await seed.output({ encoding: "utf8" });

await sandbox.setEnvVars({
	LOG_LEVEL: "debug",
	TEMP_FLAG: undefined,
});
const sandbox = getSandbox(env.Sandbox, "user-123");

await sandbox.setEnvVars({
	NODE_ENV: "production",
	APP_HOME: "/workspace/app",
	LOG_LEVEL: "info",
});

const migrate = await sandbox.exec(["python", "migrate.py"], {
	cwd: "/workspace/app",
});
await migrate.output({ encoding: "utf8" });

const seed = await sandbox.exec(["python", "seed.py"], {
	cwd: "/workspace/app",
});
await seed.output({ encoding: "utf8" });

await sandbox.setEnvVars({
	LOG_LEVEL: "debug",
	TEMP_FLAG: undefined,
});

env na exec()

const process = await sandbox.exec(["node", "app.js"], {
	cwd: "/workspace/app",
	env: {
		NODE_ENV: "production",
		PORT: "3000",
	},
});
const process = await sandbox.exec(["node", "app.js"], {
	cwd: "/workspace/app",
	env: {
		NODE_ENV: "production",
		PORT: "3000",
	},
});
Chování Detail
Rozsah Pouze toto spuštění
Pořadí sloučení Prostředí kontejneru, poté setEnvVars, pak tento env
Vedlejší účinky Neaktualizuje setEnvVars úložiště

Vynechte env když stačí názvy platné pro celý sandbox (a prostředí kontejneru).

env na createTerminal()

const terminal = await sandbox.createTerminal({
	command: ["bash"],
	cwd: "/workspace",
	env: {
		TERM: "xterm-256color",
		APP_HOME: "/workspace/app",
	},
});
const terminal = await sandbox.createTerminal({
	command: ["bash"],
	cwd: "/workspace",
	env: {
		TERM: "xterm-256color",
		APP_HOME: "/workspace/app",
	},
});

Spuštění terminálu env překryje prostředí kontejneru pouze pro tento terminál. Názvy, které terminál potřebuje, předejte přes createTerminal.

V interaktivním shellu export platí po celou dobu životnosti daného terminálu. Nevztahuje se na pozdější exec() volání. Podrobnosti najdete v Terminály.

Externí API a přihlašovací údaje

Kód uvnitř sandboxu by neměl obsahovat aktivní přístupové údaje poskytovatele. Tajné klíče uchovávejte ve Workeru a odchozí HTTP(S) provoz zachytávejte pomocí outboundByHost (a související zásady, jako například enableInternet / allowedHosts). Sandbox může odesílat běžné požadavky, případně zástupné hodnoty vyžadované klientskými knihovnami, zatímco Worker připojí skutečné přihlašovací údaje ještě předtím, než požadavek opustí váš účet.

Viz Zpracování odchozího provozu, včetně bezpečného vkládání přihlašovacích údajů. Pro bindingy Workers (KV, R2 a podobné) dostupné ze sandboxu přes hostname si přečtěte Připojte se k Workers bindings.