𝗗𝗲𝗽𝗹𝗼𝘆 𝘀𝗲𝘆𝗱𝗵𝗮𝗹: 𝗦𝗵𝗮𝗿𝗲𝗱 𝗛𝗼𝘀𝘁𝗶𝗻𝗴 𝗺𝗮𝘁𝘁𝗵𝘂𝗺 𝗥𝗲𝗻𝗱𝗲𝗿-𝗶𝗹 𝗼𝗿𝘂 𝗙𝘂𝗹𝗹-𝗦𝘁𝗮𝗰𝗸 𝗟𝗠𝗦
நாங்கள் ஒரு VPS இல்லாமலேயே Node.js, React மற்றும் PostgreSQL பயன்பாட்டை (app) தயாரித்து வெளியிட்டோம்.
நாங்கள் G3HUB-க்காக ஒரு முழுமையான Learning Management System-ஐ உருவாக்கினோம். அதில் பயன்படுத்தப்பட்ட Stack: • Frontend: React 18, Vite, மற்றும் TailwindCSS • Backend: Node.js 20 மற்றும் Express 5 • Database: Supabase மூலம் PostgreSQL 15 • ORM: Drizzle ORM
எங்களிடம் எந்த Cloud VM அல்லது VPS இல்லை. ஏற்கனவே ஒரு WordPress தளத்தை இயக்கி வரும் ஒரு cPanel shared hosting கணக்கு மட்டுமே எங்களிடம் இருந்தது. அதை நாங்கள் எவ்வாறு செயல்படுத்தினோம் என்பது இதோ.
𝗧𝗵𝗲 𝗜𝗻𝗳𝗿𝗮𝘀𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲 𝗦𝗽𝗹𝗶𝘁 எங்களால் Node.js மற்றும் PostgreSQL ஆகியவற்றை ஒரே சர்வரில் இயக்க முடியவில்லை. எனவே, பயன்பாட்டை மூன்று சேவைகளாகப் பிரித்தோம்: • Frontend: cPanel shared hosting (Static files) • API: Render (Free tier) • Database: Supabase (Free tier)
𝗧𝗵𝗲 𝗕𝗶𝗴𝗴𝗲𝘀𝘁 𝗛𝘂𝗿𝗱𝗹𝗲𝘀
𝟭. 𝗧𝗵𝗲 𝗗𝗮𝘁𝗮𝗯𝗮𝘀𝗲 𝗕𝗹𝗼𝗰𝗸𝗮𝗱𝗲 நாங்கள் Node.js API-ஐ நேரடியாக cPanel-இல் இயக்க முயன்றோம். அது உடனடியாகத் தோல்வியடைந்தது. Shared hosting வழங்குநர்கள் பெரும்பாலும் port 5432-இல் outbound இணைப்புகளைத் தடுத்துவிடுகிறார்கள். இதன் பொருள், உங்கள் பயன்பாட்டால் ஒரு வெளிப்புற தரவுத்தளத்துடன் (external database) தொடர்பு கொள்ள முடியாது என்பதாகும். இதைத் தீர்க்க, நாங்கள் API-ஐ Render-க்கு மாற்றினோம்.
𝟮. 𝗧𝗵𝗲 𝗠𝗼𝗻𝗼𝗿𝗲𝗽𝗼 𝗣𝗮𝗶𝗻 எங்கள் codebase-இல் pnpm workspaces பயன்படுத்தப்பட்டது. நாங்கள் Render-க்கு push செய்தபோது, Render எங்களது local workspace dependencies-களை அடையாளம் காணாததால் build தோல்வியடைந்தது. தீர்வு: அனைத்தையும் ஒரு 6.4MB கோப்பாகத் தொகுக்க (bundle) நாங்கள் esbuild-ஐப் பயன்படுத்தினோம். சிக்கலான package.json-க்கு பதிலாக, வெளிப்புறத் தேவைகளை (external dependencies) மட்டும் கொண்ட ஒரு எளிமையான பதிப்பைப் பயன்படுத்தினோம்.
𝟯. 𝗧𝗵𝗲 𝗖𝗢𝗥𝗦 𝗮𝗻𝗱 𝗣𝗿𝗼𝘅𝘆 𝗪𝗮𝗿 எங்களது domain-லிருந்து API அழைப்புகளை Render-க்கு அனுப்ப Apache mod_proxy-ஐப் பயன்படுத்த முயன்றோம். ஆனால் அது time out ஆனது. Shared hosting பெரும்பாலும் இந்த module-ஐக் கட்டுப்படுத்துகிறது. தீர்வு: நாங்கள் ஒரு PHP cURL proxy-ஐப் பயன்படுத்தினோம். Frontend மற்றும் PHP script ஆகிய இரண்டும் ஒரே domain-இல் இருப்பதால், அனைத்து CORS சிக்கல்களையும் நாங்கள் தவிர்த்தோம். அந்த PHP script கோரிக்கைகளை (requests) அமைதியாக Render-க்குத் தள்ளுகிறது (forwards).
𝗗𝗲𝗽𝗹𝗼𝘆𝗺𝗲𝗻𝘁 𝗧𝗶𝗽𝘀 • Git Bash-இல் அல்லாமல், PowerShell-இல் build செய்யவும். Windows environment variables-களை Git Bash-இல் வேறுவிதமாக கையாளுகிறது. • சிறப்பு எழுத்துக்கள் (special characters) இல்லாத தரவுத்தள கடவுச்சொல்லைப் பயன்படுத்தவும். @ அல்லது ! போன்ற எழுத்துக்களுக்கு URL encoding தேவைப்படும், இது இணைப்புப் பிழைகளை (connection errors) ஏற்படுத்தும். • UptimeRobot-ஐப் பயன்படுத்தவும். Render free tier 15 நிமிடங்களுக்குப் பிறகு உறக்க நிலைக்குச் (sleep) சென்றுவிடும். அதைச் செயல்பாட்டில் வைத்திருக்க உங்கள் health check endpoint-க்கு ஒரு ping-ஐ அமைக்கவும்.
𝗧𝗼𝘁𝗮𝗹 𝗜𝗻𝗳𝗿𝗮𝘀𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲 𝗖𝗼𝘀𝘁: $0/மாதம்.
உங்களிடம் பட்ஜெட் இருந்தால், ஒரு VPS-ஐப் பயன்படுத்தவும். அது இத்தகைய தடைகளை நீக்கிவிடும். ஆனால் உங்களிடம் பட்ஜெட் இல்லையென்றால், ஆக்கபூர்வமான routing மூலம் production-ready பயன்பாடுகளை உருவாக்க முடியும்.
Source: https://dev.to/oyohedmond/deploying-a-full-stack-lms-on-shared-hosting-render-free-the-hard-way-4ke0
