Yang Anda perlukan
- CLI flyctl terinstal
- Akun Fly.io (tingkat gratis dapat digunakan)
- Autentikasi model: kunci API untuk penyedia model yang Anda pilih
- Kredensial saluran: token bot Discord, token Telegram, dan sebagainya.
Jalur cepat untuk pemula
- Kloning repositori, sesuaikan
fly.toml - Buat aplikasi + volume, atur rahasia
- Deploy dengan
fly deploy - Masuk melalui SSH untuk membuat konfigurasi, atau gunakan UI Kontrol
1
Buat aplikasi Fly
lhr (London), iad (Virginia), sjc (San Jose).2
Konfigurasikan fly.toml
Edit Titik masuk image Docker OpenClaw adalah
fly.toml agar sesuai dengan nama aplikasi dan kebutuhan Anda. fly.toml yang dilacak dalam repositori adalah templat publik yang ditampilkan di bawah; deploy/fly.private.toml adalah varian yang diperketat tanpa IP publik (lihat Deployment privat).tini, yang secara default menjalankan node openclaw.mjs gateway. [processes] Fly menggantikan CMD Docker (di sini menjalankan node dist/index.js gateway ... secara langsung, titik masuk terkompilasi yang sama) tanpa mengubah ENTRYPOINT, sehingga proses tetap berjalan sebagai tini.Pengaturan utama:3
Atur rahasia
--bind lan) memerlukan jalur autentikasi gateway yang valid. Contoh ini menggunakan OPENCLAW_GATEWAY_TOKEN, tetapi gateway.auth.password atau deployment proksi tepercaya non-loopback yang dikonfigurasi dengan benar juga memenuhi persyaratan. Lihat Pengelolaan rahasia untuk kontrak SecretRef.Perlakukan token-token ini seperti kata sandi. Utamakan variabel lingkungan/fly secrets daripada berkas konfigurasi untuk kunci API dan token agar rahasia tidak masuk ke openclaw.json.4
Deploy
gateway ready setelah listener HTTP/WebSocket aktif. Pemeriksaan kesehatan Fly sendiri memantau internal_port = 3000 sesuai fly.toml; direktif HEALTHCHECK Docker pada image juga melakukan polling terhadap /healthz di port default 18789, yang tidak digunakan di sini karena deployment ini mengganti gateway menjadi --port 3000.5
Buat berkas konfigurasi
Masuk ke mesin melalui SSH untuk membuat konfigurasi yang tepat:Dengan
OPENCLAW_STATE_DIR=/data, jalur konfigurasi adalah /data/openclaw.json.Ganti https://my-openclaw.fly.dev dengan origin aplikasi Fly Anda yang sebenarnya. Startup Gateway mengisi origin UI Kontrol lokal dari nilai runtime --bind dan --port agar boot pertama dapat dilanjutkan sebelum konfigurasi tersedia, tetapi akses browser melalui Fly tetap memerlukan origin HTTPS persis yang tercantum dalam gateway.controlUi.allowedOrigins.Token Discord dapat berasal dari salah satu sumber berikut:- Variabel lingkungan
DISCORD_BOT_TOKEN(direkomendasikan untuk rahasia); tidak perlu menambahkannya ke konfigurasi, gateway membacanya secara otomatis - Berkas konfigurasi
channels.discord.token
Pemecahan masalah
”Aplikasi tidak mendengarkan pada alamat yang diharapkan”
Gateway terikat ke127.0.0.1, bukan 0.0.0.0.
Perbaikan: tambahkan --bind lan ke perintah proses Anda dalam fly.toml.
Pemeriksaan kesehatan gagal / koneksi ditolak
Fly tidak dapat menjangkau gateway pada port yang dikonfigurasi. Perbaikan: pastikaninternal_port cocok dengan port gateway (--port 3000 atau OPENCLAW_GATEWAY_PORT=3000).
Masalah OOM / memori
Kontainer terus dimulai ulang atau dihentikan. Tandanya:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration, atau mulai ulang tanpa pesan.
Perbaikan: tingkatkan memori dalam fly.toml:
Masalah kunci Gateway
Gateway menolak dimulai dengan galat “sudah berjalan” setelah kontainer dimulai ulang. Berkas kunci runtime berada di<tmpdir>/openclaw-<uid>/gateway.<hash>.lock
dan gateway.state.<hash>.lock (Linux:
/tmp/openclaw-<uid>/gateway.*.lock), bukan pada volume persisten /data, sehingga
mulai ulang kontainer secara penuh biasanya menghapusnya bersama seluruh
sistem berkas kontainer lainnya. Jika kunci tetap ada (misalnya fly machine restart
yang mempertahankan sistem berkas kontainer) dan menghalangi startup, hapus
secara manual:
Konfigurasi tidak dibaca
--allow-unconfigured hanya melewati pengaman startup. Opsi ini tidak membuat atau memperbaiki /data/openclaw.json, jadi pastikan konfigurasi Anda yang sebenarnya tersedia dan menyertakan "gateway": { "mode": "local" } untuk startup gateway lokal normal.
Verifikasi bahwa konfigurasi tersedia:
Menulis konfigurasi melalui SSH
fly ssh console -C tidak mendukung pengalihan shell. Untuk menulis berkas konfigurasi:
fly sftp mungkin gagal jika berkas sudah tersedia; hapus terlebih dahulu:
Status tidak dipertahankan
Jika profil autentikasi, status saluran/penyedia, atau sesi hilang setelah mulai ulang, direktori status ditulis ke sistem berkas kontainer, bukan ke volume. Perbaikan: pastikanOPENCLAW_STATE_DIR=/data diatur dalam fly.toml, lalu deploy ulang.
Memperbarui
git pull + fly deploy adalah jalur yang diawasi di sini: jalur ini membangun ulang image dari Dockerfile, sehingga versi CLI/gateway, image OS dasar, dan semua perubahan Dockerfile diperbarui bersama-sama. openclaw update di dalam kontainer yang sedang berjalan bukanlah operasi yang sama karena image dikirim sebagai struktur dist/ yang dibangun dengan Docker tanpa checkout .git dan tanpa instalasi global yang dikelola npm untuk dideteksi; lihat Memperbarui untuk alur tersebut pada instalasi bergaya VM.
Memperbarui perintah mesin
Untuk mengubah perintah startup tanpa deployment ulang penuh:fly deploy berikutnya mengatur ulang perintah mesin ke apa pun yang ada dalam fly.toml; terapkan kembali perubahan manual setelah melakukan deployment ulang.
Deployment privat (diperketat)
Secara default, Fly mengalokasikan IP publik sehingga gateway Anda dapat dijangkau dihttps://your-app.fly.dev dan ditemukan oleh pemindai internet (Shodan, Censys, dan sebagainya).
Gunakan deploy/fly.private.toml untuk deployment yang diperketat dengan tanpa IP publik: konfigurasi ini tidak menyertakan [http_service], sehingga tidak ada ingress publik yang dialokasikan.
Kapan menggunakan deployment privat
- Hanya panggilan/pesan keluar (tanpa webhook masuk)
- Terowongan ngrok atau Tailscale menangani semua panggilan balik webhook
- Gateway diakses melalui SSH, proksi, atau WireGuard, bukan melalui browser
- Deployment harus disembunyikan dari pemindai internet
Penyiapan
fly ips list seharusnya hanya menampilkan IP bertipe private:
Mengakses deployment privat
Opsi 1: proksi lokal (paling sederhana)Webhook dengan deployment privat
Untuk callback Webhook (Twilio, Telnyx, dan sebagainya) tanpa paparan publik:- tunnel ngrok: jalankan ngrok di dalam kontainer, atau sebagai sidecar
- Tailscale Funnel: ekspos path tertentu melalui Tailscale
- Hanya keluar: beberapa penyedia (Twilio) berfungsi untuk panggilan keluar tanpa Webhook
plugins.entries.voice-call.config:
webhookSecurity.allowedHosts ke nama host tunnel agar header host yang diteruskan dapat diterima.
Pertimbangan keamanan
Catatan
- Fly.io menggunakan arsitektur x86; Dockerfile kompatibel dengan x86 dan ARM.
- Untuk orientasi WhatsApp/Telegram, gunakan
fly ssh console. - Data persisten berada pada volume di
/data. - Signal memerlukan signal-cli (CLI berbasis Java) pada image; gunakan image khusus dan pertahankan memori sebesar 2GB+.
Biaya
Dengan konfigurasi yang direkomendasikan (shared-cpu-2x, RAM 2GB), perkirakan biaya sekitar $10-15/bulan tergantung penggunaan; tingkat gratis mencakup sebagian alokasi dasar. Lihat harga Fly.io untuk tarif saat ini.
Langkah berikutnya
- Siapkan saluran perpesanan: Saluran
- Konfigurasikan Gateway: Konfigurasi Gateway
- Pastikan OpenClaw tetap mutakhir: Memperbarui