आपको क्या चाहिए
- flyctl CLI इंस्टॉल किया हुआ
- Fly.io खाता (निःशुल्क टियर काम करता है)
- मॉडल प्रमाणीकरण: आपके चुने हुए मॉडल प्रदाता की API कुंजी
- चैनल क्रेडेंशियल: Discord बॉट टोकन, Telegram टोकन आदि।
शुरुआती लोगों के लिए त्वरित तरीका
- रेपो क्लोन करें,
fly.tomlको अनुकूलित करें - ऐप और वॉल्यूम बनाएँ, सीक्रेट सेट करें
fly deployके साथ डिप्लॉय करें- कॉन्फ़िग बनाने के लिए SSH से कनेक्ट करें या Control UI का उपयोग करें
1
Fly ऐप बनाएँ
lhr (लंदन), iad (वर्जीनिया), sjc (सैन होज़े)।2
fly.toml कॉन्फ़िगर करें
अपने ऐप के नाम और आवश्यकताओं से मिलाने के लिए OpenClaw Docker इमेज का एंट्रीपॉइंट
fly.toml संपादित करें। रेपो में ट्रैक किया गया fly.toml नीचे दिखाया गया सार्वजनिक टेम्पलेट है; deploy/fly.private.toml अधिक सुरक्षित, सार्वजनिक-IP-रहित संस्करण है (निजी डिप्लॉयमेंट देखें)।tini है, जो डिफ़ॉल्ट रूप से node openclaw.mjs gateway चलाता है। Fly [processes], Docker के CMD को बदल देता है (यहाँ यह node dist/index.js gateway ..., उसी कंपाइल किए गए एंट्रीपॉइंट, को सीधे चलाता है), लेकिन ENTRYPOINT को नहीं बदलता, इसलिए प्रक्रिया अब भी tini के अंतर्गत चलती है।मुख्य सेटिंग्स:3
सीक्रेट सेट करें
--bind lan) के लिए एक मान्य Gateway प्रमाणीकरण पथ आवश्यक है। यह उदाहरण OPENCLAW_GATEWAY_TOKEN का उपयोग करता है, लेकिन gateway.auth.password या सही ढंग से कॉन्फ़िगर किया गया गैर-लूपबैक विश्वसनीय-प्रॉक्सी डिप्लॉयमेंट भी आवश्यकता पूरी करता है। SecretRef अनुबंध के लिए सीक्रेट प्रबंधन देखें।इन टोकनों को पासवर्ड की तरह सुरक्षित रखें। API कुंजियों और टोकनों के लिए कॉन्फ़िग फ़ाइल के बजाय env vars/fly secrets को प्राथमिकता दें, ताकि सीक्रेट openclaw.json से बाहर रहें।4
डिप्लॉय करें
gateway ready दर्ज करते हैं। Fly की अपनी स्वास्थ्य जाँच fly.toml के अनुसार internal_port = 3000 पर नज़र रखती है; इमेज का Docker HEALTHCHECK निर्देश अतिरिक्त रूप से उसके डिफ़ॉल्ट पोर्ट 18789 पर /healthz को पोल करता है, जिसका यहाँ उपयोग नहीं होता क्योंकि यह डिप्लॉयमेंट Gateway को --port 3000 पर ओवरराइड करता है।5
कॉन्फ़िग फ़ाइल बनाएँ
उचित कॉन्फ़िग बनाने के लिए SSH से मशीन में कनेक्ट करें:
OPENCLAW_STATE_DIR=/data के साथ, कॉन्फ़िग पथ /data/openclaw.json है।https://my-openclaw.fly.dev को अपने वास्तविक Fly ऐप ओरिजिन से बदलें। Gateway स्टार्टअप रनटाइम के --bind और --port मानों से स्थानीय Control UI ओरिजिन आरंभिक रूप से भरता है, ताकि कॉन्फ़िग मौजूद होने से पहले पहला बूट आगे बढ़ सके, लेकिन Fly के माध्यम से ब्राउज़र एक्सेस के लिए अब भी gateway.controlUi.allowedOrigins में सटीक HTTPS ओरिजिन सूचीबद्ध होना आवश्यक है।Discord टोकन इनमें से किसी भी स्रोत से आ सकता है:- पर्यावरण चर
DISCORD_BOT_TOKEN(सीक्रेट के लिए अनुशंसित); इसे कॉन्फ़िग में जोड़ने की आवश्यकता नहीं है, Gateway इसे स्वचालित रूप से पढ़ता है - कॉन्फ़िग फ़ाइल
channels.discord.token
समस्या निवारण
”ऐप अपेक्षित पते पर नहीं सुन रहा है”
Gateway0.0.0.0 के बजाय 127.0.0.1 से बाइंड हो रहा है।
समाधान: fly.toml में अपने प्रक्रिया कमांड में --bind lan जोड़ें।
स्वास्थ्य जाँच विफल / कनेक्शन अस्वीकृत
Fly कॉन्फ़िगर किए गए पोर्ट पर Gateway तक नहीं पहुँच सकता। समाधान: सुनिश्चित करें किinternal_port, Gateway पोर्ट (--port 3000 या OPENCLAW_GATEWAY_PORT=3000) से मेल खाता है।
OOM / मेमोरी समस्याएँ
कंटेनर बार-बार पुनः आरंभ हो रहा है या बंद किया जा रहा है। संकेत:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration, या बिना किसी संदेश के पुनः आरंभ होना।
समाधान: fly.toml में मेमोरी बढ़ाएँ:
Gateway लॉक समस्याएँ
कंटेनर पुनः आरंभ होने के बाद Gateway “पहले से चल रहा है” त्रुटियों के कारण शुरू होने से मना करता है। रनटाइम लॉक फ़ाइलें<tmpdir>/openclaw-<uid>/gateway.<hash>.lock
और gateway.state.<hash>.lock (Linux:
/tmp/openclaw-<uid>/gateway.*.lock) पर रहती हैं, स्थायी /data वॉल्यूम पर नहीं, इसलिए
कंटेनर को पूरी तरह पुनः आरंभ करने पर वे सामान्यतः शेष
कंटेनर फ़ाइल सिस्टम के साथ साफ़ हो जाती हैं। यदि कोई लॉक बना रहता है (उदाहरण के लिए ऐसा fly machine restart
जो कंटेनर फ़ाइल सिस्टम को सुरक्षित रखता है) और स्टार्टअप को अवरुद्ध करता है, तो उसे
मैन्युअल रूप से हटाएँ:
कॉन्फ़िग पढ़ा नहीं जा रहा
--allow-unconfigured केवल स्टार्टअप सुरक्षा जाँच को बायपास करता है। यह /data/openclaw.json को बनाता या सुधारता नहीं है, इसलिए सुनिश्चित करें कि आपका वास्तविक कॉन्फ़िग मौजूद है और सामान्य स्थानीय Gateway स्टार्ट के लिए उसमें "gateway": { "mode": "local" } शामिल है।
सत्यापित करें कि कॉन्फ़िग मौजूद है:
SSH के माध्यम से कॉन्फ़िग लिखना
fly ssh console -C शेल रीडायरेक्शन का समर्थन नहीं करता। कॉन्फ़िग फ़ाइल लिखने के लिए:
fly sftp विफल हो सकता है; पहले उसे हटाएँ:
स्थिति स्थायी नहीं रह रही
यदि पुनः आरंभ करने के बाद आपके प्रमाणीकरण प्रोफ़ाइल, चैनल/प्रदाता स्थिति या सत्र खो जाते हैं, तो स्टेट डायरेक्टरी वॉल्यूम के बजाय कंटेनर फ़ाइल सिस्टम में लिख रही है। समाधान: सुनिश्चित करें किOPENCLAW_STATE_DIR=/data, fly.toml में सेट है और फिर से डिप्लॉय करें।
अपडेट करना
git pull + fly deploy पर्यवेक्षित तरीका है: यह Dockerfile से इमेज को फिर से बनाता है, इसलिए CLI/Gateway संस्करण, आधार OS इमेज और Dockerfile में हुए सभी बदलाव एक साथ अपडेट होते हैं। चल रहे कंटेनर के अंदर openclaw update वही प्रक्रिया नहीं है, क्योंकि इमेज Docker द्वारा निर्मित dist/ ट्री के रूप में आती है, जिसमें उसके द्वारा पहचानने के लिए न तो .git चेकआउट होता है, न ही npm-प्रबंधित वैश्विक इंस्टॉलेशन; VM-जैसे इंस्टॉलेशन पर उस प्रक्रिया के लिए अपडेट करना देखें।
मशीन कमांड अपडेट करना
पूर्ण पुनः डिप्लॉय किए बिना स्टार्टअप कमांड बदलने के लिए:fly deploy मशीन कमांड को fly.toml में मौजूद मान पर रीसेट कर देता है; पुनः डिप्लॉय करने के बाद मैन्युअल बदलाव फिर से लागू करें।
निजी डिप्लॉयमेंट (अधिक सुरक्षित)
डिफ़ॉल्ट रूप से Fly सार्वजनिक IP आवंटित करता है, इसलिए आपका Gatewayhttps://your-app.fly.dev पर उपलब्ध होता है और इंटरनेट स्कैनर (Shodan, Censys आदि) उसे खोज सकते हैं।
बिना सार्वजनिक IP वाले अधिक सुरक्षित डिप्लॉयमेंट के लिए deploy/fly.private.toml का उपयोग करें: इसमें [http_service] शामिल नहीं है, इसलिए कोई सार्वजनिक इनग्रेस आवंटित नहीं होता।
निजी डिप्लॉयमेंट का उपयोग कब करें
- केवल आउटबाउंड कॉल/संदेश (कोई इनबाउंड Webhook नहीं)
- ngrok या Tailscale टनल किसी भी Webhook कॉलबैक को संभालती हैं
- Gateway एक्सेस ब्राउज़र के बजाय SSH, प्रॉक्सी या WireGuard के माध्यम से होता है
- डिप्लॉयमेंट को इंटरनेट स्कैनरों से छिपाया जाना चाहिए
सेटअप
fly ips list में केवल private प्रकार का IP दिखाई देना चाहिए:
निजी डिप्लॉयमेंट तक पहुँचना
विकल्प 1: स्थानीय प्रॉक्सी (सबसे सरल)निजी डिप्लॉयमेंट के साथ Webhook
सार्वजनिक रूप से उजागर किए बिना Webhook कॉलबैक (Twilio, Telnyx आदि) के लिए:- ngrok टनल: ngrok को कंटेनर के अंदर या साइडकार के रूप में चलाएँ
- Tailscale Funnel: Tailscale के माध्यम से विशिष्ट पाथ उजागर करें
- केवल आउटबाउंड: कुछ प्रदाता (Twilio) Webhook के बिना आउटबाउंड कॉल के लिए काम करते हैं
plugins.entries.voice-call.config के अंतर्गत ngrok के साथ वॉइस-कॉल कॉन्फ़िगरेशन का उदाहरण:
webhookSecurity.allowedHosts को टनल होस्टनेम पर सेट करें।
सुरक्षा संबंधी समझौते
टिप्पणियाँ
- Fly.io x86 आर्किटेक्चर का उपयोग करता है; Dockerfile x86 और ARM दोनों के साथ संगत है।
- WhatsApp/Telegram ऑनबोर्डिंग के लिए,
fly ssh consoleका उपयोग करें। - स्थायी डेटा
/dataपर स्थित वॉल्यूम में रहता है। - Signal के लिए इमेज पर signal-cli (Java-आधारित CLI) आवश्यक है; कस्टम इमेज का उपयोग करें और मेमोरी 2GB+ रखें।
लागत
अनुशंसित कॉन्फ़िगरेशन (shared-cpu-2x, 2GB RAM) के साथ, उपयोग के आधार पर लगभग $10-15/माह की अपेक्षा करें; मुफ़्त टियर कुछ आधारभूत भत्ते को कवर करता है। वर्तमान दरों के लिए Fly.io की मूल्य-निर्धारण जानकारी देखें।
अगले चरण
- मैसेजिंग चैनल सेट अप करें: चैनल
- Gateway कॉन्फ़िगर करें: Gateway कॉन्फ़िगरेशन
- OpenClaw को अद्यतित रखें: अपडेट करना