Перейти к содержимому

Первый шаблон

Шаблон задаёт образ, файлы, пакеты и процессы песочницы. Соберите его один раз, а затем запускайте одинаково подготовленные песочницы по имени или тегу.

В этом примере шаблон копирует HTML-файл, задаёт рабочий каталог и запускает HTTP-сервер. AgentBox дождётся ответа сервера, соберёт версию v1 и запустит из неё песочницу.

mjs
import { Sandbox, Template, waitForURL } from "@abox-dev/sdk";

const templateName = process.env.TEMPLATE_NAME ?? "web-template";

const template = Template({ fileContextPath: "." })
  .fromBaseImage()
  .setWorkdir("/home/user/app")
  .copy("index.html", "/home/user/app/index.html")
  .setStartCmd(
    "python3 -m http.server 8080",
    waitForURL("http://localhost:8080"),
  );

const build = await Template.build(template, templateName, {
  tags: ["v1"],
});

console.log(`Built ${build.name}:v1`);

const sandbox = await Sandbox.create(`${templateName}:v1`);

try {
  const result = await sandbox.commands.run(
    "whoami && pwd && curl --silent http://localhost:8080",
  );
  console.log(result.stdout);
} finally {
  await sandbox.kill();
}

Файл index.html с текстом Hello from an AgentBox template лежит рядом с исходным файлом шаблона.

Что происходит в примере

Template() создаёт определение шаблона. Последовательные методы выбирают базовый образ, добавляют содержимое и задают процесс, который должен работать в готовой песочнице.

Template.build отправляет определение на сборку. Имя объединяет все сборки шаблона, а тег указывает на конкретную версию.

Sandbox.create принимает имя с тегом. Рабочий каталог, файл и HTTP-процесс уже входят в запущенную песочницу.

Для сборки нужен API-ключ. Полный список методов доступен в справочнике SDK.