Shared Hosting અને Render પર Full-Stack LMS ડિપ્લોય કરવું
અમે VPS વગર production Node.js, React, અને PostgreSQL એપ લોન્ચ કરી.
અમે G3HUB માટે સંપૂર્ણ Learning Management System બનાવ્યું. તેમાં આ ટેક સ્ટેકનો સમાવેશ થતો હતો: • Frontend: React 18, Vite, અને TailwindCSS • Backend: Node.js 20 અને Express 5 • Database: Supabase દ્વારા PostgreSQL 15 • ORM: Drizzle ORM
અમારી પાસે કોઈ cloud VM કે VPS નહોતું. અમારી પાસે ફક્ત એક cPanel shared hosting એકાઉન્ટ હતું જેમાં પહેલેથી જ WordPress સાઇટ ચાલતી હતી. અમે તેને કેવી રીતે સફળ બનાવ્યું તે અહીં છે.
ઇન્ફ્રાસ્ટ્રક્ચર સ્પ્લિટ (The Infrastructure Split) અમે એક જ સર્વર પર Node.js અને PostgreSQL ચલાવી શકતા નહોતા. અમે એપને ત્રણ સેવાઓમાં વહેંચી દીધી: • Frontend: cPanel shared hosting (Static files) • API: Render (Free tier) • Database: Supabase (Free tier)
સૌથી મોટી અડચણો (The Biggest Hurdles)
૧. ડેટાબેઝ બ્લોકેડ (The Database Blockade) અમે cPanel પર સીધું Node.js API ચલાવવાનો પ્રયાસ કર્યો. તે તરત જ નિષ્ફળ ગયું. Shared hosting પ્રોવાઇડર્સ ઘણીવાર port 5432 પર outbound connections બ્લોક કરે છે. આનો અર્થ એ છે કે તમારી એપ બાહ્ય (external) ડેટાબેઝ સાથે વાતચીત કરી શકતી નથી. આ સમસ્યા ઉકેલવા માટે અમે API ને Render પર ખસેડ્યું.
૨. મોનોરેપોની સમસ્યા (The Monorepo Pain) અમારા કોડબેઝમાં pnpm workspaces નો ઉપયોગ થયો હતો. જ્યારે અમે Render પર પુશ કર્યું, ત્યારે બિલ્ડ નિષ્ફળ ગયું કારણ કે Render અમારી લોકલ workspace dependencies ને ઓળખી શકતું નહોતું. ઉકેલ: અમે બધું જ એક 6.4MB ફાઇલમાં બંડલ કરવા માટે esbuild નો ઉપયોગ કર્યો. અમે જટિલ package.json ને બદલે માત્ર external dependencies ધરાવતું એક મિનિમલ વર્ઝન વાપર્યું.
૩. CORS અને Proxy ની લડાઈ (The CORS and Proxy War) અમે અમારા ડોમેનથી Render પર API કોલ્સ રૂટ કરવા માટે Apache mod_proxy નો ઉપયોગ કરવાનો પ્રયાસ કર્યો. તે ટાઈમ આઉટ થઈ ગયું. Shared hosting ઘણીવાર આ મોડ્યુલ પર પ્રતિબંધ મૂકે છે. ઉકેલ: અમે PHP cURL proxy નો ઉપયોગ કર્યો. કારણ કે frontend અને PHP સ્ક્રિપ્ટ એક જ ડોમેન પર છે, તેથી અમે તમામ CORS સમસ્યાઓથી બચી ગયા. PHP સ્ક્રિપ્ટ શાંતિથી (silently) requests ને Render પર ફોરવર્ડ કરે છે.
ડિપ્લોયમેન્ટ ટિપ્સ (Deployment Tips) • PowerShell પર બિલ્ડ કરો, Git Bash પર નહીં. Windows Git Bash માં environment variables ને અલગ રીતે હેન્ડલ કરે છે. • સ્પેશિયલ કેરેક્ટર્સ વગરનો ડેટાબેઝ પાસવર્ડ વાપરો. @ અથવા ! જેવા કેરેક્ટર્સ માટે URL encoding જરૂરી છે અને તેનાથી કનેક્શન એરર આવી શકે છે. • UptimeRobot નો ઉપયોગ કરો. Render free tier 15 મિનિટ પછી સ્લીપ મોડમાં જતું રહે છે. તેને સક્રિય રાખવા માટે તમારા health check endpoint પર પિંગ (ping) સેટ કરો.
કુલ ઇન્ફ્રાસ્ટ્રક્ચર ખર્ચ: $0/મહિનો.
જો તમારી પાસે બજેટ હોય, તો VPS નો ઉપયોગ કરો. તે આ તમામ અવરોધો દૂર કરે છે. પરંતુ જો તમારી પાસે શૂન્ય બજેટ હોય, તો ક્રિએટિવ રૂટિંગ દ્વારા production-ready એપ્સ બનાવવી શક્ય છે.
સ્ત્રોત: https://dev.to/oyohedmond/deploying-a-full-stack-lms-on-shared-hosting-render-free-the-hard-way-4ke0
