Mwongozo huu unawasha sandbox kutoka JavaScript au TypeScript. Utawasha microVM ya Firecracker iliyotengwa, utaendesha msimbo kwa lugha tatu, utahamisha faili na utafuatilia matokeo ya kazi ndefu. Kila hatua ni kipande kifupi cha msimbo.
Unahitaji Node.js 18+ (au Deno, au Bun) na akaunti ya EQVPS.
1. Pata tokeni
SDK inajithibitisha kwa tokeni ya kawaida ya akaunti. Ukurasa wa kuunganisha akaunti unaonyesha jinsi ya kuipata kutoka dashibodi, API au seva ya MCP.
export EQVPS_API_KEY="your-token"
Akaunti mpya isiyo na salio inapata $1 ya mkopo wa sandbox mara ya kwanza inapounda sandbox. Hiyo inatosha mwongozo huu mara nyingi.
2. Sakinisha SDK
npm i @eqvps/sdk
Mifano inatumia moduli za ES na await ya ngazi ya juu. Zihifadhi kama faili za .mjs, au kama .ts na uziendeshe kwa npx tsx.
3. Washa sandbox na endesha msimbo
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);
});
Matokeo ni kitambulisho cha sandbox (sb_ na herufi 24 zaidi), kisha 0 3.12.x. Sandbox.with inafuta sandbox callback ikimaliza, hata ikirusha hitilafu.
Lugha ya chaguo-msingi ni Python. Nyingine mbili ziko chaguo moja tu mbali:
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);
});
Skripti inayoshindwa hairushi chochote. Kagua r.ok, ambayo ni true exit_code ikiwa 0 na amri haikufikia muda wake wa mwisho.
4. Amri za shell na vifurushi
exec inapokea maandishi ya shell au safu ya argv. Sandbox ina intaneti, kwa hiyo usakinishaji kwa npm na pip unafanya kazi:
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);
});
Wito wa kisawazishi unaweza kudumu hadi sekunde 55 tu. Chochote kirefu zaidi kinaenda kwenye kazi ya chinichini (hatua ya 6).
5. Faili
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 inapokea maandishi au Uint8Array. download inarudisha Uint8Array, downloadText inarudisha maandishi. Uhamisho mmoja una kikomo cha 5 MB.
6. Kazi ndefu zenye matokeo ya moja kwa moja
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
});
Kazi inarudi mara moja na haina kikomo cha sekunde 55. Kwa chaguo-msingi wait inakagua kila sekunde 2 (pollIntervalMs inabadilisha hilo). task.kill() inaisimamisha; sb.task(id) inaunganisha tena kutoka mchakato mwingine.
Hitilafu
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;
}
SDK yenyewe inajaribu tena 429 na 503, hadi mara tatu, seva ikituma Retry-After. 429 ya kawaida zaidi inatokana na kuendesha amri zaidi ya mbili kwa wakati mmoja kwenye akaunti moja. Kila darasa liko kwenye marejeo ya SDK.
Gharama ya mwongozo huu
Kila mfano uliishi sekunde chache na ulitozwa kima cha chini cha sekunde 60: $0.00055 kwenye small, $0.0011 kwenye standard. Kazi ya hatua ya 6 iliendeshwa takriban sekunde 100 kwenye standard, karibu $0.002. Yote kwa pamoja ni chini sana ya senti moja. Orodha kamili ya bei iko kwenye vikomo na malipo ya sandbox.
Hatua zinazofuata
- Hiyo hiyo kwa Python: SDK ya Python kwa sandbox kwa dakika 5.
- Unganisha modeli na iache iendeshe msimbo wake: kazi yako ya kwanza ya wakala ndani ya sandbox.
- Vifurushi na majaribio ya $1: ukurasa wa sandbox.
Maoni
Bado hakuna maoni. Kuwa wa kwanza.