Skip to main content
लक्ष्य: स्थायी स्टोरेज, स्वचालित HTTPS और Discord/चैनल एक्सेस के साथ Fly.io मशीन पर चलने वाला OpenClaw Gateway।

आपको क्या चाहिए

  • flyctl CLI इंस्टॉल किया हुआ
  • Fly.io खाता (निःशुल्क टियर काम करता है)
  • मॉडल प्रमाणीकरण: आपके चुने हुए मॉडल प्रदाता की API कुंजी
  • चैनल क्रेडेंशियल: Discord बॉट टोकन, Telegram टोकन आदि।

शुरुआती लोगों के लिए त्वरित तरीका

  1. रेपो क्लोन करें, fly.toml को अनुकूलित करें
  2. ऐप और वॉल्यूम बनाएँ, सीक्रेट सेट करें
  3. fly deploy के साथ डिप्लॉय करें
  4. कॉन्फ़िग बनाने के लिए SSH से कनेक्ट करें या Control UI का उपयोग करें
1

Fly ऐप बनाएँ

अपने निकट का क्षेत्र चुनें। सामान्य विकल्प: lhr (लंदन), iad (वर्जीनिया), sjc (सैन होज़े)।
2

fly.toml कॉन्फ़िगर करें

अपने ऐप के नाम और आवश्यकताओं से मिलाने के लिए fly.toml संपादित करें। रेपो में ट्रैक किया गया fly.toml नीचे दिखाया गया सार्वजनिक टेम्पलेट है; deploy/fly.private.toml अधिक सुरक्षित, सार्वजनिक-IP-रहित संस्करण है (निजी डिप्लॉयमेंट देखें)।
OpenClaw Docker इमेज का एंट्रीपॉइंट 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

डिप्लॉय करें

पहला डिप्लॉय Docker इमेज बनाता है। डिप्लॉयमेंट के बाद सत्यापित करें:
HTTP/WebSocket लिसनर शुरू होने पर Gateway स्टार्टअप लॉग एक बार 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
लागू करने के लिए पुनः आरंभ करें:
6

Gateway एक्सेस करें

Control UI

या https://my-openclaw.fly.dev/ पर जाएँ।कॉन्फ़िगर किए गए साझा सीक्रेट से प्रमाणीकरण करें: OPENCLAW_GATEWAY_TOKEN का Gateway टोकन, या यदि आपने पासवर्ड प्रमाणीकरण अपनाया है तो आपका पासवर्ड।

लॉग

SSH कंसोल

समस्या निवारण

”ऐप अपेक्षित पते पर नहीं सुन रहा है”

Gateway 0.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 में मेमोरी बढ़ाएँ:
या किसी मौजूदा मशीन को अपडेट करें:
512MB बहुत कम है। 1GB काम कर सकता है, लेकिन लोड या विस्तृत लॉगिंग के दौरान OOM हो सकता है। 2GB अनुशंसित है।

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 आवंटित करता है, इसलिए आपका Gateway https://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: स्थानीय प्रॉक्सी (सबसे सरल)
विकल्प 2: WireGuard VPN
विकल्प 3: केवल SSH

निजी डिप्लॉयमेंट के साथ Webhook

सार्वजनिक रूप से उजागर किए बिना Webhook कॉलबैक (Twilio, Telnyx आदि) के लिए:
  1. ngrok टनल: ngrok को कंटेनर के अंदर या साइडकार के रूप में चलाएँ
  2. Tailscale Funnel: Tailscale के माध्यम से विशिष्ट पाथ उजागर करें
  3. केवल आउटबाउंड: कुछ प्रदाता (Twilio) Webhook के बिना आउटबाउंड कॉल के लिए काम करते हैं
plugins.entries.voice-call.config के अंतर्गत ngrok के साथ वॉइस-कॉल कॉन्फ़िगरेशन का उदाहरण:
ngrok टनल कंटेनर के अंदर चलती है और Fly ऐप को स्वयं उजागर किए बिना एक सार्वजनिक Webhook URL प्रदान करती है। फ़ॉरवर्ड किए गए होस्ट हेडर स्वीकार करने के लिए 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 की मूल्य-निर्धारण जानकारी देखें।

अगले चरण

संबंधित