SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-13

Cara Self-Host sandboxd AI App Builder di VPS

Ketahui cara memasang sandboxd pada VPS anda sendiri. Panduan ini merangkumi konfigurasi Docker, kunci model, URL pratonton HTTPS, serta pengurusan ruang cakera dan RAM.

Apakah sandboxd, dan apa yang anda peroleh dengan menjalankannya sendiri

Untuk menjalankan sandboxd sendiri, anda memerlukan satu pelayan Linux dengan Docker dan nama domain. Anda menghantar prompt, ejen pengekodan akan membina aplikasi sebenar di dalam bekas terpencil, dan aplikasi tersebut akan muncul pada URL pratontonnya sendiri. Pembina prompt-ke-aplikasi merupakan kategori perkhidmatan hos yang paling popular pada tahun 2026, dan sandboxd adalah perisian yang berjalan pada VPS anda, di bawah lesen MIT, dengan kod yang dijana disimpan pada cakera anda sendiri.

Reka bentuknya sengaja dibuat kecil. Control plane Go menggerakkan Docker, Traefik v3 menghalakan setiap hostname pratonton, SQLite menyimpan status, dan setiap aplikasi berjalan di dalam satu bekas. Tiada Kubernetes dan tiada pelayan pangkalan data berasingan, itulah sebabnya kotak 2 vCPU mampu menjalankannya.

Empat objek membentuk keseluruhan model ini. App ialah projek yang tahan lama, menyimpan namanya, metadata git dan rahsianya. Sandbox ialah bekas Docker tempat aplikasi itu berjalan, dan satu aplikasi merujuk kepada satu sandbox pada satu-satu masa. Workspace ialah fail aplikasi, yang berada pada hos dan kekal walaupun bekas dihentikan. Task ialah satu prompt yang diberikan kepada ejen di dalam sandbox. Menghentikan sandbox akan membebaskan memori dan mengekalkan fail. Memusnahkannya akan membuang bekas tersebut, dan aplikasi boleh memulakan bekas yang baharu.

Bagaimanakah sandboxd berbeza daripada Dify dan OpenHands?

Ketiga-tiga alat ini sering dikelirukan kerana semuanya menjalankan LLM (large language model) pada pelayan anda, namun hasil keluarannya adalah berbeza. Dify membina aplikasi LLM: antara muka sembang, talian paip perolehan (retrieval pipelines), dan aliran kerja yang memanggil model setiap kali seseorang menggunakannya. Model tersebut merupakan sebahagian daripada produk akhir. OpenHands berfungsi pada repositori yang sedia ada: anda menghalakannya kepada kod anda dan ia akan membaca fail, menjalankan arahan serta mencadangkan perubahan. sandboxd bermula daripada kosong. Ia membina rangka projek daripada pratetap, menyiapkannya dalam kontena baharu, dan memberikan anda URL untuk melihat hasilnya. Hasilnya ialah aplikasi React atau FastAPI biasa yang tidak memerlukan model untuk dijalankan.

Oleh itu, buat pilihan berdasarkan apa yang anda inginkan pada akhirnya. sandboxd adalah untuk memulakan sesuatu daripada satu ayat dan menyimpan kod tersebut selepas itu. Dua lagi alat tersebut adalah untuk situasi di mana repositori atau produk yang dikuasakan oleh model sudah pun wujud.

Perbezaan lain ialah usia, dan ini adalah faktor yang perlu dipertimbangkan sebelum anda membina sesuatu yang penting di atasnya.

ChartGitHub stars and forks, read from the GitHub API on 4 August 2026
The data behind this chart
[
  {
    "tool": "sandboxd",
    "github_stars": "875",
    "forks": "50"
  },
  {
    "tool": "OpenHands",
    "github_stars": "83,091",
    "forks": "10,711"
  },
  {
    "tool": "Dify",
    "github_stars": "151,320",
    "forks": "23,886"
  }
]

sandboxd mempunyai 875 bintang berbanding 83,091 untuk OpenHands dan 151,320 untuk Dify. Repositori ini dicipta pada 3 Jun 2026, jadi ia berusia dua bulan setakat Ogos 2026, manakala OpenHands bermula sejak Mac 2024 dan Dify sejak April 2023. Versi keluaran v0.1.0 dihantar pada 6 Jun 2026 dan v0.3.6 pada 1 Ogos 2026. Projek ini melabelkan dirinya sebagai beta dan menyatakan bahawa keluaran 0.x boleh menjejaskan keserasian. Anggap angka-angka tersebut sebagai risiko kebergantungan dan bukannya sebagai penentu kualiti: projek berusia dua bulan hanya mempunyai tempoh dua bulan untuk orang lain menemui pepijatnya.

Keperluan pelayan dan punca kegagalan akibat kekurangan sumber

Projek ini menyatakan bahawa 2 vCPU dan 4 GB RAM mencukupi untuk bermula. Kenyataan ini tepat untuk control plane serta satu sandbox kecil, namun ia tidak mencukupi bagi dua orang yang membina aplikasi pada masa yang sama. Peruntukkan memori mengikut bahagian. Traefik dan Go control plane menggunakan sumber yang kecil. Setiap sandbox yang berjalan menampung toolchain Node atau Python yang lengkap, dan penggunaan puncak berlaku semasa npm install diikuti oleh binaan pengeluaran (production build). Rancang untuk menggunakan 8 GB bagi pelayan yang mengekalkan beberapa aplikasi, dan anggap swap sebagai jaring keselamatan dan bukannya kapasiti, kerana binaan yang menggunakan swap akan mengambil masa beberapa minit berbanding beberapa saat.

Apabila memori kehabisan, anda akan menghadapi dua jenis kegagalan yang berbeza. Di dalam sandbox, kontena mencapai had siling --memory yang ditetapkan oleh sandboxd dan kernel akan menamatkan proses yang paling besar, menyebabkan binaan terhenti tanpa mesej berguna daripada ejen. docker ps -a menunjukkan exit code 137 untuk kontena tersebut dan docker inspect melaporkan "OOMKilled": true. Binaan Node yang terhenti dengan cara ini sering mencetak JavaScript heap out of memory terlebih dahulu.

Kegagalan kedua berlaku pada hos. sandboxd menjalankan pressure reaper yang menghentikan sandbox apabila memori hos rendah. Oleh itu, pada pelayan kecil, sandbox boleh hilang semasa anda sedang melihat pratontonnya. Fail-fail adalah selamat dan permintaan seterusnya ke URL pratonton akan mengaktifkannya semula, tetapi tugasan yang sedang berjalan semasa kontena dihentikan tidak akan bersambung semula.

Disk adalah masalah yang kurang ketara. Setiap aplikasi menyimpan ruang kerja sendiri pada hos, dan projek JavaScript membawa pepohon node_modules yang bersaiz ratusan megabait. Sepuluh aplikasi bermakna beberapa gigabait dependensi sebelum mengambil kira imej. Mulakan dengan 40 GB dan pantau penggunaannya:

docker system df
sudo du -sh /var/lib/sandboxed/workspaces

Direktori data lalai ialah /var/lib/sandboxed, yang dieja dengan e tambahan. Menaip /var/lib/sandboxd akan membawa anda ke direktori kosong dan menyebabkan kekeliruan selama lima minit.

Memasang keluaran sandboxd yang dipin (pinned)

Docker Engine dengan pemalam Compose, berserta git, mesti ada pada pelayan terlebih dahulu. Memasang Docker pada VPS merangkumi bahagian tersebut.

docker compose version
git --version

Kedua-duanya mesti memaparkan versi. docker: 'compose' is not a docker command bermakna anda mempunyai binari docker-compose kendiri yang lama, manakala pemasang menjangkakan pemalam v2.

Pemasang tersebut ialah skrip shell yang diambil melalui rangkaian, jadi bacalah skrip itu sebelum menjalankannya, dan pin versi tersebut.

curl -fsSL https://raw.githubusercontent.com/tastyeffectco/sandboxd/v0.3.6/install.sh -o install-sandboxd.sh
less install-sandboxd.sh
SANDBOXD_REF=v0.3.6 bash install-sandboxd.sh

SANDBOXD_REF ialah rujukan git yang disemak keluar oleh pemasang ke dalam $HOME/.sandboxd/src, dan nilai lalainya ialah main. Membiarkannya tidak ditetapkan bermakna pemasangan anda adalah apa sahaja yang digabungkan pada pagi itu, yang penting bagi projek yang mengeluarkan enam keluaran pada Julai 2026 sahaja. Pin versi tersebut, kemudian naik taraf secara sengaja selepas membaca log perubahan (changelog).

Skrip tersebut mengklon sumber, membina imej, memulakan tindanan (stack) dengan docker compose up -d, dan mencetak URL konsol serta token API pada akhirnya. Simpan token tersebut di tempat yang selamat. Ia adalah kelayakan untuk API yang mengendalikan Docker sebagai root.

curl http://127.0.0.1:9090/healthz

Perintah itu mencetak ok apabila satah kawalan (control plane) telah naik. Jika ia tidak mencetak apa-apa, tindanan tersebut tidak bermula: jalankan docker compose ps dari ~/.sandboxd/src untuk melihat servis mana yang terhenti, kemudian docker compose logs sandboxd untuk melihat puncanya.

Mengakses konsol pada pelayan jauh

Konsol dihidangkan melalui Traefik pada HTTP_PORT, yang ditetapkan kepada 80 secara lalai, pada nama hos http://console.localhost. Traefik melakukan penghalaan berdasarkan nama hos, jadi memasukkan alamat IP pelayan anda ke dalam pelayar tidak akan memadankan sebarang peraturan dan akan memulangkan ralat 404. Selagi anda belum menetapkan domain sebenar, lakukan port forwarding dan kekalkan nama hos tersebut:

ssh -L 8080:127.0.0.1:80 you@your-vps

Kemudian buka http://console.localhost:8080 pada komputer riba anda. Pada Linux dan macOS, sebarang nama yang berakhir dengan .localhost akan diselesaikan kepada 127.0.0.1, jadi permintaan tersebut akan melalui terowong dengan pengepala Host yang betul. Tetapkan kata laluan konsol semasa lawatan pertama.

Berikan model kepada ejen

Dua ejen pengekodan disertakan dalam imej asas: OpenCode dan Claude Code. SANDBOXD_DEFAULT_AGENT menentukan ejen mana yang menjalankan tugasan yang tidak menyatakan pilihan, dan ia menggunakan opencode sebagai lalai. Tanpa kunci yang disambungkan, tugasan dijalankan menggunakan model percuma tanpa kunci daripada OpenCode Zen, jadi binaan pertama anda tidak menelan sebarang kos dan anda boleh menguji keseluruhan gelung sebelum membelanjakan apa-apa.

Sambungkan kunci anda sendiri apabila anda memerlukan model yang lebih berkuasa. Kunci dihantar ke control plane, bukan ke dalam sandbox: ia disimpan dalam keadaan disulitkan di bawah direktori data dan disuntik melalui proksi kelayakan, jadi ejen mahupun kod yang ditulisnya tidak boleh membaca kunci tersebut.

export API=http://127.0.0.1:9090
export SANDBOXD_TOKEN=sk_...                       # printed by the installer
export AUTH="Authorization: Bearer $SANDBOXD_TOKEN"

curl -s -XPOST $API/v1/agents/claude-code/api-key -H "$AUTH" \
  -H 'content-type: application/json' \
  -d '{"api_key":"sk-ant-..."}'

Konsol melakukan perkara yang sama di bawah Settings, AI Agents, termasuk aliran OAuth berpandu jika anda ingin menggunakan langganan Claude dan bukannya API key. Model lalai bagi setiap ejen terletak pada panel yang sama, dan tugasan tunggal boleh mengatasi tetapan tersebut.

Bina satu aplikasi kecil dari hujung ke hujung

Cipta aplikasi tersebut, butkan sandbox-nya, kemudian hantar satu prompt. ID akan dikembalikan sebagai JSON, dan quickstart akan mengekstraknya dengan sed supaya anda tidak perlu memasang jq.

APP=$(curl -s -XPOST $API/v1/apps -H "$AUTH" \
  -H 'content-type: application/json' \
  -d '{"name":"todo","runtime_preset":"react-vite"}' \
  | sed -E 's/.*"id":"([^"]+)".*/\1/')

SB=$(curl -s -XPOST $API/v1/apps/$APP/sandbox -H "$AUTH" \
  -H 'content-type: application/json' -d '{"ports":[3000]}' \
  | sed -E 's/.*"id":"([^"]+)".*/\1/')

echo "app=$APP sandbox=$SB"

Kedua-dua pemboleh ubah mesti mengandungi ID. $SB yang kosong bermakna sandbox tidak pernah but, dan punca biasa ialah imej asas masih dalam proses binaan atau hos kehabisan memori. 401 menggantikan ID bermakna token pembawa (bearer token) adalah salah.

curl -s -XPOST $API/v1/sandboxes/$SB/tasks -H "$AUTH" \
  -H 'content-type: application/json' \
  -d '{"prompt":"Add a todo list with a text input, an add button, and a delete button on each row. Keep the list in localStorage.","agent":"opencode"}'

Respons tersebut membawa ID tugasan. GET /v1/sandboxes/$SB/tasks/<task id> mengembalikan hasilnya, dan laluan /events pada tugasan yang sama merupakan strim SSE (server sent events) langsung tentang apa yang sedang dilakukan oleh ejen. Konsol memaparkan strim yang sama seperti sembang.

Aplikasi tersebut kemudian berada di http://s-<sandbox id>-3000.preview.localhost, di mana 3000 ialah port yang anda minta. Jika sandbox berada dalam mod tidur, permintaan pertama akan sampai ke catch-all Traefik, sandboxd memulakan kontena, menunggu port memberi respons, dan menghidangkan halaman pemanasan ringkas yang akan menyegarkan semula (refresh) kepada aplikasi anda. Pratonton yang tidak pernah keluar dari halaman tersebut bermakna proses di dalam tidak mendengar pada port yang diisytiharkan dalam sandbox.yaml aplikasi.

Letakkan pratonton pada domain sebenar dengan HTTPS

Setiap sandbox mendapat nama hosnya sendiri, jadi satu rekod DNS wildcard merangkumi kesemuanya. Halakan *.preview.yourdomain.com ke alamat IP pelayan dengan rekod A. Kemudian, tetapkan pemboleh ubah pratonton dalam .env di dalam ~/.sandboxd/src:

PREVIEW_DOMAIN=yourdomain.com
PREVIEW_ENTRYPOINT=websecure
PREVIEW_TLS=true
SANDBOXD_API_AUTH_DISABLED=false

Traefik memerlukan bahagian yang sepadan: aktifkan entrypoint websecure dalam traefik/traefik.yml dan tambah penyelesai sijil (certificate resolver). Gunakan cabaran DNS-01, kerana satu sijil wildcard kemudiannya merangkumi setiap nama hos pratonton. Dengan HTTP-01, setiap sandbox baharu memerlukan pengeluaran sijilnya sendiri, dan aktiviti membina yang sibuk akan terus melanggar had kadar (rate limits) Let's Encrypt. Sijil wildcard melalui cabaran DNS-01 merangkumi bahagian DNS untuk perkara tersebut.

cd ~/.sandboxd/src
docker compose up -d

URL pratonton menjadi https://s-<id>-3000.preview.yourdomain.com. Buka port 80 dan 443 pada firewall dan biarkan 9090 tertutup kepada dunia luar: lihat peraturan asas firewall ufw. Ingat bahawa sesiapa yang boleh meneka nama hos pratonton boleh memuatkan aplikasi tersebut, jadi anggap pratonton sebagai awam.

Di manakah kod yang dijana disimpan, dan bolehkah saya mengeksportnya?

Pada hos, ia berada di bawah direktori data. Setiap ruang kerja merupakan direktori biasa pada /var/lib/sandboxed/workspaces/<id>/, yang dipasang (bind mounted) ke dalam kontena, dan fail aplikasi terletak pada /home/sandbox/workspace/app di dalam kotak pasir (sandbox). Keadaan satah kawalan (control plane) adalah satu fail SQLite pada state/sandboxd.db, dan kelayakan ejen yang disulitkan berada dalam agent-auth/. Tiada apa-apa yang disembunyikan di dalam lapisan kontena, jadi sandaran hanyalah salinan direktori berserta fail pangkalan data tersebut. sandaran restic pada VPS mengendalikan kedua-duanya.

sudo ls /var/lib/sandboxed/workspaces
sudo du -sh /var/lib/sandboxed/workspaces/*

Eksport Git dibina secara terbina dalam dan bukannya ditambah kemudian. API mendedahkan status dan diff untuk dibaca, kemudian lakukan commit dan push:

curl -s $API/v1/apps/$APP/git/status -H "$AUTH"

curl -s -XPOST $API/v1/apps/$APP/git/commit -H "$AUTH" \
  -H 'content-type: application/json' \
  -d '{"message":"todo list, first pass"}'

curl -s -XPOST $API/v1/apps/$APP/git/push -H "$AUTH" \
  -H 'content-type: application/json' -d '{"branch":"main"}'

Remote peribadi memerlukan token akses peribadi, yang ditetapkan sekali dalam konsol di bawah Settings, Git credentials. Ia disimpan dalam keadaan disulitkan dan kekal di luar kotak pasir, jadi ejen tidak boleh membacanya atau melakukan push tanpanya. Lakukan push dengan kerap dan awal. Selagi anda tidak berbuat demikian, direktori ruang kerja adalah satu-satunya salinan kod tersebut, dan DELETE /v1/apps/<id> akan memadamkannya tanpa peluang kedua.

Berapakah kos binaan dalam token model?

sandboxd tidak mengukur perbelanjaan anda, jadi angka yang penting ada dalam konsol pembekal anda. Model OpenCode Zen percuma tidak mengenakan sebarang kos, namun ia lebih perlahan dan kurang berkuasa berbanding model berbayar, yang akan menyebabkan lebih banyak pusingan pembetulan bagi sebarang projek selain aplikasi mainan.

Bentuk bil bergantung pada cara gelung ejen berfungsi. Setiap pusingan menghantar semula konteks yang diperlukan, jadi kos dikira berdasarkan bilangan pusingan, bukan bilangan aplikasi. Satu prompt yang berjaya adalah murah. Lima belas pusingan "betulkan jarak" terhadap projek dengan lima puluh fail adalah mahal, kerana kandungan fail disertakan setiap kali. Token input dan output mempunyai harga yang berbeza, dan kos ejen pengekodan bagi setiap sesi memberikan julat yang realistik. Tetapkan had perbelanjaan yang ketat pada pembekal sebelum anda membenarkan gelung berjalan tanpa pengawasan.

Membersihkan sandbox yang tidak aktif

Idle reaper akan menghentikan mana-mana sandbox yang telah melahu melebihi SANDBOXD_IDLE_THRESHOLD_SECONDS, yang ditetapkan secara lalai kepada 2100 saat, atau 35 minit. Tindakan ini memulangkan RAM dan mengekalkan fail, manakala permintaan seterusnya ke URL pratonton akan mengaktifkan semula kontena tersebut. Kurangkan nilai ini pada pelayan yang kecil, kerana 35 minit kontena melahu bermakna 35 minit memori yang tidak boleh anda gunakan.

Menghentikan bukan bermakna memadam, dan inilah punca cakera penuh secara senyap. Sandbox yang dihentikan masih memiliki ruang kerja dan kontenanya. Mengalih keluar sandbox tetapi mengekalkan aplikasi adalah satu DELETE pada sandbox tersebut, yang akan memadamkan kontena dan ruang kerjanya sekali. Mengalih keluar aplikasi akan memadamkan segala-galanya secara kekal.

curl -s -XPOST $API/v1/sandboxes/$SB/stop -H "$AUTH"     # frees RAM, keeps files
curl -s -XDELETE $API/v1/sandboxes/$SB -H "$AUTH"        # container and workspace gone
curl -s -XDELETE $API/v1/apps/$APP -H "$AUTH"            # app and everything under it

Selepas beberapa minggu melakukan eksperimen, docker system df akan menunjukkan lebih banyak ruang imej yang boleh dituntut semula daripada jangkaan anda, kerana setiap aplikasi yang menarik toolchain sendiri telah meninggalkan lapisan (layers). docker image prune akan membersihkan lapisan yang tergantung (dangling). Semak GET /v1/apps terlebih dahulu, kerana imej yang masih dirujuk oleh sandbox yang sedang tidur bukanlah sampah.

Apa yang diberikan dan tidak diberikan oleh sempadan kontena

Setiap sandbox berjalan sebagai pengguna tanpa keistimewaan dengan sistem fail root baca sahaja, semua Linux capabilities digugurkan, no-new-privileges ditetapkan, serta had memori dan had proses. Projek ini telus mengenai had tersebut: kontena Linux dengan kernel yang dikongsi merupakan sempadan pengasingan yang kuat tetapi sempadan keselamatan yang lemah. Pepijat kernel bermakna pelayan hos telah diceroboh.

Dua fakta memerlukan tindakan. Egress rangkaian daripada sandbox adalah terbuka dalam binaan self-hosted, jadi kod yang dijana boleh mencapai internet, rangkaian tempatan anda dan endpoint metadata awan. Subsistem egress nftables wujud dalam kod sumber tetapi dinyahaktifkan dalam binaan Docker Compose mudah alih, yang bermaksud had tersebut perlu datang daripada firewall hos anda. Selain itu, API control plane secara efektif adalah root hos kerana ia mengawal Docker socket. Ia terikat pada 127.0.0.1:9090 secara lalai, SANDBOXD_API_AUTH_DISABLED mesti kekal false, dan ia tidak boleh sekali-kali didedahkan kepada internet.

Jika anda bercadang untuk membenarkan orang lain menghantar prompt ke kotak anda, model tersebut terlalu lemah secara sendirinya. Projek ini mencadangkan gVisor dengan SANDBOXD_RUNTIME=runsc, yang meletakkan kernel ruang pengguna antara sandbox dan hos, dengan kos prestasi kira-kira 1.7 hingga 4 kali lebih perlahan untuk kerja yang berat dengan syscall. Jawapan yang lebih kukuh adalah satu mesin bagi setiap penyewa, yang merupakan hujah yang sama seperti menjalankan ejen pengekodan dalam VM pakai buang.

Patutkah anda membina projek yang berusia dua bulan?

Untuk kotak binaan peribadi, ya, dengan langkah berjaga-jaga yang jelas: sematkan SANDBOXD_REF, buat sandaran /var/lib/sandboxed, dan tolak setiap aplikasi yang penting bagi anda ke git remote. Bagi apa-apa yang melibatkan pelanggan, tunggu sehingga versi 1.0 atau sediakan bajet untuk kerosakan, kerana penyelenggara menyatakan dengan jelas bahawa versi 0.x boleh berubah pada bila-bila masa. Penyelenggara juga menjual pemasangan terurus pada harga 79 dolar sebulan setakat Ogos 2026, yang wajar diketahui apabila anda menilai sama ada projek tersebut mempunyai sebab untuk terus wujud.

Sebab risiko ini boleh diterima adalah hasil keluarannya. sandboxd menghasilkan aplikasi biasa dalam repositori git biasa, jadi jika projek tersebut terhenti, anda menyimpan kod tersebut dan hanya kehilangan pembungkusnya. Itu adalah kedudukan yang jauh lebih baik daripada pembina terhos yang memiliki projek anda. Untuk pandangan yang lebih luas tentang perkara yang layak diletakkan pada pelayan anda tahun ini, lihat apa yang berbaloi untuk di-self-host pada 2026.

FAQ

Apakah spesifikasi pelayan minimum untuk sandboxd?

Projek ini menyatakan 2 vCPU dan 4 GB RAM sudah mencukupi untuk bermula, yang merangkumi control plane, Traefik dan satu sandbox kecil. Gunakan 8 GB RAM dan 40 GB cakera jika anda mahu menjalankan beberapa aplikasi serentak, kerana setiap sandbox yang berjalan menyimpan toolchain Node atau Python yang lengkap dan setiap ruang kerja menyimpan dependency tree sendiri pada cakera. Apabila hos kehabisan sumber, pressure reaper sandboxd akan menghentikan sandbox untuk membebaskan memori, dan binaan yang melebihi had memori kontena akan dimatikan oleh kernel: docker ps -a menunjukkan exit code 137 untuk situasi tersebut.

Bagaimanakah sandboxd berbeza daripada Dify atau OpenHands?

Ia menghasilkan artifak yang berbeza. Dify membina aplikasi yang memanggil model semasa runtime, seperti antara muka sembang dan pipeline perolehan data. OpenHands menyunting repositori yang sedia ada, menjalankan arahan dan mencadangkan perubahan pada kod sedia ada. sandboxd membina projek baharu sepenuhnya daripada prompt, membina projek tersebut di dalam kontena sendiri, dan menyediakannya pada URL pratonton; hasilnya ialah aplikasi web biasa yang tidak memerlukan model untuk berjalan.

Di manakah kod yang ditulis oleh ejen disimpan?

Pada sistem fail hos, bukan di dalam imej kontena. Setiap aplikasi mendapat direktori di /var/lib/sandboxed/workspaces/<id>/ yang di-bind mount ke dalam sandbox-nya, dan fail tersebut muncul di /home/sandbox/workspace/app di dalam kontena. Status control plane merupakan satu fail SQLite di bawah state/ dalam direktori data yang sama. Anda boleh melakukan commit dan push ke git remote daripada tab Git konsol atau melalui endpoint /v1/apps/<id>/git/commit dan /git/push, dan token untuk remote peribadi disimpan secara disulitkan oleh control plane dan bukannya diberikan kepada sandbox.

Adakah selamat untuk mendedahkan sandboxd kepada internet?

Dedahkan URL pratonton dan konsol sahaja, jangan sekali-kali mendedahkan API control plane. API tersebut mengawal Docker pada hos, jadi ia setara dengan root, dan atas sebab itu ia terikat pada 127.0.0.1:9090 secara lalai. Sandbox juga mempunyai akses rangkaian keluar (egress) yang terbuka dalam binaan self-hosted, bermakna kod yang ditulis oleh ejen boleh mencapai rangkaian tempatan dan endpoint metadata awan anda. Oleh itu, tambahkan peraturan firewall hos jika kotak tersebut mempunyai jiran yang perlu dilindungi. Bagi prompt daripada pihak yang tidak dipercayai, jalankan satu hos bagi setiap penyewa (tenant) dan jangan hanya bergantung pada sempadan kontena.

#sandboxd#ai-agents#self-hosted#app-builder#docker