இலவச உள்கட்டமைப்பில் Full-Stack செயலிகளை Deploy செய்தல்

நாங்கள் G3HUB-க்காக ஒரு Learning Management System-ஐ உருவாக்கினோம். பயன்படுத்தப்பட்ட Stack: React 18, Node.js 20, மற்றும் PostgreSQL 15.

எங்களிடம் VPS இல்லை. எங்களிடம் கிளவுட் (Cloud) செலவுக்கான பட்ஜெட்டும் இல்லை. எங்களிடம் ஒரு cPanel shared hosting கணக்கும், ஒரு காலக்கெடுவும் (deadline) மட்டுமே இருந்தது.

பெரும்பாலான பயிற்சிகள் (tutorials) உங்களிடம் ஒரு பிரத்யேக சர்வர் (dedicated server) இருப்பதாகவே கருதுகின்றன. மாதம் $0 செலவில் வெவ்வேறு சேவைகளை (services) ஒன்றோடொன்று இணைப்பதற்கான வழியை நாங்கள் கண்டறிய வேண்டியிருந்தது.

𝗧𝗵𝗲 𝗔𝗿𝗰𝗵𝗶𝘁𝗲𝗰𝘁𝘂𝗿𝗲

• Frontend: React + Vite (cPanel-இல் ஹோஸ்ட் செய்யப்பட்டது) • Backend: Node.js + Express (Render Free Tier-இல் ஹோஸ்ட் செய்யப்பட்டது) • Database: PostgreSQL (Supabase Free Tier-இல் ஹோஸ்ட் செய்யப்பட்டது)

𝗧𝗵𝗲 𝗛𝘂𝗿𝗱𝗹𝗲𝘀 𝗔𝗻𝗱 𝗦𝗼𝗹𝘂𝘁𝗶𝗼𝗻𝘀

𝟭. Shared Hosting தரவுத்தளங்களைத் (Databases) தடுக்கிறது நாங்கள் Node.js API-ஐ cPanel-இல் இயக்க முயன்றோம். ஆனால், ஹோஸ்ட் (host) போர்ட் 5432-இல் PostgreSQL-க்கான வெளிச்செல்லும் இணைப்புகளை (outbound connections) தடுத்ததால் அது தோல்வியடைந்தது. தீர்வு: API-ஐ Render-க்கு மாற்றவும். Render இத்தகைய இணைப்புகளை அனுமதிக்கிறது.

𝟮. Monorepo Deployment பிழைகள் @workspace/db போன்ற எங்களது pnpm workspace சார்புகளை (dependencies) Render புரிந்துகொள்ளவில்லை. தீர்வு: அனைத்தையும் ஒரே 6.4MB கோப்பாகத் தொகுக்க (bundle) நாங்கள் esbuild-ஐப் பயன்படுத்தினோம். பின்னர், வெளிப்புறச் சார்புகளை (external dependencies) மட்டும் கொண்ட ஒரு சிறிய package.json கோப்பைப் பயன்படுத்தினோம். இது API-ஐத் தன்னிச்சையாகச் செயல்படும் வகையில் (self-contained) மாற்றியது.

𝟯. CORS மற்றும் Proxy சிக்கல் Shared hosting-இல் உள்ள Apache mod_proxy கட்டுப்படுத்தப்பட்டிருந்தது. Frontend-லிருந்து Render-க்கு API அழைப்புகளை (calls) எளிதாக அனுப்ப முடியவில்லை. தீர்வு: நாங்கள் ஒரு PHP cURL proxy-ஐப் பயன்படுத்தினோம். Frontend உள்ளூர் PHP ஸ்கிரிப்டை அழைக்கும். அந்த PHP ஸ்கிரிப்ட் கோரிக்கையை (request) Render-க்கு அனுப்பும். இது CORS சிக்கல்கள் மற்றும் ஃபயர்வால் (firewall) கட்டுப்பாடுகளைத் தவிர்க்க உதவுகிறது.

𝟰. SSL சான்றிதழ் பிழைகள் Supabase connection pooler, Node.js-இல் SSL பிழைகளை ஏற்படுத்தியது. தீர்வு: நாங்கள் environment variable NODE_TLS_REJECT_UNAUTHORIZED=0 என அமைத்தோம்.

𝗧𝗵𝗲 𝗖𝗼𝘀𝘁 𝗕𝗿𝗲𝗮𝗸𝗱𝗼𝘄𝗻

• cPanel: $0 (ஏற்கனவே உள்ளது) • Render: $0 (Free Tier) • Supabase: $0 (Free Tier) • மொத்தம்: $0/மாதம்

𝗧𝗮𝗸𝗲𝗮𝘄𝗮𝘆𝘀 𝗳𝗼𝗿 𝗘𝗻𝗴𝗶𝗻𝗲𝗲𝗿𝘀

  • வெளிச்செல்லும் இணைப்பை (outbound connectivity) ஆரம்பத்திலேயே சோதிக்கவும். குறியீட்டை (code) எழுதுவதற்கு முன்பே, உங்கள் சர்வர் உங்கள் தரவுத்தளத்துடன் (database) தொடர்பு கொள்ள முடிகிறதா என்பதைச் சரிபார்க்கவும்.
  • Monorepos-களுக்கு esbuild-ஐப் பயன்படுத்தவும். சிக்கலான கோப்பு அமைப்பை (folder structure) விட, ஒரே தொகுக்கப்பட்ட கோப்பு (bundled file) வரிசைப்படுத்துவதற்கு மிகவும் எளிதானது.
  • UptimeRobot-ஐப் பயன்படுத்தவும். Render-இன் free tier 15 நிமிடங்களுக்குப் பிறகு உறக்க நிலைக்குச் (sleep) செல்லும். ஒரு எளிய 'ping' அதைச் செயல்பட வைக்கும்.
  • தரவுத்தள கடவுச்சொற்களில் (database passwords) சிறப்பு எழுத்துக்களைத் தவிர்க்கவும். ஒரு connection string-இல் @ அல்லது ! பயன்படுத்துவது முடிவில்லாத URL-encoding தலைவலிய்களை ஏற்படுத்தும்.

உங்களால் முடிந்தால், ஒரு $5 VPS-ஐ வாங்கவும். அது இந்தத் தடைகள் அனைத்தையும் நீக்கிவிடும். ஆனால் உங்களிடம் $0 மட்டுமே இருந்தால், ஆக்கபூர்வமான ரூட்டிங் (creative routing) மூலம் தயாரிப்புச் செயலிகளை (production apps) உருவாக்க முடியும்.

மூலம்: https://dev.to/oyohedmond/deploying-a-full-stack-lms-on-shared-hosting-render-free-the-hard-way-4ke0

விருப்பமான கற்றல் சமூகம்: https://t.me/GyaanSetuAi