−25%

yıllık Windows ödemesinde, 31 Ekim'e kadar. Paketlere git

EQVPS
Hemen başla

Sandbox'lar

Betiklerinizin ve yapay zekâ ajanlarınızın çalıştırdığı kod için izole Linux mikro sanal makineleri. Bir sandbox yaklaşık bir saniyede açılır, Python, Node.js veya bash çalıştırır ve sunucularınızla aynı bakiyeden saniye bazında ücretlendirilir.

Sandbox nedir

API veya MCP üzerinden oluşturduğunuz, birkaç saniye ya da birkaç gün kullanıp sildiğiniz küçük bir Linux makinesi. Giden internet çalışır (pip install, npm install, git clone). Gelen port ve SSH yoktur: komutlar ve dosyalar API üzerinden gider. İçinde: pip ile Python 3.12, npm ile Node.js 22, bash, git ve curl.

İki mod

Geçici (varsayılan) — tek bir iş için. delete çağırdığınızda, boşta kalma süresinden sonra (varsayılan 5 dakika, en fazla 1 saat) ya da TTL dolduğunda (en fazla 24 saat) silinir. Saniye bazında ücretlendirilir, en az 60 saniye.
Kalıcı — diskini ve durumunu 30 güne kadar korur. Başlayan her saat için ücretlendirilir ve bir takvim ayı asla 730 saatin %25 eksiğinden fazla tutmaz. Bakiye biterse anlık görüntüyle duraklatılır (ücret alınmaz) ve yükleme sonrası devam eder; duraklatılmış görüntüler 14 gün saklanır.

Tarifeler

TarifevCPURAMDiskAğSaatlikKalıcı, aylık en fazla
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

Seçtiğiniz tarifenin vCPU ve RAM'i için ödersiniz: vCPU-saat başına $0.040 ve GiB-saat başına $0.013. Güncel fiyatlar, token gerekmeden: GET /sandboxes/tariffs.

Bilinmesi gereken sınırlar

Bir komut en fazla 55 saniye çalışır; daha uzun işler arka plan görevi olarak çalışır ve sonucunu sorgularsınız. Dosyalar istek başına 5 MB'a kadar, daha büyükleri (2 GB'a kadar) tek kullanımlık indirme ve yükleme bağlantılarıyla. Bir hesap aynı anda 20 sandbox ve 2 komut çalıştırabilir.

Ortam değişkenleri

Gizli bilgileri ve ayarları env olarak iletin. Oluşturma sırasında verilirse sandbox'taki her komut için geçerlidir; exec veya run içinde verilirse yalnızca o çağrı için geçerlidir ve sandbox değerlerinin üzerine yazar. En fazla 64 değişken, değer başına 32 KB ve toplam 64 KB. Değerler şifreli saklanır, API tarafından asla döndürülmez ve günlüklere yazılmaz: yanıtlar yalnızca adları gösterir (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"}}'

Harcama sınırı

Varsayılan olarak sandbox'ların harcama sınırı yoktur. Panelden veya PUT /sandboxes/budget ile günlük ve aylık bir tavan belirleyebilirsiniz. Tavana ulaşıldığında yeni sandbox'lar 429 budget_exceeded alır, çalışan geçici olanlar silinir ve kalıcı olanlar diskleri korunarak duraklatılır. Tavanı yükselttiğinizde veya yeni bir gün ya da ay başladığında (UTC) devam ederler.

# 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"

Hızlı başlangıç: MCP (Claude Code, Cursor ve diğer istemciler)

MCP sunucusunu bir kez bağlayın, sonra ajana ne istediğinizi kendi cümlelerinizle söyleyin. Sandbox araçları: 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"
Küçük bir sandbox oluştur, Python'da print(2 + 2) çalıştır, çıktıyı göster ve sandbox'ı sil.

Hızlı başlangıç: Python ve Node.js'ten REST

Ek paket gerekmez. Token'ınızı EQVPS_API_KEY ortam değişkenine koyun (nasıl alınacağı: “Hesabınızı bağlama”).

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}`);
}

Python ve TypeScript için SDK

Kütüphane mi tercih edersiniz? Python ve TypeScript paketleri aynı REST çağrılarını yapar, 429 ve 503'te kendileri yeniden dener ve blok bitince sandbox'ı her zaman siler. Kurulum ve örnek:

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

Hesabınızı bağlama: token, yapılandırma, ilk sandbox, bakiye →

Yorumlar

Henüz yorum yok. İlk olun.

Bir yorum bırakın

Yorumlar görünmeden önce denetlenir.