−25%

στα Windows με ετήσια χρέωση, έως 31/10. Δείτε τα πακέτα

EQVPS
Ξεκινήστε

Sandboxes

Απομονωμένες Linux microVM για κώδικα που τρέχουν τα scripts και οι AI agents σας. Ένα sandbox ξεκινά σε περίπου ένα δευτερόλεπτο, τρέχει Python, Node.js ή bash και χρεώνεται ανά δευτερόλεπτο από το ίδιο υπόλοιπο με τους servers σας.

Τι είναι ένα sandbox

Ένα μικρό μηχάνημα Linux που δημιουργείτε μέσω API ή MCP, χρησιμοποιείτε για λίγα δευτερόλεπτα ή λίγες μέρες και διαγράφετε. Το εξερχόμενο internet λειτουργεί (pip install, npm install, git clone). Δεν υπάρχουν εισερχόμενες θύρες ούτε SSH: εντολές και αρχεία περνούν από το API. Μέσα: Python 3.12 με pip, Node.js 22 με npm, bash, git και curl.

Δύο λειτουργίες

Προσωρινό (προεπιλογή) — για μία εργασία. Διαγράφεται όταν καλέσετε delete, μετά το όριο αδράνειας (5 λεπτά από προεπιλογή, έως 1 ώρα) ή όταν λήξει το TTL (έως 24 ώρες). Χρέωση ανά δευτερόλεπτο, ελάχιστο 60 δευτερόλεπτα.
Μόνιμο — κρατά δίσκο και κατάσταση έως 30 ημέρες. Χρεώνεται κάθε ώρα που ξεκινά, και ένας ημερολογιακός μήνας δεν κοστίζει ποτέ περισσότερο από 730 ώρες μείον 25%. Αν τελειώσει το υπόλοιπο, μπαίνει σε παύση με στιγμιότυπο (χωρίς χρέωση) και συνεχίζει μετά την πίστωση· τα στιγμιότυπα σε παύση φυλάσσονται 14 ημέρες.

Πακέτα

ΠακέτοvCPURAMΔίσκοςΔίκτυοΑνά ώραΜόνιμο, μέγ. ανά μήνα
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

Πληρώνετε για τα vCPU και τη RAM του πακέτου που επιλέγετε: $0.040 ανά vCPU-ώρα και $0.013 ανά GiB-ώρα. Τρέχουσες τιμές χωρίς token: GET /sandboxes/tariffs.

Όρια που αξίζει να ξέρετε

Μία εντολή τρέχει έως 55 δευτερόλεπτα· μεγαλύτερες εργασίες τρέχουν στο παρασκήνιο και ελέγχετε το αποτέλεσμα. Αρχεία έως 5 MB ανά αίτημα, μεγαλύτερα (έως 2 GB) μέσω συνδέσμων λήψης και αποστολής μίας χρήσης. Ένας λογαριασμός μπορεί να τρέχει έως 20 sandboxes και 2 εντολές ταυτόχρονα.

Μεταβλητές περιβάλλοντος

Περάστε μυστικά και ρυθμίσεις ως env. Όταν ορίζονται στη δημιουργία, ισχύουν για κάθε εντολή στο sandbox· όταν ορίζονται σε exec ή run, ισχύουν μόνο για αυτή την κλήση και αντικαθιστούν τις τιμές του sandbox. Έως 64 μεταβλητές, 32 KB ανά τιμή και 64 KB συνολικά. Οι τιμές αποθηκεύονται κρυπτογραφημένες, δεν επιστρέφονται ποτέ από το API και δεν γράφονται σε αρχεία καταγραφής: οι απαντήσεις δείχνουν μόνο τα ονόματα (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"}}'

Όριο δαπανών

Από προεπιλογή τα sandbox δεν έχουν όριο δαπανών. Μπορείτε να ορίσετε ημερήσιο και μηνιαίο ανώτατο όριο στον πίνακα ελέγχου ή με PUT /sandboxes/budget. Όταν συμπληρωθεί, τα νέα sandbox λαμβάνουν 429 budget_exceeded, τα ενεργά προσωρινά διαγράφονται και τα μόνιμα τίθενται σε παύση με τον δίσκο τους διατηρημένο. Συνεχίζουν όταν αυξήσετε το όριο ή ξεκινήσει νέα ημέρα ή νέος μήνας (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"

Γρήγορη εκκίνηση: MCP (Claude Code, Cursor και άλλοι clients)

Συνδέστε τον MCP server μία φορά και μετά απλώς ζητήστε από τον agent αυτό που θέλετε με δικά σας λόγια. Εργαλεία 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"
Δημιούργησε ένα μικρό sandbox, τρέξε print(2 + 2) σε Python, δείξε μου την έξοδο και διάγραψε το sandbox.

Γρήγορη εκκίνηση: REST από Python και Node.js

Δεν χρειάζονται επιπλέον πακέτα. Βάλτε το token σας στη μεταβλητή περιβάλλοντος EQVPS_API_KEY (πώς παίρνετε ένα: «Σύνδεση του λογαριασμού σας»).

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 για Python και TypeScript

Προτιμάτε βιβλιοθήκη; Τα πακέτα για Python και TypeScript κάνουν τις ίδιες κλήσεις REST, ξαναδοκιμάζουν μόνα τους σε 429 και 503 και διαγράφουν πάντα το sandbox στο τέλος του μπλοκ. Εγκατάσταση και παράδειγμα:

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

Σύνδεση του λογαριασμού σας: token, ρύθμιση, πρώτο sandbox, υπόλοιπο →

Σχόλια

Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.

Αφήστε ένα σχόλιο

Τα σχόλια ελέγχονται πριν εμφανιστούν.