Cara Pasang sandboxd AI App Builder di VPS Sendiri
Ketahui cara memasang sandboxd pada VPS menggunakan Docker dan Traefik v3. Panduan ini merangkumi konfigurasi kunci model, URL pratonton HTTPS, serta pengurusan ruang cakera.
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.
Data di sebalik carta ini
[
{
"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 itu tepat bagi control plane berserta satu sandbox kecil, namun tidak mencukupi untuk dua orang yang melakukan binaan (build) pada masa yang sama. Peruntukkan memori mengikut bahagian. Traefik dan control plane berasaskan Go menggunakan memori yang kecil. Setiap sandbox yang berjalan menampung toolchain Node atau Python yang lengkap, dan kemuncak penggunaan 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 mengalami dua jenis kegagalan yang berbeza dan tidak kelihatan serupa. 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 padanya 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 menjadi rendah. Oleh itu, pada pelayan kecil, sandbox boleh hilang semasa anda sedang melihat pratontonnya. Fail-fail tersebut 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 kerjanya sendiri pada hos, dan projek JavaScript membawa pokok 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/workspacesDalam v0.3.6, iaitu keluaran yang ditetapkan dalam panduan ini, direktori data lalai ialah /var/lib/sandboxed, yang dieja dengan e tambahan. Menaip /var/lib/sandboxd di situ tidak akan memberikan hasil dan membuang masa selama lima minit yang mengelirukan. Perkara itu berubah dalam v0.3.9 (25 Ogos 2026). Pemasang yang lebih baharu meletakkan pemasangan segar dalam /var/lib/sandboxd dan mengekalkan /var/lib/sandboxed hanya untuk pemasangan yang sudah sedia ada di situ. Pada pelayan yang pertama kali disediakan dengan keluaran terbaharu, gunakan laluan tanpa e dalam setiap arahan di bawah.
Memasang keluaran sandboxd yang dipinkan
Docker Engine dengan pemalam Compose, serta git, mestilah berada pada pelayan terlebih dahulu. Memasang Docker pada VPS merangkumi bahagian tersebut.
docker compose version
git --versionKedua-duanya mesti memaparkan versi. docker: 'compose' is not a docker command bermaksud pemalam Compose v2 tiada. Pemasang lebih mengutamakan pemalam tersebut tetapi akan menggunakan binari docker-compose kendiri jika ia dipasang, dan ia akan berhenti dengan Docker Compose not found hanya apabila kedua-duanya tiada. Perintah dalam panduan ini menggunakan docker compose, jadi memasang pemalam adalah penyelesaian yang lebih mudah.
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.shSANDBOXD_REF ialah git ref yang diperiksa oleh pemasang ke dalam $HOME/.sandboxd/src, dan ia ditetapkan kepada main secara lalai. 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 changelog. Setakat 12 Oktober 2026, keluaran terbaharu ialah v0.3.22, enam belas keluaran selepas v0.3.6 yang dipinkan di sini.
Skrip tersebut mengklon sumber, membina imej, memulakan stack dengan docker compose up -d, dan memaparkan 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/healthzIa memaparkan ok apabila control plane telah siap sedia. Jika ia tidak memaparkan apa-apa, stack 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-vpsKemudian 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.
Gunakan domain sebenar dengan HTTPS untuk pratonton
Setiap sandbox mempunyai nama hosnya sendiri, jadi satu rekod DNS wildcard boleh 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=falseTraefik 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 akan merangkumi setiap nama hos pratonton. Dengan HTTP-01, setiap sandbox baharu memerlukan pengeluaran sijilnya sendiri, dan aktiviti pembinaan yang sibuk akan terus mencapai 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 -dURL pratonton akan menjadi https://s-<id>-3000.preview.yourdomain.com. Buka port 80 dan 443 pada firewall dan biarkan port 9090 tertutup daripada capaian awam: lihat peraturan asas firewall ufw. Ingat bahawa sesiapa sahaja yang boleh meneka nama hos pratonton boleh memuatkan aplikasi tersebut, jadi anggap pratonton sebagai kandungan awam.
Jika anda lebih suka melangkau domain, DNS dan sijil sepenuhnya, pihak penyelenggara kini menawarkan sandboxd Cloud. Ia memberikan pelayan anda alamat HTTPS awam di bawah sandboxd.io dengan harga 9.99 dolar bagi setiap pelayan sebulan, atau 4.99 dolar dengan diskaun pelancaran, setakat Oktober 2026. Semak versi keluaran yang diperlukan sebelum anda bergantung padanya dengan pin v0.3.6.
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>/ dalam pemasangan v0.3.6, yang dipasang secara bind ke dalam kontena, dan fail aplikasi terletak pada /home/sandbox/workspace/app di dalam sandbox. Keadaan control plane adalah satu fail SQLite pada state/sandboxd.db, dan kelayakan ejen yang disulitkan berada pada 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":"todo-first-pass"}'Push sentiasa dihantar ke cawangan (branch) baharu. Jika branch ditinggalkan, ia akan menggunakan lalai sandboxd/<slug>-<shortsha>. main, master dan cawangan yang anda import akan ditolak, jadi lakukan penggabungan (merge) pada bahagian remote.
Remote peribadi memerlukan token akses peribadi, yang ditetapkan sekali dalam konsol di bawah Settings, Git credentials. Ia disimpan dalam bentuk disulitkan dan kekal di luar sandbox, jadi ejen tidak boleh membacanya atau melakukan push tanpanya tanpa pengetahuan anda. Lakukan push dengan kerap dan awal. Selagi anda belum melakukannya, 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 itSelepas 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.
Apakah fungsi dan batasan 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 batasannya: kontena Linux yang berkongsi kernel 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 didedahkan kepada internet.
Jika anda bercadang untuk membenarkan orang lain menghantar prompt ke kotak anda, model itu terlalu lemah jika berdiri sendiri. Projek ini mencadangkan gVisor dengan SANDBOXD_RUNTIME=runsc, yang meletakkan kernel ruang pengguna (userspace) di antara sandbox dan hos. Berdasarkan ukuran projek itu sendiri, ia menjadikan pemasangan pakej kira-kira 1.7 kali lebih perlahan dan kerja yang berat dengan syscall kira-kira 4 kali lebih perlahan. 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 direktori data (/var/lib/sandboxed pada v0.3.6, /var/lib/sandboxd pada pemasangan baharu v0.3.9 atau lebih baharu), dan tolak setiap aplikasi yang penting kepada anda ke git remote. Bagi apa-apa yang diakses 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, 199 dolar untuk penyediaan dan 79 dolar sebulan untuk operasi setakat Oktober 2026, yang perlu 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 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 memadai 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 memuatkan 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 saluran paip perolehan data. OpenHands menyunting repositori yang sudah sedia ada, menjalankan arahan dan mencadangkan perubahan kepada 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>/ pada pemasangan v0.3.6 (/var/lib/sandboxd/workspaces/<id>/ pada pemasangan baharu v0.3.9 atau lebih baharu), 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 cawangan baharu pada 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 akses 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 pelayan mempunyai jiran yang perlu dilindungi. Untuk prompt daripada pihak yang tidak dipercayai, jalankan satu hos bagi setiap penyewa (tenant) dan jangan hanya bergantung pada sempadan kontena.