−25%

kwa Windows ya mwaka, hadi 31 Okt. Tazama mipango

EQVPS
Anza

Sandbox

MicroVM za Linux zilizotengwa kwa ajili ya msimbo unaoendeshwa na skripti na mawakala wako wa AI. Sandbox huwaka ndani ya takriban sekunde moja, huendesha Python, Node.js au bash, na hutozwa kwa sekunde kutoka salio lilelile la seva zako.

Sandbox ni nini

Mashine ndogo ya Linux unayoiunda kupitia API au MCP, kuitumia sekunde chache au siku chache, kisha kuifuta. Intaneti inayotoka inafanya kazi (pip install, npm install, git clone). Hakuna milango ya kuingia wala SSH: amri na faili hupita kupitia API. Ndani: Python 3.12 na pip, Node.js 22 na npm, bash, git na curl.

Hali mbili

Ya muda (chaguo-msingi) — kwa kazi moja. Hufutwa unapoita delete, baada ya muda wa kukaa bila kazi (dakika 5 kwa chaguo-msingi, hadi saa 1) au TTL inapoisha (hadi saa 24). Hutozwa kwa sekunde, angalau sekunde 60.
Ya kudumu — huhifadhi diski na hali yake hadi siku 30. Hutozwa kwa kila saa inayoanza, na mwezi wa kalenda haugharimu zaidi ya saa 730 ukiondoa 25%. Salio likiisha, husitishwa kwenye snapshot (bila malipo) na huendelea baada ya kuongeza salio; snapshot zilizositishwa huhifadhiwa siku 14.

Mipango

MpangovCPURAMDiskiMtandaoKwa saaYa kudumu, juu kwa mwezi
micro0.25512 MB3 GB50 Mbit/s$0.0165$9.03
small0.51 GB5 GB100 Mbit/s$0.033$18.07
standard12 GB10 GB200 Mbit/s$0.066$36.14
plus24 GB15 GB300 Mbit/s$0.132$72.27
pro48 GB20 GB400 Mbit/s$0.264$144.54
max816 GB40 GB500 Mbit/s$0.528$289.08

Unalipia vCPU na RAM za mpango unaochagua: $0.040 kwa vCPU-saa na $0.013 kwa GiB-saa. Bei za sasa bila tokeni: GET /sandboxes/tariffs.

Mipaka ya kujua

Amri moja huendeshwa hadi sekunde 55; kazi ndefu zaidi huendeshwa kama kazi za chinichini na unauliza matokeo. Faili hadi MB 5 kwa ombi, kubwa zaidi (hadi GB 2) kupitia viungo vya kupakua na kupakia vya mara moja. Akaunti moja inaweza kuendesha hadi sandbox 20 na amri 2 kwa wakati mmoja.

Vigezo vya mazingira

Pitisha siri na mipangilio kama env. Ukiviweka wakati wa kuunda, vinatumika kwa kila amri ndani ya sandbox; ukiviweka kwenye exec au run, vinatumika kwa mwito huo pekee na kubadilisha thamani za sandbox. Hadi vigezo 64, KB 32 kwa kila thamani na KB 64 kwa jumla. Thamani huhifadhiwa zikiwa zimesimbwa, API haizirudishi kamwe na haziandikwi kwenye kumbukumbu: majibu huonyesha majina pekee (env_keys).

API=https://api.eqvps.com/api/v1/eqvps
AUTH="Authorization: Bearer $EQVPS_API_KEY"

# env for the whole sandbox (only the names come back, as env_keys)
SB=$(curl -s -X POST $API/sandboxes -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"tariff":"small","env":{"DB_URL":"postgres://user:pass@db/app","MODE":"test"}}' | jq -r .id)

# env for one call, merged over the sandbox env
curl -s -X POST $API/sandboxes/$SB/exec -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"command":"echo $MODE $RUN_ID","env":{"RUN_ID":"42"}}'

Kikomo cha matumizi

Kwa chaguo-msingi sandbox hazina kikomo cha matumizi. Unaweza kuweka kikomo cha siku na cha mwezi kwenye dashibodi au kwa PUT /sandboxes/budget. Kikomo kikifikiwa, sandbox mpya hupata 429 budget_exceeded, za muda zinazoendeshwa hufutwa na za kudumu husitishwa huku diski ikihifadhiwa. Huendelea unapoongeza kikomo au siku au mwezi mpya unapoanza (UTC).

# daily cap $5, monthly cap $50 (null = no cap)
curl -s -X PUT $API/sandboxes/budget -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"daily_usd":5,"monthly_usd":50}'

# spent today / this month and when the caps reset (UTC)
curl -s $API/sandboxes/budget -H "$AUTH"

Kuanza haraka: MCP (Claude Code, Cursor na wateja wengine)

Unganisha seva ya MCP mara moja, kisha mwombe wakala kwa maneno yako mwenyewe. Zana za sandbox: create_sandbox, run_code, exec_command, get_task, kill_task, get_upload_url, get_download_url, list_sandboxes, get_sandbox, kill_sandbox, sandbox_pricing.

claude mcp add --transport http eqvps https://mcp.eqvps.com/mcp \
  --header "Authorization: Bearer $EQVPS_API_KEY"
Unda sandbox ndogo, endesha print(2 + 2) kwa Python, nionyeshe matokeo kisha ufute sandbox.

Kuanza haraka: REST kutoka Python na Node.js

Hakuna vifurushi vya ziada vinavyohitajika. Weka tokeni yako kwenye kigezo cha mazingira EQVPS_API_KEY (jinsi ya kuipata: “Kuunganisha akaunti yako”).

Python
# first_sandbox.py — Python 3.8+, standard library only
import json, os, urllib.request

API = "https://api.eqvps.com/api/v1/eqvps"
KEY = os.environ["EQVPS_API_KEY"]

def call(method, path, body=None):
    req = urllib.request.Request(API + path, method=method,
        data=json.dumps(body).encode() if body is not None else None,
        headers={"Authorization": "Bearer " + KEY,
                 "Content-Type": "application/json", "Accept": "application/json"})
    with urllib.request.urlopen(req, timeout=90) as r:   # HTTPError on 401/402/…
        return json.loads(r.read() or b"{}")

sb = call("POST", "/sandboxes", {"tariff": "small"})
try:
    r = call("POST", f"/sandboxes/{sb['id']}/run",
             {"language": "python", "code": "print(2 + 2)"})
    print(r["exit_code"], r["stdout"])                    # 0 4
finally:
    call("DELETE", f"/sandboxes/{sb['id']}")
Node.js
// first_sandbox.mjs — Node.js 18+ (built-in fetch), run: node first_sandbox.mjs
const API = "https://api.eqvps.com/api/v1/eqvps";
const KEY = process.env.EQVPS_API_KEY;

async function call(method, path, body) {
  const r = await fetch(API + path, {
    method,
    headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json", Accept: "application/json" },
    body: body ? JSON.stringify(body) : undefined,
  });
  const data = await r.json();
  if (!r.ok) throw new Error(`${r.status} ${data.error ?? ""} ${data.message ?? ""}`);
  return data;
}

const sb = await call("POST", "/sandboxes", { tariff: "small" });
try {
  const r = await call("POST", `/sandboxes/${sb.id}/run`, { language: "node", code: "console.log(2 + 2)" });
  console.log(r.exit_code, r.stdout); // 0 4
} finally {
  await call("DELETE", `/sandboxes/${sb.id}`);
}

SDK kwa Python na TypeScript

Unapendelea maktaba? Vifurushi vya Python na TypeScript hufanya maombi yaleyale ya REST, hujaribu tena wenyewe 429 na 503 na daima hufuta sandbox kizuizi kinapoisha. Usakinishaji na mfano:

Python · eqvps
# pip install -U eqvps       https://pypi.org/project/eqvps/  (0.2.0+ for env)
# "eqvps sandbox create" = Sandbox.create() here · create_sandbox in MCP · POST /sandboxes in REST (no CLI)
from eqvps import Sandbox

# EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
with Sandbox.create(tariff="small", env={"DB_URL": "postgres://user:pass@db/app"}) as sb:
    r = sb.run("print(2 + 2)")
    print(r.stdout, r.exit_code)             # "4\n" 0
    sb.upload("/root/data.csv", "a,b\n1,2\n")
    print(sb.exec("wc -l /root/data.csv").stdout)
    print(sb.exec("echo $RUN_ID", env={"RUN_ID": "42"}).stdout)   # env for one call
# the sandbox is deleted when the block exits, also on errors
TypeScript · @eqvps/sdk
// npm i @eqvps/sdk@latest   https://www.npmjs.com/package/@eqvps/sdk  (0.2.0+ for env)
import { Sandbox } from "@eqvps/sdk";

// EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
await Sandbox.with({ tariff: "small", env: { DB_URL: "postgres://user:pass@db/app" } }, async (sb) => {
  const r = await sb.run("print(2 + 2)");
  console.log(r.stdout, r.exit_code);                    // "4\n" 0
  console.log((await sb.exec("echo $RUN_ID", { env: { RUN_ID: "42" } })).stdout); // env for one call
});                                                       // deleted afterwards, also on errors

Kuunganisha akaunti yako: tokeni, usanidi, sandbox ya kwanza, salio →

Maoni

Bado hakuna maoni. Kuwa wa kwanza.

Acha maoni

Maoni yanakaguliwa kabla ya kuonekana.