← Sandbox SDK / sandbox
Začínáme
Vytvořte svou první aplikaci se Sandbox SDK - zabezpečeným prostředím pro spouštění kódu. V tomto průvodci vytvoříte Worker, který dokáže spouštět kód Python a pracovat se soubory v izolovaných kontejnerech.
Předpoklady
- Zaregistrujte si účet Cloudflare ↗.
- Nainstalujte
Node.js↗.
Správce verzí Node.js
Použijte správce verzí Node, jako je Volta ↗ nebo nvm ↗ abyste se vyhnuli problémům s oprávněními a mohli měnit verze Node.js. Wrangler, o kterém se dozvíte dále v této příručce, vyžaduje verzi Node 16.17.0 nebo novější.
Ujistěte se, že Docker běží lokálně
Sandbox SDK používá Docker ↗ pro sestavování image kontejnerů společně s vaším Workerem.
Docker musí lokálně běžet, když spouštíte wrangler deploy. Pro většinu lidí je nejlepším způsobem instalace Dockeru postupovat podle dokumentace k instalaci Docker Desktop ↗. Další nástroje, například Colima ↗ může také fungovat.
Že Docker běží správně, můžete ověřit spuštěním docker info příkaz v terminálu. Pokud Docker běží, příkaz proběhne úspěšně. Pokud Docker neběží,
příkaz docker info se zasekne, nebo vrátí chybu obsahující zprávu „Cannot connect to the Docker daemon“.
1. Vytvořte nový projekt
Vytvořte nový projekt Sandbox SDK:
npm create cloudflare@latest -- my-sandbox --template=cloudflare/sandbox-sdk/examples/minimalTím se vytvoří my-sandbox adresář se vším, co potřebujete:
src/index.ts- Worker s integrací sandboxuwrangler.jsonc- Konfigurace pro Workers a ContainersDockerfile- Definice prostředí kontejneru
cd my-sandbox2. Prozkoumejte šablonu
Šablona poskytuje minimální Worker, který demonstruje základní možnosti sandboxu:
import { getSandbox, proxyToSandbox, type Sandbox } from "@cloudflare/sandbox";
export { Sandbox } from "@cloudflare/sandbox";
type Env = {
Sandbox: DurableObjectNamespace<Sandbox>;
};
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
// Get or create a sandbox instance. For user-facing apps,
// derive this ID from the authenticated user.
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
// Execute Python code
if (url.pathname === "/run") {
const result = await sandbox.exec('python3 -c "print(2 + 2)"');
return Response.json({
output: result.stdout,
error: result.stderr,
exitCode: result.exitCode,
success: result.success,
});
}
// Work with files
if (url.pathname === "/file") {
await sandbox.writeFile("/workspace/hello.txt", "Hello, Sandbox!");
const file = await sandbox.readFile("/workspace/hello.txt");
return Response.json({
content: file.content,
});
}
return new Response("Try /run or /file");
},
};Klíčové koncepty:
getSandbox()- Získá nebo vytvoří instanci sandboxu podle ID. Pro opětovné připojení ke stejnému sandboxu použijte stabilní ID. V aplikacích určených pro uživatele svazujte ID vždy s jedním konkrétním uživatelem.sandbox.exec()- Spouštějte shellové příkazy v sandboxu a zachycujte stdout, stderr a návratové kódy.sandbox.writeFile()/readFile()- Zapisujte a čtěte soubory v souborovém systému sandboxu.
3. Otestujte lokálně
Spusťte vývojový server:
npm run dev
# If you expect to have multiple sandbox instances, you can increase `max_instances`.Otestujte koncové body:
# Execute Python code
curl http://localhost:8787/run
# File operations
curl http://localhost:8787/fileMěli byste vidět odpovědi JSON s výstupem příkazu a obsahem souborů.
4. Nasaďte do produkce
Nasaďte svůj Worker a kontejner:
npx wrangler deployTím dojde k následujícímu:
- Vytvořte obraz kontejneru pomocí Dockeru
- Nahrajte ho do Cloudflare Container Registry
- Nasaďte svůj Worker globálně
Zkontrolujte stav nasazení:
npx wrangler containers list5. Otestujte nasazení
Otevřete URL adresu svého Workeru (zobrazenou ve výstupu nasazení):
# Replace with your actual URL
curl https://my-sandbox.YOUR_SUBDOMAIN.workers.dev/runVáš sandbox je nyní nasazený a umí spouštět kód v izolovaných kontejnerech.
Vysvětlení konfigurace
Váš wrangler.jsonc propojuje tři části dohromady:
{
"containers": [
{
"class_name": "Sandbox",
"image": "./Dockerfile",
"instance_type": "lite",
"max_instances": 1,
},
],
"durable_objects": {
"bindings": [
{
"class_name": "Sandbox",
"name": "Sandbox",
},
],
},
"migrations": [
{
"new_sqlite_classes": ["Sandbox"],
"tag": "v1",
},
],
}[[containers]]
class_name = "Sandbox"
image = "./Dockerfile"
instance_type = "lite"
max_instances = 1
[[durable_objects.bindings]]
class_name = "Sandbox"
name = "Sandbox"
[[migrations]]
new_sqlite_classes = [ "Sandbox" ]
tag = "v1"- kontejnery - Definuje obraz kontejneru, typ instance a limity zdrojů pro prostředí sandboxu. Pokud očekáváte více instancí sandboxu, můžete zvýšit
max_instances. - durable_objects - Nemusíte znát Durable Objects k použití Sandbox SDK, ale pokud chcete, můžete zjistěte více o Cloudflare Containers a Durable Objects. Tato konfigurace vytvoří binding díky kterému
SandboxDurable Object dostupný ve vašem kódu Workeru. - migrace - Registruje
Sandboxtřída, kterou implementuje Sandbox SDK, s Backend úložiště SQLite (vyžadováno jednorázově)
Podrobné možnosti konfigurace včetně proměnných prostředí, secrets a vlastních images najdete v Referenční dokumentace ke konfiguraci Wrangler.
Další kroky
Nyní, když máte funkční sandbox, prozkoumejte další možnosti:
- Code interpreter s Workers AI - Vytvořte systém pro spouštění kódu poháněný AI
- Spouštění příkazů - Spouštění shellových příkazů se streamováním výstupu
- Správa souborů - Práce se soubory a adresáři
- Nasazení aplikace Sandbox - Nasazujte a udržujte soulad mezi balíčkem a obrazem
- Zpřístupnění služeb - Získejte veřejné URL adresy pro služby běžící ve vašem sandboxu
- Quick Tunnels - Bez nutnosti konfigurace
*.trycloudflare.comURL pro vývoj a.workers.devnasazení - Nakonfigurujte URL adresy náhledu na vlastní doméně - Wildcard DNS a TLS pro
exposePort() - Referenční dokumentace API - Kompletní dokumentace API