ಶೇರ್ಡ್ ಹೋಸ್ಟಿಂಗ್ ಮತ್ತು Render ನಲ್ಲಿ ಫುಲ್-ಸ್ಟ್ಯಾಕ್ LMS ಅನ್ನು ನಿಯೋಜಿಸುವುದು

ನಾವು VPS ಇಲ್ಲದೆಯೇ Node.js, React, ಮತ್ತು PostgreSQL ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ರೊಡಕ್ಷನ್ ಮಟ್ಟದಲ್ಲಿ ಬಿಡುಗಡೆ ಮಾಡಿದ್ದೇವೆ.

ನಾವು G3HUB ಗಾಗಿ ಸಂಪೂರ್ಣ ಲರ್ನಿಂಗ್ ಮ್ಯಾನೇಜ್‌ಮೆಂಟ್ ಸಿಸ್ಟಮ್ (LMS) ಅನ್ನು ನಿರ್ಮಿಸಿದ್ದೇವೆ. ಇದರಲ್ಲಿ ಬಳಸಲಾದ ತಂತ್ರಜ್ಞಾನಗಳು (Stack): • ಫ್ರಂಟ್‌ಎಂಡ್: React 18, Vite, ಮತ್ತು TailwindCSS • ಬ್ಯಾಕ್‌ಎಂಡ್: Node.js 20 ಮತ್ತು Express 5 • ಡೇಟಾಬೇಸ್: Supabase ಮೂಲಕ PostgreSQL 15 • ORM: Drizzle ORM

ನಮ್ಮ ಬಳಿ ಯಾವುದೇ ಕ್ಲೌಡ್ VM ಅಥವಾ VPS ಇರಲಿಲ್ಲ. ನಮಗೆ ಕೇವಲ ಒಂದು cPanel ಶೇರ್ಡ್ ಹೋಸ್ಟಿಂಗ್ ಖಾತೆಯಿತ್ತು, ಅದರಲ್ಲಿ ಈಗಾಗಲೇ ಒಂದು WordPress ಸೈಟ್ ಚಾಲನೆಯಲ್ಲಿದೆ. ನಾವು ಇದನ್ನು ಹೇಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಿದೆವು ಎಂಬುದು ಇಲ್ಲಿದೆ.

ಮೂಲಸೌಕರ್ಯದ ವಿಭಜನೆ ನಮಗೆ Node.js ಮತ್ತು PostgreSQL ಅನ್ನು ಒಂದೇ ಸರ್ವರ್‌ನಲ್ಲಿ ನಡೆಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಾವು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಮೂರು ಸೇವೆಗಳಾಗಿ ವಿಭಜಿಸಿದೆವು: • ಫ್ರಂಟ್‌ಎಂಡ್: cPanel ಶೇರ್ಡ್ ಹೋಸ್ಟಿಂಗ್ (Static files) • API: Render (Free tier) • ಡೇಟಾಬೇಸ್: Supabase (Free tier)

ದೊಡ್ಡ ಸವಾಲುಗಳು

1. ಡೇಟಾಬೇಸ್ ಅಡೆತಡೆ ನಾವು Node.js API ಅನ್ನು ನೇರವಾಗಿ cPanel ನಲ್ಲಿ ನಡೆಸಲು ಪ್ರಯತ್ನಿಸಿದೆವು. ಅದು ತಕ್ಷಣವೇ ವಿಫಲವಾಯಿತು. ಶೇರ್ಡ್ ಹೋಸ್ಟಿಂಗ್ ಪ್ರೊವೈಡರ್‌ಗಳು ಹೆಚ್ಚಾಗಿ ಪೋರ್ಟ್ 5432 ನಲ್ಲಿ ಔಟ್‌ಬೌಂಡ್ ಕನೆಕ್ಷನ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತಾರೆ. ಇದರರ್ಥ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಬಾಹ್ಯ ಡೇಟಾಬೇಸ್‌ನೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಇದನ್ನು ಪರಿಹರಿಸಲು ನಾವು API ಅನ್ನು Render ಗೆ ವರ್ಗಾಯಿಸಿದೆವು.

2. ಮೊನೊರೆಪೊ ಸಮಸ್ಯೆ ನಮ್ಮ ಕೋಡ್‌ಬೇಸ್ pnpm workspaces ಅನ್ನು ಬಳಸುತ್ತಿತ್ತು. ನಾವು Render ಗೆ ಪುಶ್ ಮಾಡಿದಾಗ, Render ನಮ್ಮ ಲೋಕಲ್ ವರ್ಕ್‌ಸ್ಪೇಸ್ ಅವಲಂಬನೆಗಳನ್ನು (dependencies) ಗುರುತಿಸದ ಕಾರಣ ಬಿಲ್ಡ್ ವಿಫಲವಾಯಿತು. ಪರಿಹಾರ: ನಾವು ಎಲ್ಲವನ್ನೂ ಒಂದೇ 6.4MB ಫೈಲ್ ಆಗಿ ಬಂಡಲ್ ಮಾಡಲು esbuild ಅನ್ನು ಬಳಸಿದೆವು. ಸಂಕೀರ್ಣವಾದ package.json ಅನ್ನು ಕೇವಲ ಬಾಹ್ಯ ಅವಲಂಬನೆಗಳನ್ನು ಹೊಂದಿರುವ ಕನಿಷ್ಠ (minimal) ಆವೃತ್ತಿಯಿಂದ ಬದಲಾಯಿಸಿದೆವು.

3. CORS ಮತ್ತು Proxy ಯುದ್ಧ ನಮ್ಮ ಡೊಮೇನ್‌ನಿಂದ API ಕರೆಗಳನ್ನು Render ಗೆ ರೌಟ್ ಮಾಡಲು ನಾವು Apache mod_proxy ಬಳಸಲು ಪ್ರಯತ್ನಿಸಿದೆವು. ಅದು ಟೈಮ್ ಔಟ್ ಆಯಿತು. ಶೇರ್ಡ್ ಹೋಸ್ಟಿಂಗ್ ಸಾಮಾನ್ಯವಾಗಿ ಈ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ. ಪರಿಹಾರ: ನಾವು PHP cURL proxy ಅನ್ನು ಬಳಸಿದೆವು. ಫ್ರಂಟ್‌ಎಂಡ್ ಮತ್ತು PHP ಸ್ಕ್ರಿಪ್ಟ್ ಒಂದೇ ಡೊಮೇನ್‌ನಲ್ಲಿ ಇರುವುದರಿಂದ, ನಾವು ಎಲ್ಲಾ CORS ಸಮಸ್ಯೆಗಳನ್ನು ತಪ್ಪಿಸಿದೆವು. PHP ಸ್ಕ್ರಿಪ್ಟ್ ವಿನಾಯಿತಿ ಇಲ್ಲದೆ (silently) ವಿನಂತಿಗಳನ್ನು Render ಗೆ ಕಳುಹಿಸುತ್ತದೆ.

ನಿಯೋಜನೆಗಾಗಿ ಸಲಹೆಗಳು • Git Bash ಬದಲಿಗೆ PowerShell ನಲ್ಲಿ ಬಿಲ್ಡ್ ಮಾಡಿ. Git Bash ನಲ್ಲಿ ವಿಂಡೋಸ್ ಎನ್ವಿರಾನ್ಮೆಂಟ್ ವೇರಿಯೇಬಲ್‌ಗಳನ್ನು ವಿಭಿನ್ನವಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ. • ವಿಶೇಷ ಅಕ್ಷರಗಳಿಲ್ಲದ ಡೇಟಾಬೇಸ್ ಪಾಸ್‌ವರ್ಡ್ ಬಳಸಿ. @ ಅಥವಾ ! ನಂತಹ ಅಕ್ಷರಗಳಿಗೆ URL ಎನ್ಕೋಡಿಂಗ್ ಅಗತ್ಯವಿರುತ್ತದೆ ಮತ್ತು ಇದು ಕನೆಕ್ಷನ್ ದೋಷಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ. • UptimeRobot ಬಳಸಿ. Render ಫ್ರೀ ಟಿಯರ್ 15 ನಿಮಿಷಗಳ ನಂತರ ಸ್ಲೀಪ್ ಮೋಡ್‌ಗೆ ಹೋಗುತ್ತದೆ. ಅದನ್ನು ಸಕ್ರಿಯವಾಗಿಡಲು ನಿಮ್ಮ health check ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗೆ ಪಿಂಗ್ (ping) ಸೆಟ್ ಮಾಡಿ.

ಒಟ್ಟು ಮೂಲಸೌಕರ್ಯ ವೆಚ್ಚ: $0/ತಿಂಗಳು.

ನಿಮ್ಮ ಬಳಿ ಬಜೆಟ್ ಇದ್ದರೆ, VPS ಬಳಸಿ. ಇದು ಇಂತಹ ಅಡೆತಡೆಗಳನ್ನು ನಿವಾರಿಸುತ್ತದೆ. ಆದರೆ ನಿಮ್ಮ ಬಳಿ ಬಜೆಟ್ ಇಲ್ಲದಿದ್ದರೆ, ಸೃಜನಾತ್ಮಕ ರೌಟಿಂಗ್ ಮೂಲಕ ಪ್ರೊಡಕ್ಷನ್-ರೆಡಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಸಾಧ್ಯವಾಗಿಸಬಹುದು.

ಮೂಲ: https://dev.to/oyohedmond/deploying-a-full-stack-lms-on-shared-hosting-render-free-the-hard-way-4ke0