Memulai dengan Claude Managed Agents yang di-host sendiri
Jalankan Claude Managed Agents yang di-host sendiri di satu mesin dengan Docker Compose dan jalankan sesi pertama di dalam container sandbox.
Dalam quickstart ini, Anda menjalankan Claude Managed Agents yang di-host sendiri di satu mesin dengan Docker Compose. Stack Compose terdiri dari server, database PostgreSQL-nya, dan sekumpulan worker yang menjalankan setiap sesi di “sandbox container” (container sandbox) miliknya sendiri. Setelah itu, Anda mengobrol dengan agen dari terminal Anda dan memastikan bahwa “tool calls” (panggilan alat) agen tersebut berjalan di dalam sandbox container. Anda kemudian dapat membuka sesi di konsol di server Anda.
Untuk produksi, Anthropic merekomendasikan dua Helm chart dari rilis ini. Lihat Menerapkan di Kubernetes.
Claude Code
Biarkan Claude Code menjalankan quickstart ini untuk Anda
Siapkan Claude Managed Agents yang di-host sendiri di mesin ini dengan mengikuti https://platform.claude.com/docs/en/managed-agents/self-hosted/quickstart.md. Saya sudah mengunduh arsip rilisnya.Prasyarat
- Arsip rilis: Untuk meminta akses ke unduhan, hubungi tim akun Anthropic Anda.
- Kunci API Claude: Server menggunakannya untuk panggilan model. Buat kunci di Claude Console.
- Docker: Versi terbaru Docker Engine dengan plugin Compose (
docker compose, bukandocker-composeversi lama). - Host dengan setidaknya dua CPU: x86-64 atau Arm. Pada host yang lebih kecil, atur
CMA_SANDBOX_CPUSke jumlah CPU host tersebut saat Anda membuat.env. - Akses jaringan saat pertama kali dijalankan: Build pertama mengambil dari Docker Hub, repositori paket Alpine, dan rilis GitHub.
- Alat: Di mesin tempat Anda menjalankan Docker, Anda memerlukan
openssldan CLIant.
Menjalankan stack
Ekstrak arsip
Ekstrak arsip, dan bekerjalah dari direktori
composedi dalamnya. Dalam perintah tersebut, ganti<archive>dengan nama arsip Anda, tanpa.tar.gz.tar -xzf <archive>.tar.gz && cd <archive>/composeJika umask Anda lebih ketat dari
022, binary kehilangan izin eksekusinya untuk pengguna lain, dan container server tidak dapat menjalankannya. Dalam hal ini, atur umask ke022lalu ekstrak arsip lagi.Buat file .env
Compose membaca secret stack dari file
.envdi sebelahdocker-compose.yml. Buat file-nya:cat > .env <<EOF CMA_PG_PASSWORD=$(openssl rand -hex 32) ANTHROPIC_API_KEY=sk-ant-... CMA_SERVER__API_KEY=$(openssl rand -hex 32) CMA_STORE__CREDENTIALS_ENCRYPTION_KEY=$(openssl rand -base64 32) EOF chmod 600 .envBuka
.envdi editor dan gantisk-ant-...dengan kunci API Claude Anda. Blok tersebut menghasilkan sisanya: kata sandi database, kunci API server yang dikirim aplikasi Anda, dan kunci yang mengenkripsi secret yang disimpan server.Jalankan container
Build dan jalankan stack, lalu ikuti log server:
docker compose up --build -d docker compose logs -f cma-serverKetika log menampilkan baris dengan
msg="cma-server listening", tekan Ctrl+C untuk berhenti mengikutinya.Periksa bahwa server sudah siap
curl -s http://127.0.0.1:8400/cma-server/readyzServer yang siap menjawab dengan
"status":"ready". Tepat setelah dimulai, server dapat menjawab"status":"degraded"selama beberapa detik sementara pemeriksaan pertamanya berjalan. Jika statusnya tetapdegradedatau server menjawab"status":"not_ready", lihat Pemecahan masalah.
Jalankan sesi pertama Anda
Buat agen dan mengobrollah dengannya dari terminal Anda menggunakan CLI ant.
Arahkan CLI ke server Anda
Buka terminal kedua di direktori yang sama, dan gunakan terminal itu khusus untuk
ant. Perintah-perintah berikut mengaturANTHROPIC_API_KEYke kunci API server Anda, bukan kunci API Claude Anda, seperti yang dijelaskan di Memanggil API pada server yang di-host sendiri:export ANTHROPIC_BASE_URL=http://127.0.0.1:8400 export ANTHROPIC_API_KEY=$(grep '^CMA_SERVER__API_KEY=' .env | cut -d= -f2)Tetap jalankan perintah
docker composedi terminal pertama. Jika Anda menjalankandocker compose updi terminal ini, Compose meneruskan variabel-variabel ini ke server, dan server memanggil dirinya sendiri alih-alih Claude API.Buat agen
Simpan file yang ditampilkan setelah perintah sebagai
quickstart-agent.md, lalu jalankan perintah tersebut. File ini memberikan alat bawaan kepada agen dan mengizinkannya menjalankan alat tersebut tanpa meminta persetujuan Anda terlebih dahulu.CLIant apply --yes quickstart-agent.mdquickstart-agent.md--- name: Quickstart agent model: claude-opus-5-5 tools: - type: agent_toolset_20260401 --- You are a helpful assistant.Perintah ini pertama-tama mencetak peringatan bahwa perintah tersebut
could not determine the organization and workspace, dengan error404, lalu membuat agen. Hal itu memang diharapkan di server Anda sendiri.Mulai sesi
Perintah-perintah ini menemukan agen dan environment milik stack, memulai sesi, dan menyimpan ID sesi di
SESSION_ID. Stack menamai environment-nyacompose-sandbox.AGENT_ID=$(ant beta:agents list --format raw \ --transform 'data.#(name=="Quickstart agent").id' --raw-output) ENVIRONMENT_ID=$(ant beta:environments list --format raw \ --transform 'data.#(name=="compose-sandbox").id' --raw-output) SESSION_ID=$(ant beta:sessions create --agent "$AGENT_ID" \ --environment-id "$ENVIRONMENT_ID" --transform id --raw-output)Minta agen menjalankan perintah
Hubungkan terminal Anda ke sesi:
ant beta:sessions connect "$SESSION_ID"Perintah ini membuka tampilan obrolan dari sesi. Kirim pesan ini:
Run `hostname` with the bash tool and tell me the output.Agen membalas dengan hostname yang diawali
cma-sandbox-. Itu adalah nama container sandbox yang menjalankan perintah tersebut, yang memastikan bahwa alat berjalan di sandbox dan bukan di mesin Anda.Temukan container sandbox
Biarkan obrolan tetap terbuka. Di terminal pertama, tampilkan daftar sandbox container:
docker ps --filter label=cma-server.sandboxDaftar menampilkan container yang dilaporkan agen. Container keluar sekitar satu menit setelah sebuah giliran berakhir, dan pesan berikutnya dalam sesi memulai container baru. Jika daftarnya kosong, minta agen menjalankan
hostnamelagi, dan tampilkan daftar container lagi selagi agen membalas.Untuk keluar dari obrolan, tekan Ctrl+C di terminalnya. Sesi tetap berjalan.
Coba konsol di server Anda
Bagian ini opsional. Konsol memerlukan single sign-on. Untuk mencobanya, mulai ulang stack dengan penyedia sign-in tiruan dari rilis. Port 8080 di mesin Anda harus kosong.
Mulai ulang stack dengan penyedia sign-in tiruan
Jalankan perintah-perintah ini di terminal pertama:
export COMPOSE_FILE=docker-compose.yml:docker-compose.oidc.yml docker compose up --build -dBaris
exporthanya berlaku untuk terminal pertama, jadi jalankan lagi di terminal baru mana pun yang Anda buka untukdocker compose. Untuk mengubah pengaturan server di stack ini, editcompose.config.oidc.yaml, bukancompose.config.yaml, lalu jalankandocker compose restart cma-server.Buka sesi
Di browser pada mesin yang sama, buka
http://127.0.0.1:8400/, klik Continue with SSO, lalu pilih alice, administrator demo. Di sidebar, pilih Sessions, lalu pilih sesi tersebut.Halaman diperbarui seiring agen bekerja, dan Anda dapat mengirim pesan ke agen dari halaman tersebut.
Untuk juga membuat agen dan memulai sesi di konsol, lihat Menjalankan agen dari konsol.
Menghentikan stack
Di terminal pertama, jalankan perintah ini:
docker compose down --remove-orphansPerintah ini menghapus container dan mempertahankan database. Untuk juga menghapus database, beserta setiap agen, sesi, dan riwayat sesi di dalamnya, jalankan docker compose down --remove-orphans -v.
Pemecahan masalah
- Arsip Anda tidak memiliki direktori
compose: Arsip tersebut berisi rilis yang lebih lama, dan perintah di halaman ini tidak sesuai dengannya. Mintalah rilis terbaru kepada tim akun Anthropic Anda. Untuk memindahkan deployment yang sedang berjalan ke rilis terbaru, lihat Meningkatkan Claude Managed Agents yang di-host sendiri. - Server tidak pernah aktif: Jalankan
docker compose logs migrate. Containermigratesekali jalan membuat tabel database. Container tersebut harus keluar dengan status0sebelum server dimulai. - Pemeriksaan kesiapan tetap
degraded, atau setiap giliran gagal: Jika Anda menjalankandocker compose updi terminal tempatANTHROPIC_BASE_URLbernilaihttp://127.0.0.1:8400, server memanggil dirinya sendiri alih-alih Claude API. Jalankandocker compose up -dlagi di terminal pertama, tempat variabel tersebut tidak diatur. Jika tidak demikian, log server menunjukkan apa yang gagal. Untuk membacanya, jalankandocker compose logs -f cma-serverlagi. - Pemeriksaan kesiapan menjawab
not_ready: Dalam jawaban tersebut, temukan pemeriksaan dengan statusfailed:upstream: Claude API menolak kunci API Claude Anda. PerbaikiANTHROPIC_API_KEYdi.env, lalu jalankandocker compose up -dlagi di terminal pertama. Jika shell Anda juga mengaturANTHROPIC_API_KEY, Compose menggunakan nilai dari shell, jadi jalankanunset ANTHROPIC_API_KEYterlebih dahulu.database: Database menolak login server, misalnya karena kata sandi salah, atau koneksi terbuka ke database terputus. Untuk mengetahui penyebabnya, jalankandocker compose logs -f cma-serverlagi.
- Agen membalas tetapi panggilan alatnya tidak pernah selesai: Tidak ada worker yang melakukan polling ke environment. Periksa log worker dengan
docker compose logs sandbox. Worker yang tidak dapat menjangkau socket daemon Docker keluar dengan pesan yang menyebutkanCMA_DOCKER_SOCKET. Atur variabel tersebut di.envke path socket daemon Anda, lalu jalankandocker compose up -dlagi di terminal pertama. - Worker berjalan, tetapi panggilan alat tetap tidak pernah selesai: Stack menjalankan 10 worker, dan masing-masing menjalankan container dari satu sesi pada satu waktu. Sebuah sesi mengambil satu worker yang kosong saat Anda membuatnya, dan sesi yang tidak pernah menerima pesan mempertahankan worker-nya hingga satu jam. Jika kesepuluh worker sudah terpakai, panggilan alat dari sesi lain menunggu worker. Jika perintah
docker pspada langkah “Temukan container sandbox” menampilkan 10 container, arsipkan sesi yang tidak Anda gunakan:- Di terminal pertama, jalankan
docker ps --filter label=cma-server.sandbox --format '{{.Label "cma-server.session"}}'. Perintah ini mencetak ID sesi di balik setiap container. Sesi yang sedang menunggu belum memiliki container, jadi sesi tersebut tidak ada di daftar. - Di terminal kedua, tekan Ctrl+C untuk keluar dari obrolan, lalu jalankan
ant beta:sessions archive --session-id <session-id>untuk setiap sesi dalam daftar yang tidak Anda gunakan. - Jalankan
ant beta:sessions connect "$SESSION_ID"lagi. Panggilan alat selesai ketika sebuah worker mengambil sesinya.
- Di terminal pertama, jalankan
Langkah selanjutnya
Arahkan SDK dan CLI ant ke server Anda.
Periksa fitur mana yang berperilaku berbeda atau tidak tersedia.
Siapkan sign-in, lalu buat agen dan jalankan sesi di browser.
Apakah halaman ini membantu?