फ्री इन्फ्रास्ट्रक्चर पर फुल-स्टैक ऐप्स को डिप्लॉय करना

हमने G3HUB के लिए एक लर्निंग मैनेजमेंट सिस्टम बनाया। स्टैक: React 18, Node.js 20, और PostgreSQL 15.

हमारे पास कोई VPS नहीं था। हमारे पास क्लाउड बजट भी नहीं था। हमारे पास केवल एक cPanel शेयर्ड होस्टिंग अकाउंट और एक डेडलाइन थी।

अधिकांश ट्यूटोरियल यह मानकर चलते हैं कि आपके पास एक डेडिकेटेड सर्वर है। हमें $0 प्रति माह में विभिन्न सेवाओं को एक-दूसरे से जोड़ने का तरीका खोजना पड़ा।

आर्किटेक्चर

• Frontend: React + Vite (cPanel पर होस्ट किया गया) • Backend: Node.js + Express (Render Free Tier पर होस्ट किया गया) • Database: PostgreSQL (Supabase Free Tier पर होस्ट किया गया)

बाधाएं और समाधान

1. शेयर्ड होस्टिंग डेटाबेस को ब्लॉक करती है हमने cPanel पर Node.js API चलाने की कोशिश की। यह विफल रहा क्योंकि होस्ट ने पोर्ट 5432 पर PostgreSQL के लिए आउटबाउंड कनेक्शन को ब्लॉक कर दिया था। समाधान: API को Render पर ले जाएं। Render इन कनेक्शनों की अनुमति देता है।

2. मोनोरेपो डिप्लॉयमेंट एरर्स Render हमारे pnpm वर्कस्पेस डिपेंडेंसी जैसे @workspace/db को नहीं समझ सका। समाधान: हमने सब कुछ एक सिंगल 6.4MB फ़ाइल में बंडल करने के लिए esbuild का उपयोग किया। फिर हमने केवल बाहरी डिपेंडेंसी के साथ एक मिनिमल package.json का उपयोग किया। इससे API सेल्फ-कंटेन्ड (self-contained) हो गया।

3. CORS और प्रॉक्सी की समस्या शेयर्ड होस्टिंग पर Apache mod_proxy प्रतिबंधित था। हम आसानी से फ्रंटएंड से Render तक API कॉल फॉरवर्ड नहीं कर पा रहे थे। समाधान: हमने एक PHP cURL प्रॉक्सी का उपयोग किया। फ्रंटएंड लोकल PHP स्क्रिप्ट को कॉल करता है। PHP स्क्रिप्ट रिक्वेस्ट को Render पर फॉरवर्ड कर देती है। यह CORS समस्याओं और फ़ायरवॉल प्रतिबंधों को बायपास कर देता है।

4. SSL सर्टिफिकेट एरर्स Supabase कनेक्शन पूलर्स के कारण Node.js में SSL एरर्स आ रहे थे। समाधान: हमने एनवायरनमेंट वेरिएबल NODE_TLS_REJECT_UNAUTHORIZED=0 सेट किया।

लागत का विवरण

• cPanel: $0 (मौजूदा) • Render: $0 (Free Tier) • Supabase: $0 (Free Tier) • कुल: $0/माह

इंजीनियरों के लिए मुख्य बातें

  • आउटबाउंड कनेक्टिविटी का जल्दी परीक्षण करें। कोड लिखने से पहले जांच लें कि आपका सर्वर वास्तव में आपके डेटाबेस से बात कर सकता है या नहीं।
  • मोनोरेपो के लिए esbuild का उपयोग करें। एक सिंगल बंडल फ़ाइल को डिप्लॉय करना जटिल फ़ोल्डर स्ट्रक्चर की तुलना में बहुत आसान होता है।
  • UptimeRobot का उपयोग करें। Render का फ्री टियर 15 मिनट के बाद सो जाता है। एक साधारण पिंग इसे जगाए रखता है।
  • डेटाबेस पासवर्ड में विशेष वर्णों (special characters) से बचें। कनेक्शन स्ट्रिंग में @ या ! का उपयोग करने से URL-encoding की अंतहीन समस्याएँ पैदा होती हैं।

यदि आप अफोर्ड कर सकते हैं, तो $5 का VPS खरीदें। यह इन सभी बाधाओं को हटा देता है। लेकिन यदि आपके पास $0 है, तो क्रिएटिव राउटिंग प्रोडक्शन ऐप्स को संभव बनाती है।

स्रोत: https://dev.to/oyohedmond/deploying-a-full-stack-lms-on-shared-hosting-render-free-the-hard-way-4ke0

वैकल्पिक लर्निंग कम्युनिटी: https://t.me/GyaanSetuAi