मोफत इन्फ्रास्ट्रक्चरवर फुल-स्टॅक ॲप्स डिप्लॉय करणे

आम्ही G3HUB साठी एक Learning Management System तयार केली. स्टॅक: React 18, Node.js 20, आणि PostgreSQL 15.

आमच्याकडे VPS नव्हता. आमच्याकडे क्लाउडसाठी कोणतेही बजेट नव्हते. आमच्याकडे फक्त एक cPanel शेअर होस्टिंग अकाउंट आणि एक डेडलाईन होती.

बहुतेक ट्युटोरियल्समध्ये असे मानले जाते की तुमच्याकडे डेडिकेटेड सर्व्हर आहे. आम्हाला दरमहा $0 खर्च करून वेगवेगळ्या सर्व्हिसेस एकमेकांशी संवाद साधण्यासाठी मार्ग शोधायचा होता.

आर्किटेक्चर

• फ्रंटएंड: React + Vite (cPanel वर होस्ट केलेले) • बॅकएंड: Node.js + Express (Render Free Tier वर होस्ट केलेले) • डेटाबेस: PostgreSQL (Supabase Free Tier वर होस्ट केलेले)

अडचणी आणि उपाय

१. शेअर होस्टिंग डेटाबेस ब्लॉक करते आम्ही cPanel वर Node.js API चालवण्याचा प्रयत्न केला. पण ते अयशस्वी झाले कारण होस्टने पोर्ट 5432 वर PostgreSQL कडे होणारे आउटबाउंड कनेक्शन्स ब्लॉक केले होते. उपाय: API Render वर हलवा. Render या कनेक्शन्सना परवानगी देते.

२. Monorepo डिप्लॉयमेंट एरर्स Render ला @workspace/db सारख्या आमच्या pnpm workspace डिपेंडन्सीज समजल्या नाहीत. उपाय: आम्ही सर्व काही एका सिंगल 6.4MB फाईलमध्ये बंडल करण्यासाठी esbuild वापरले. त्यानंतर आम्ही फक्त एक्सटर्नल डिपेंडन्सीजसह एक मिनिमल package.json वापरले. यामुळे API सेल्फ-कंटेन्ड बनले.

३. CORS आणि प्रॉक्सीची समस्या शेअर होस्टिंगवरील Apache mod_proxy वर निर्बंध होते. आम्ही फ्रंटएंडमधून Render कडे API कॉल्स सहजपणे फॉरवर्ड करू शकत नव्हतो. उपाय: आम्ही PHP cURL प्रॉक्सी वापरली. फ्रंटएंड स्थानिक PHP स्क्रिप्टला कॉल करते. PHP स्क्रिप्ट ही विनंती Render कडे फॉरवर्ड करते. यामुळे CORS समस्या आणि फायरवॉल निर्बंध टाळता येतात.

४. SSL सर्टिफिकेट एरर्स Supabase कनेक्शन पूलर्समुळे Node.js मध्ये SSL एरर्स येत होत्या. उपाय: आम्ही NODE_TLS_REJECT_UNAUTHORIZED=0 हे एन्व्हायरनमेंट व्हेरिएबल सेट केले.

खर्चाचा तपशील

• cPanel: $0 (आधीपासून उपलब्ध) • Render: $0 (Free Tier) • Supabase: $0 (Free Tier) • एकूण: $0/महिना

इंजिनिअर्ससाठी महत्त्वाच्या गोष्टी

  • आउटबाउंड कनेक्टिव्हिटीची (outbound connectivity) लवकर चाचणी घ्या. कोड लिहिण्यापूर्वी तुमचा सर्व्हर खरोखर तुमच्या डेटाबेसशी संवाद साधू शकतो का ते तपासा.
  • Monorepos साठी esbuild वापरा. गुंतागुंतीच्या फोल्डर स्ट्रक्चरपेक्षा सिंगल बंडल केलेली फाईल डिप्लॉय करणे खूप सोपे असते.
  • UptimeRobot वापरा. Render चे फ्री टियर १५ मिनिटांनंतर स्लीप मोडमध्ये जाते. एक साधा 'ping' त्याला जागृत ठेवतो.
  • डेटाबेस पासवर्डमध्ये विशेष चिन्हे (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