−25%

በWindows ዓመታዊ ክፍያ ላይ፣ እስከ ኦክቶበር 31። ዕቅዶችን ይመልከቱ

EQVPS
ጀምር

በ5 ደቂቃ ውስጥ ለsandbox የTypeScript SDK፦ ከnpm i @eqvps/sdk እስከ መጀመሪያው ሩጫ

@eqvps/sdkን ይጫኑ፣ ከNode.js፣ Deno ወይም Bun የFirecracker sandbox ያስነሱ፣ በውስጡ የPython፣ Node እና shell ኮድ ያሂዱ፣ ፋይሎችን ያስተላልፉ እና የረጅም ስራን ውጤት በቀጥታ ይከታተሉ። ከእያንዳንዱ የኮድ መስመር ጋር ስድስት ደረጃ።

ይህ መመሪያ ከJavaScript ወይም TypeScript sandbox ያሄዳል። የተገለለ የFirecracker microVM ያስነሳሉ፣ በሶስት ቋንቋዎች ኮድ ያሂዳሉ፣ ፋይሎችን ያስተላልፋሉ እና የረጅም ስራን ውጤት ይከታተላሉ። እያንዳንዱ ደረጃ አጭር የኮድ ቁራጭ ነው።

Node.js 18+ (ወይም Deno፣ ወይም Bun) እና የEQVPS መለያ ያስፈልግዎታል።

1. ቶከን ያግኙ

SDK በተራ የመለያ ቶከን ያረጋግጣል። ከዳሽቦርድ፣ ከAPI ወይም ከMCP አገልጋይ እንዴት እንደሚያገኙት በመለያዎን ማገናኘት ገጽ ላይ ተገልጿል።

export EQVPS_API_KEY="your-token"

ቀሪ ሒሳብ የሌለው አዲስ መለያ መጀመሪያ sandbox ሲፈጥር $1 የsandbox ክሬዲት ያገኛል። ይህ ለዚህ መመሪያ ብዙ ጊዜ ይበቃል።

2. SDKን ይጫኑ

npm i @eqvps/sdk

ምሳሌዎቹ የES ሞጁሎችን እና የላይኛው ደረጃ awaitን ይጠቀማሉ። እንደ .mjs ፋይሎች ያስቀምጧቸው፣ ወይም እንደ .ts አስቀምጠው በnpx tsx ያሂዷቸው።

3. sandbox ያስነሱ እና ኮድ ያሂዱ

import { Sandbox } from "@eqvps/sdk";

await Sandbox.with({ tariff: "small" }, async (sb) => {
  console.log(sb.id);
  const r = await sb.run("import platform; print(platform.python_version())");
  console.log(r.exit_code, r.stdout);
});

ውጤቱ የsandbox መለያ (sb_ እና ተጨማሪ 24 ቁምፊዎች)፣ ከዚያም 0 3.12.x ነው። callbackኡ ሲያልቅ Sandbox.with sandboxን ይሰርዛል፣ ስህተት ቢጥልም።

ነባሪው ቋንቋ Python ነው። ሌሎቹ ሁለቱ አንድ አማራጭ ብቻ ይርቃሉ፦

await Sandbox.with({}, async (sb) => {
  const js = await sb.run("console.log(process.version)", { language: "node" });
  const sh = await sb.run("uname -r && nproc", { language: "bash" });
  console.log(js.stdout, sh.stdout);
});

የሚወድቅ ስክሪፕት ምንም አይጥልም። r.okን ይፈትሹ፤ exit_code 0 ሲሆን እና ትዕዛዙ የጊዜ ገደቡ ላይ ካልደረሰ true ነው።

4. የshell ትዕዛዞች እና ጥቅሎች

exec የshell ሕብረቁምፊ ወይም የargv ድርድር ይቀበላል። sandbox የኢንተርኔት ግንኙነት ስላለው በnpm እና pip መጫን ይሰራል፦

await Sandbox.with({ tariff: "small" }, async (sb) => {
  await sb.exec("mkdir -p /root/app && cd /root/app && npm init -y && npm i lodash", { timeout: 55 });
  const r = await sb.exec(["node", "-e", "console.log(require('/root/app/node_modules/lodash').VERSION)"]);
  console.log(r.stdout);
});

የተመሳሰለ ጥሪ ቢበዛ 55 ሰከንድ ይቆያል። ከዚህ የሚረዝም ማንኛውም ነገር ወደ ጀርባ ተግባር ይሄዳል (ደረጃ 6)።

5. ፋይሎች

await Sandbox.with({}, async (sb) => {
  await sb.upload("/root/input.json", JSON.stringify({ values: [3, 5, 8] }));
  await sb.run("import json; d = json.load(open('/root/input.json')); open('/root/out.txt', 'w').write(str(sum(d['values'])))");
  console.log(await sb.downloadText("/root/out.txt"));   // 16
});

upload ሕብረቁምፊ ወይም Uint8Array ይቀበላል። download Uint8Array፣ downloadText ደግሞ ሕብረቁምፊ ይመልሳል። አንድ ዝውውር በ5 MB የተገደበ ነው።

6. የቀጥታ ውጤት ያላቸው ረጅም ስራዎች

await Sandbox.with({ tariff: "standard" }, async (sb) => {
  const task = await sb.exec("for i in 1 2 3 4 5; do echo step $i; sleep 20; done", { background: true });
  const res = await task.wait({ onOutput: (out) => process.stdout.write(out) });
  console.log(res.state, res.exit_code);   // done 0
});

ተግባሩ ወዲያውኑ ይመለሳል እና የ55 ሰከንድ ገደብ የለውም። wait በነባሪ በየ2 ሰከንዱ ይፈትሻል (pollIntervalMs ይህን ይቀይራል)። task.kill() ያቆመዋል፤ sb.task(id) ከሌላ ሂደት እንደገና ይገናኛል።

ስህተቶች

import { Sandbox, InsufficientBalanceError, RateLimitError } from "@eqvps/sdk";

try {
  await Sandbox.with({}, async (sb) => console.log((await sb.run("print(1)")).stdout));
} catch (e) {
  if (e instanceof InsufficientBalanceError) console.log("Top up the balance");
  else if (e instanceof RateLimitError) console.log("Busy, retry in", e.retryAfter);
  else throw e;
}

አገልጋዩ Retry-After ሲልክ SDK 429 እና 503ን እስከ ሶስት ጊዜ በራሱ ደግሞ ይሞክራል። በጣም የተለመደው 429 የሚመጣው በአንድ መለያ ላይ ከሁለት በላይ ትዕዛዞችን በአንድ ጊዜ ሲያሄዱ ነው። ሁሉም ክፍሎች በየSDK ማጣቀሻ ውስጥ ናቸው።

የዚህ መመሪያ ወጪ

እያንዳንዱ ምሳሌ ጥቂት ሰከንዶች ቆይቶ በዝቅተኛው 60 ሰከንድ ተከፍሎበታል፦ በsmall $0.00055፣ በstandard $0.0011። የደረጃ 6 ስራ በstandard 100 ሰከንድ ገደማ ሮጦ $0.002 ገደማ ወጣ። ሁሉም በአንድ ላይ ከአንድ ሳንቲም በጣም ያነሰ ነው። ሙሉ የዋጋ ዝርዝሩ በየsandbox ገደቦች እና ክፍያ ውስጥ ነው።

ቀጣይ ደረጃዎች

FAQ

@eqvps/sdk የትኞቹን የማስኬጃ አካባቢዎች ይደግፋል?

Node.js 18 እና አዲስ፣ Deno እና Bun። ጥገኝነት የለውም እና አብሮ የተሰራውን fetch ይጠቀማል፣ ስለዚህ በአሳሽም ይሰራል፣ ግን የመለያዎን ቶከን በፍሮንትኤንድ ኮድ ውስጥ አያስቀምጡ።

መተግበሪያዬ በTypeScript ከሆነ sandbox Python ማሄድ ይችላል?

አዎ። የመተግበሪያዎ ቋንቋ እና በsandbox ውስጥ ያለው የኮድ ቋንቋ አንዳቸው በሌላው ላይ አይመሰረቱም። run የlanguage እሴትን python፣ node ወይም bash አድርጎ ይቀበላል፣ exec ደግሞ ማንኛውንም የshell ትዕዛዝ ያሂዳል።

sandbox መሰረዙን እንዴት ማረጋገጥ እችላለሁ?

Sandbox.with(options, fn)ን ይጠቀሙ፤ fn ሲያልቅ ወይም ስህተት ሲጥል sandboxን ይሰርዛል። በTypeScript 5.2 ወይም አዲስ ደግሞ await using sb = await Sandbox.create() ብለው መጻፍ ይችላሉ።

ኮዱ ሲወድቅ run ምን ይመልሳል?

ዜሮ ያልሆነ exit_code እና በstderr ውስጥ ስህተት ያለው ExecResult። ምንም አይጣልም። ልዩ ሁኔታዎች የሚነሱት እንደ ልክ ያልሆነ ቶከን ወይም ባዶ ቀሪ ሒሳብ ላሉ የAPI ስህተቶች ብቻ ነው።

አስተያየቶች

እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።

አስተያየት ይተዉ

አስተያየቶች ከመታየታቸው በፊት ይጣራሉ።