Deployment Fly.io
Tujuan: Gateway OpenClaw berjalan di mesin Fly.io dengan penyimpanan persisten, HTTPS otomatis, dan akses Discord/channel.Yang Anda butuhkan
- flyctl CLI sudah terinstal
- Akun Fly.io (tier gratis bisa digunakan)
- Auth model: kunci API untuk provider model pilihan Anda
- Kredensial channel: token bot Discord, token Telegram, dll.
Jalur cepat untuk pemula
- Clone repo → sesuaikan
fly.toml - Buat app + volume → set secret
- Deploy dengan
fly deploy - SSH masuk untuk membuat konfigurasi atau gunakan UI Kontrol
Buat app Fly
lhr (London), iad (Virginia), sjc (San Jose).Konfigurasikan fly.toml
Edit Pengaturan utama:
fly.toml agar sesuai dengan nama app dan kebutuhan Anda.Catatan keamanan: Konfigurasi default mengekspos URL publik. Untuk deployment yang diperkeras tanpa IP publik, lihat Deployment Privat atau gunakan fly.private.toml.| Setting | Mengapa |
|---|---|
--bind lan | Melakukan bind ke 0.0.0.0 agar proxy Fly dapat menjangkau gateway |
--allow-unconfigured | Memulai tanpa file konfigurasi (Anda akan membuatnya nanti) |
internal_port = 3000 | Harus cocok dengan --port 3000 (atau OPENCLAW_GATEWAY_PORT) untuk health check Fly |
memory = "2048mb" | 512MB terlalu kecil; disarankan 2GB |
OPENCLAW_STATE_DIR = "/data" | Menyimpan state secara persisten di volume |
Set secret
- Bind non-loopback (
--bind lan) memerlukan jalur auth gateway yang valid. Contoh Fly.io ini menggunakanOPENCLAW_GATEWAY_TOKEN, tetapigateway.auth.passwordatau deploymenttrusted-proxynon-loopback yang dikonfigurasi dengan benar juga memenuhi syarat tersebut. - Perlakukan token ini seperti kata sandi.
- Utamakan env var daripada file konfigurasi untuk semua kunci API dan token. Ini menjaga secret tetap di luar
openclaw.jsonagar tidak terekspos atau tercatat secara tidak sengaja.
Deploy
Buat file konfigurasi
SSH ke mesin untuk membuat konfigurasi yang sesuai:Buat direktori dan file konfigurasi:Catatan: Dengan
OPENCLAW_STATE_DIR=/data, path konfigurasi adalah /data/openclaw.json.Catatan: Token Discord dapat berasal dari salah satu sumber berikut:- Variabel lingkungan:
DISCORD_BOT_TOKEN(disarankan untuk secret) - File konfigurasi:
channels.discord.token
DISCORD_BOT_TOKEN secara otomatis.Restart agar diterapkan:Akses Gateway
Pemecahan masalah
”App is not listening on expected address”
Gateway melakukan bind ke127.0.0.1 alih-alih 0.0.0.0.
Perbaikan: Tambahkan --bind lan ke perintah process Anda di fly.toml.
Health check gagal / connection refused
Fly tidak dapat menjangkau gateway di port yang dikonfigurasi. Perbaikan: Pastikaninternal_port cocok dengan port gateway (set --port 3000 atau OPENCLAW_GATEWAY_PORT=3000).
OOM / Masalah memori
Kontainer terus restart atau dihentikan. Tanda-tandanya:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration, atau restart diam-diam.
Perbaikan: Tingkatkan memori di fly.toml:
Masalah lock Gateway
Gateway menolak untuk mulai dengan error “already running”. Ini terjadi saat kontainer restart tetapi file lock PID tetap ada di volume. Perbaikan: Hapus file lock:/data/gateway.*.lock (bukan di subdirektori).
Konfigurasi tidak terbaca
--allow-unconfigured hanya melewati guard saat startup. Itu tidak membuat atau memperbaiki /data/openclaw.json, jadi pastikan konfigurasi nyata Anda ada dan menyertakan gateway.mode="local" saat Anda menginginkan gateway lokal normal untuk dijalankan.
Verifikasi bahwa konfigurasi ada:
Menulis konfigurasi melalui SSH
Perintahfly ssh console -C tidak mendukung shell redirection. Untuk menulis file konfigurasi:
fly sftp mungkin gagal jika file sudah ada. Hapus dulu:
State tidak persisten
Jika Anda kehilangan profil auth, state channel/provider, atau sesi setelah restart, direktori state sedang ditulis ke filesystem kontainer. Perbaikan: PastikanOPENCLAW_STATE_DIR=/data disetel di fly.toml lalu deploy ulang.
Pembaruan
Memperbarui perintah mesin
Jika Anda perlu mengubah perintah startup tanpa deploy ulang penuh:fly deploy, perintah mesin dapat di-reset ke yang ada di fly.toml. Jika Anda membuat perubahan manual, terapkan kembali setelah deploy.
Deployment Privat (Diperkeras)
Secara default, Fly mengalokasikan IP publik, sehingga gateway Anda dapat diakses dihttps://your-app.fly.dev. Ini nyaman, tetapi berarti deployment Anda dapat ditemukan oleh pemindai internet (Shodan, Censys, dll.).
Untuk deployment yang diperkeras dengan tanpa paparan publik, gunakan template privat.
Kapan menggunakan deployment privat
- Anda hanya melakukan panggilan/pesan keluar (tanpa webhook masuk)
- Anda menggunakan tunnel ngrok atau Tailscale untuk callback webhook apa pun
- Anda mengakses gateway melalui SSH, proxy, atau WireGuard alih-alih browser
- Anda ingin deployment tersembunyi dari pemindai internet
Penyiapan
Gunakanfly.private.toml alih-alih konfigurasi standar:
fly ips list seharusnya hanya menampilkan IP bertipe private:
Mengakses deployment privat
Karena tidak ada URL publik, gunakan salah satu metode berikut: Opsi 1: Proxy lokal (paling sederhana)Webhook dengan deployment privat
Jika Anda memerlukan callback webhook (Twilio, Telnyx, dll.) tanpa paparan publik:- Tunnel ngrok - Jalankan ngrok di dalam kontainer atau sebagai sidecar
- Tailscale Funnel - Ekspos path tertentu melalui Tailscale
- Hanya outbound - Beberapa provider (Twilio) berfungsi baik untuk panggilan keluar tanpa webhook
webhookSecurity.allowedHosts ke hostname tunnel publik agar header host yang diteruskan dapat diterima.
Manfaat keamanan
| Aspect | Publik | Privat |
|---|---|---|
| Pemindai internet | Dapat ditemukan | Tersembunyi |
| Serangan langsung | Mungkin | Diblokir |
| Akses UI Kontrol | Browser | Proxy/VPN |
| Pengiriman webhook | Langsung | Via tunnel |
Catatan
- Fly.io menggunakan arsitektur x86 (bukan ARM)
- Dockerfile kompatibel dengan kedua arsitektur
- Untuk onboarding WhatsApp/Telegram, gunakan
fly ssh console - Data persisten berada di volume di
/data - Signal memerlukan Java +
signal-cli; gunakan image kustom dan pertahankan memori di 2GB+.
Biaya
Dengan konfigurasi yang direkomendasikan (shared-cpu-2x, RAM 2GB):
- ~US$10-15/bulan tergantung penggunaan
- Tier gratis mencakup sejumlah kuota
Langkah selanjutnya
- Siapkan channel perpesanan: Channels
- Konfigurasikan Gateway: Konfigurasi Gateway
- Jaga OpenClaw tetap terbaru: Updating