Skip to main content
Tujuan: Gateway OpenClaw berjalan pada mesin Fly.io dengan penyimpanan persisten, HTTPS otomatis, dan akses Discord/saluran.

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

  1. Kloning repositori, sesuaikan fly.toml
  2. Buat aplikasi + volume, atur rahasia
  3. Deploy dengan fly deploy
  4. Masuk melalui SSH untuk membuat konfigurasi, atau gunakan UI Kontrol
1

Buat aplikasi Fly

Pilih wilayah yang dekat dengan Anda. Opsi umum: lhr (London), iad (Virginia), sjc (San Jose).
2

Konfigurasikan fly.toml

Edit 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).
Titik masuk image Docker OpenClaw adalah 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

Pengikatan non-loopback (--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

Deployment pertama membangun image Docker. Verifikasi setelah deployment:
Log startup Gateway mencatat 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
Mulai ulang untuk menerapkan:
6

Akses Gateway

UI Kontrol

Atau kunjungi https://my-openclaw.fly.dev/.Lakukan autentikasi dengan rahasia bersama yang dikonfigurasi: token gateway dari OPENCLAW_GATEWAY_TOKEN, atau kata sandi Anda jika Anda beralih ke autentikasi kata sandi.

Log

Konsol SSH

Pemecahan masalah

”Aplikasi tidak mendengarkan pada alamat yang diharapkan”

Gateway terikat ke 127.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: pastikan internal_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:
Atau perbarui mesin yang sudah ada:
512MB terlalu kecil. 1GB mungkin dapat digunakan, tetapi bisa mengalami OOM saat beban tinggi atau dengan pencatatan log mendetail. 2GB direkomendasikan.

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:
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: pastikan OPENCLAW_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 di https://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

Atau konversikan deployment yang sudah ada:
Setelah ini, fly ips list seharusnya hanya menampilkan IP bertipe private:

Mengakses deployment privat

Opsi 1: proksi lokal (paling sederhana)
Opsi 2: VPN WireGuard
Opsi 3: hanya SSH

Webhook dengan deployment privat

Untuk callback Webhook (Twilio, Telnyx, dan sebagainya) tanpa paparan publik:
  1. tunnel ngrok: jalankan ngrok di dalam kontainer, atau sebagai sidecar
  2. Tailscale Funnel: ekspos path tertentu melalui Tailscale
  3. Hanya keluar: beberapa penyedia (Twilio) berfungsi untuk panggilan keluar tanpa Webhook
Contoh konfigurasi panggilan suara dengan ngrok, di bawah plugins.entries.voice-call.config:
Tunnel ngrok berjalan di dalam kontainer dan menyediakan URL Webhook publik tanpa mengekspos aplikasi Fly itu sendiri. Atur 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

Terkait