← Sandbox SDK / sandbox
Начало работы
Создание первого приложения с помощью Sandbox SDK, безопасной среды для выполнения кода. В этом руководстве вы создадите Worker, который может выполнять код Python и работать с файлами в изолированных контейнерах.
Предварительные требования
- Зарегистрируйтесь для получения Аккаунт Cloudflare ↗.
- Установка
Node.js↗.
менеджер версий Node.js
Используйте менеджер версий Node, например Volta ↗ или nvm ↗ чтобы избежать проблем с правами доступа и переключать версии Node.js. Wrangler, о котором пойдёт речь далее в этом руководстве, требует версию Node 16.17.0 или более поздней версии.
Убедитесь, что Docker запущен локально
Sandbox SDK использует Docker ↗ чтобы собирать образы контейнеров вместе с вашим Worker.
Docker должен быть запущен локально при выполнении wrangler deploy. Большинству пользователей проще всего установить Docker, следуя документация по установке Docker Desktop ↗. Другие инструменты, такие как Colima ↗ тоже может подойти.
Проверить, что Docker работает корректно, можно с помощью команды docker info команду в терминале. Если Docker запущен, команда выполнится успешно. Если Docker не запущен,
команда docker info зависнет или вернёт ошибку с сообщением "Cannot connect to the Docker daemon".
1. Создать новый проект
Создайте новый проект Sandbox SDK:
npm create cloudflare@latest -- my-sandbox --template=cloudflare/sandbox-sdk/examples/minimalЭто создаёт my-sandbox каталог со всем необходимым:
src/index.ts- Worker с интеграцией песочницыwrangler.jsonc- Конфигурация для Workers и ContainersDockerfile- Определение среды контейнера
cd my-sandbox2. Изучите шаблон
Шаблон предоставляет минимальный Worker, демонстрирующий основные возможности песочницы:
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");
},
};Основные понятия:
getSandbox()- Получает существующий или создаёт новый экземпляр песочницы по идентификатору. Используйте постоянный идентификатор, чтобы повторно подключаться к той же песочнице. В приложениях с пользовательским интерфейсом привязывайте идентификаторы к конкретному пользователю.sandbox.exec()- Выполняйте команды shell в песочнице и получайте stdout, stderr и коды завершения.sandbox.writeFile()/readFile()- Запись и чтение файлов в файловой системе песочницы.
3. Протестируйте локально
Запустите сервер разработки:
npm run dev
# If you expect to have multiple sandbox instances, you can increase `max_instances`.Проверьте конечные точки:
# Execute Python code
curl http://localhost:8787/run
# File operations
curl http://localhost:8787/fileВы должны увидеть JSON-ответы с результатом выполнения команды и содержимым файлов.
4. Разверните в продакшене
Разверните Worker и контейнер:
npx wrangler deployЭто сделает следующее:
- Создание образа контейнера с помощью Docker
- Отправьте его в Container Registry Cloudflare
- Разверните Worker по всему миру
Проверка статуса развертывания:
npx wrangler containers list5. Проверка развёртывания
Откройте URL вашего Worker (указан в выводе развёртывания):
# Replace with your actual URL
curl https://my-sandbox.YOUR_SUBDOMAIN.workers.dev/runТеперь ваш sandbox развёрнут и может выполнять код в изолированных контейнерах.
Общие сведения о конфигурации
Ваш wrangler.jsonc объединяет три компонента:
{
"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"- контейнеры - Определяет образ контейнера, тип инстанса и ограничения ресурсов для среды сандбокса. Если вы ожидаете несколько экземпляров сандбокса, можно увеличить
max_instances. - durable_objects - Вам не обязательно разбираться в Durable Objects для использования Sandbox SDK, но при желании вы можете подробнее о Cloudflare Containers и Durable Objects. Эта конфигурация создаёт привязка который делает
SandboxDurable Object, доступный в коде вашего Worker. - миграции - Регистрирует
Sandboxкласс, реализованный Sandbox SDK, с Хранилище на основе SQLite (требуется один раз)
Подробные параметры конфигурации, включая переменные окружения, секреты и пользовательские образы, см. в Справочник по конфигурации Wrangler.
Следующие шаги
Теперь, когда песочница работает, изучите её дополнительные возможности:
- Code interpreter с Workers AI - Создайте систему выполнения кода на основе ИИ
- Выполнять команды - Запуск shell-команд с потоковой передачей вывода
- Управление файлами - Работа с файлами и каталогами
- Разверните приложение Sandbox - Разворачивайте и поддерживайте согласованность пакета и образа
- Публикация сервисов - Получайте публичные URL для сервисов, работающих в вашей песочнице
- Quick tunnels - Не требует настройки
*.trycloudflare.comURL для разработки и.workers.devразвёртывания - Настройте preview URL на собственном домене - Подстановочный DNS и TLS для
exposePort() - Справочник по API - Полная документация по API