Fly.io पर परिनियोजन
लक्ष्य: स्थायी स्टोरेज, स्वचालित HTTPS, और Discord/चैनल एक्सेस के साथ Fly.io मशीन पर चल रहा OpenClaw Gateway।आपको क्या चाहिए
- flyctl CLI स्थापित
- Fly.io खाता (फ्री टियर काम करता है)
- मॉडल प्रमाणीकरण: Anthropic API key (या अन्य प्रदाता कुंजियाँ)
- चैनल क्रेडेंशियल्स: Discord बॉट टोकन, Telegram टोकन, आदि
शुरुआती त्वरित मार्ग
- रिपॉज़िटरी क्लोन करें →
fly.tomlको अनुकूलित करें - ऐप + वॉल्यूम बनाएँ → सीक्रेट्स सेट करें
fly deployके साथ डिप्लॉय करें- कॉन्फ़िग बनाने के लिए SSH करें या Control UI का उपयोग करें
1) Fly ऐप बनाएँ
- टिप: अपने नज़दीकी क्षेत्र का चयन करें। 6. सामान्य विकल्प:
lhr(लंदन),iad(वर्जीनिया),sjc(सैन होज़े)।
2. fly.toml कॉन्फ़िगर करें
अपने ऐप नाम और आवश्यकताओं से मेल खाने के लिएfly.toml संपादित करें।
- सुरक्षा नोट: डिफ़ॉल्ट कॉन्फ़िग एक सार्वजनिक URL को एक्सपोज़ करता है। 8. बिना सार्वजनिक IP के हार्डन किए गए डिप्लॉयमेंट के लिए, Private Deployment देखें या
fly.private.tomlका उपयोग करें।
| सेटिंग | कारण |
|---|---|
--bind lan | 0.0.0.0 से बाइंड करता है ताकि Fly का प्रॉक्सी Gateway तक पहुँच सके |
--allow-unconfigured | बिना कॉन्फ़िग फ़ाइल के शुरू करता है (आप बाद में एक बनाएँगे) |
internal_port = 3000 | Fly हेल्थ चेक्स के लिए --port 3000 (या OPENCLAW_GATEWAY_PORT) से मेल खाना चाहिए |
memory = "2048mb" | 512MB बहुत कम है; 2GB अनुशंसित |
OPENCLAW_STATE_DIR = "/data" | वॉल्यूम पर स्टेट को स्थायी बनाता है |
3. सीक्रेट्स सेट करें
- नॉन-लूपबैक बाइंड्स (
--bind lan) के लिए सुरक्षा हेतुOPENCLAW_GATEWAY_TOKENआवश्यक है। - इन टोकनों को पासवर्ड की तरह संभालें।
-
- सभी API कुंजियों और टोकनों के लिए कॉन्फ़िग फ़ाइल की बजाय env vars को प्राथमिकता दें। 10. इससे सीक्रेट्स
openclaw.jsonसे बाहर रहते हैं, जहाँ वे गलती से एक्सपोज़ या लॉग हो सकते हैं।
- सभी API कुंजियों और टोकनों के लिए कॉन्फ़िग फ़ाइल की बजाय env vars को प्राथमिकता दें। 10. इससे सीक्रेट्स
4. डिप्लॉय
- पहली डिप्लॉयमेंट Docker इमेज बनाती है (~2-3 मिनट)। 12. बाद की डिप्लॉयमेंट तेज़ होती हैं।
5. कॉन्फ़िग फ़ाइल बनाएँ
उचित कॉन्फ़िग बनाने के लिए मशीन में SSH करें:OPENCLAW_STATE_DIR=/data के साथ, कॉन्फ़िग पथ /data/openclaw.json है।
टिप्पणी: Discord टोकन इनमें से किसी एक से आ सकता है:
- पर्यावरण चर:
DISCORD_BOT_TOKEN(सीक्रेट्स के लिए अनुशंसित) - कॉन्फ़िग फ़ाइल:
channels.discord.token
- यदि env var का उपयोग कर रहे हैं, तो कॉन्फ़िग में टोकन जोड़ने की ज़रूरत नहीं है। 14. गेटवे
DISCORD_BOT_TOKENको अपने आप पढ़ता है।
6. Gateway तक पहुँच
कंट्रोल UI
ब्राउज़र में खोलें:https://my-openclaw.fly.dev/ पर जाएँ
प्रमाणीकरण के लिए अपना gateway टोकन (जो OPENCLAW_GATEWAY_TOKEN से मिला) पेस्ट करें।
लॉग्स
SSH कंसोल
समस्या-निवारण
”App अपेक्षित पते पर सुन नहीं रहा है”
Gateway0.0.0.0 के बजाय 127.0.0.1 से बाइंड हो रहा है।
समाधान: fly.toml में अपने प्रोसेस कमांड में --bind lan जोड़ें।
हेल्थ चेक्स विफल / कनेक्शन अस्वीकृत
Fly कॉन्फ़िगर किए गए पोर्ट पर Gateway तक नहीं पहुँच पा रहा है। समाधान: सुनिश्चित करें किinternal_port Gateway पोर्ट से मेल खाता है ( --port 3000 या OPENCLAW_GATEWAY_PORT=3000 सेट करें)।
OOM / मेमोरी समस्याएँ
- कंटेनर बार-बार रीस्टार्ट हो रहा है या किल हो रहा है। 16. संकेत:
SIGABRT,v8::internal::Runtime_AllocateInYoungGeneration, या साइलेंट रीस्टार्ट।
fly.toml में मेमोरी बढ़ाएँ:
- नोट: 512MB बहुत छोटा है। 18. 1GB काम कर सकता है लेकिन लोड के तहत या verbose लॉगिंग के साथ OOM हो सकता है। 2GB की सिफ़ारिश की जाती है।
Gateway लॉक समस्याएँ
Gateway “already running” त्रुटियों के साथ शुरू होने से मना करता है। यह तब होता है जब कंटेनर रीस्टार्ट होता है लेकिन PID लॉक फ़ाइल वॉल्यूम पर बनी रहती है। समाधान: लॉक फ़ाइल हटाएँ:/data/gateway.*.lock पर है (किसी सबडायरेक्टरी में नहीं)।
कॉन्फ़िग पढ़ा नहीं जा रहा
- यदि
--allow-unconfiguredका उपयोग कर रहे हैं, तो गेटवे एक न्यूनतम कॉन्फ़िग बनाता है। आपका custom config/data/openclaw.jsonपर restart के बाद पढ़ा जाना चाहिए।
SSH के माध्यम से कॉन्फ़िग लिखना
fly ssh console -Cकमांड शेल रीडायरेक्शन को सपोर्ट नहीं करता। 23. कॉन्फ़िग फ़ाइल लिखने के लिए:
- नोट: यदि फ़ाइल पहले से मौजूद है, तो
fly sftpअसफल हो सकता है। 25. पहले डिलीट करें:
स्टेट स्थायी नहीं रह रहा
यदि रीस्टार्ट के बाद क्रेडेंशियल्स या सत्र खो जाते हैं, तो स्टेट डायरेक्टरी कंटेनर फ़ाइलसिस्टम पर लिख रही है। समाधान: सुनिश्चित करें किfly.toml में OPENCLAW_STATE_DIR=/data सेट है और पुनः डिप्लॉय करें।
अपडेट्स
मशीन कमांड अपडेट करना
पूर्ण पुनः डिप्लॉय के बिना स्टार्टअप कमांड बदलने के लिए:fly deploy के बाद, machine command fly.toml में जो है उसी पर reset हो सकता है। 27. यदि आपने मैन्युअल बदलाव किए हैं, तो डिप्लॉय के बाद उन्हें दोबारा लागू करें।
निजी परिनियोजन (सुदृढ़)
डिफ़ॉल्ट रूप से, Fly public IPs allocate करता है, जिससे आपका gatewayhttps://your-app.fly.dev पर accessible हो जाता है। 29. यह सुविधाजनक है लेकिन इसका मतलब है कि आपका डिप्लॉयमेंट इंटरनेट स्कैनरों (Shodan, Censys, आदि) द्वारा खोजा जा सकता है।
बिना किसी सार्वजनिक एक्सपोज़र के सुदृढ़ परिनियोजन के लिए, निजी टेम्पलेट का उपयोग करें।
निजी परिनियोजन कब उपयोग करें
- आप केवल आउटबाउंड कॉल/संदेश करते हैं (कोई इनबाउंड वेबहुक नहीं)
- किसी भी वेबहुक कॉलबैक के लिए ngrok या Tailscale टनल का उपयोग करते हैं
- ब्राउज़र के बजाय SSH, प्रॉक्सी, या WireGuard के माध्यम से Gateway एक्सेस करते हैं
- परिनियोजन को इंटरनेट स्कैनर्स से छिपा रखना चाहते हैं
सेटअप
मानक कॉन्फ़िग के बजायfly.private.toml का उपयोग करें:
fly ips list में केवल private प्रकार का IP दिखना चाहिए:
निजी परिनियोजन तक पहुँच
चूँकि कोई सार्वजनिक URL नहीं है, इनमें से किसी एक विधि का उपयोग करें: विकल्प 1: स्थानीय प्रॉक्सी (सबसे सरल)निजी परिनियोजन के साथ वेबहुक्स
- यदि आपको वेबहुक कॉलबैक चाहिए (Twilio, Telnyx, आदि) public exposure के बिना:
- ngrok टनल — कंटेनर के भीतर या साइडकार के रूप में ngrok चलाएँ
- Tailscale Funnel — Tailscale के माध्यम से विशिष्ट पथ उजागर करें
- केवल आउटबाउंड — कुछ प्रदाता (Twilio) वेबहुक्स के बिना भी आउटबाउंड कॉल्स के लिए ठीक काम करते हैं
- ngrok टनल कंटेनर के अंदर चलती है और Fly ऐप को स्वयं एक्सपोज़ किए बिना एक सार्वजनिक वेबहुक URL प्रदान करती है। 33. फ़ॉरवर्ड किए गए होस्ट हेडर्स स्वीकार करने के लिए
webhookSecurity.allowedHostsको सार्वजनिक टनल होस्टनेम पर सेट करें।
सुरक्षा लाभ
| पहलू | सार्वजनिक | निजी |
|---|---|---|
| इंटरनेट स्कैनर्स | खोजने योग्य | छिपा हुआ |
| प्रत्यक्ष हमले | संभव | अवरुद्ध |
| Control UI एक्सेस | ब्राउज़र | प्रॉक्सी/VPN |
| वेबहुक डिलीवरी | प्रत्यक्ष | टनल के माध्यम से |
टिप्पणियाँ
- Fly.io x86 आर्किटेक्चर का उपयोग करता है (ARM नहीं)
- Dockerfile दोनों आर्किटेक्चर के साथ संगत है
- WhatsApp/Telegram ऑनबोर्डिंग के लिए
fly ssh consoleका उपयोग करें - स्थायी डेटा वॉल्यूम पर
/dataमें रहता है - Signal के लिए Java + signal-cli आवश्यक है; कस्टम इमेज का उपयोग करें और मेमोरी 2GB+ रखें।
लागत
अनुशंसित कॉन्फ़िग (shared-cpu-2x, 2GB RAM) के साथ:
- उपयोग के अनुसार ~$10–15/माह
- फ्री टियर में कुछ अलाउंस शामिल हैं