Module 10: Deployment & Next Steps 🚀
1. Deployment: ලෝකයට විවෘත කිරීම
Deployment යනු අපේ local machine එකේ (localhost) නිර්මාණය කළ application එක, අන්තර්ජාලය හරහා ඕනෑම කෙනෙකුට පිවිසිය හැකි live server එකක ස්ථාපනය කිරීමේ ක්රියාවලියයි. මේ දක්වා අප නිර්මාණය කළ Notes API එක ක්රියාත්මක වූයේ අපේ පරිගණකයේ පමණි. Deployment කිරීමෙන් පසු, frontend application එකකට හෝ mobile app එකකට ලෝකයේ ඕනෑම තැනක සිට අපේ API එක සමඟ සන්නිවේදනය කිරීමට හැකි වේ.
Deployment සඳහා සූදානම් වීම
Deploy කිරීමට පෙර, කරුණු කිහිපයක් පිළිබඳව සැලකිලිමත් විය යුතුය.
- Environment Variables: සංවේදී දත්ත (Database URI, JWT Secret) කිසිවිටෙකත් code එකේ hard-code නොකළ යුතුය. අපි
.env
file එකේ භාවිතා කළ variables, deployment server එකේ environment variables ලෙස set කළ යුතුය.
- `package.json` හි `start` Script: Deployment platform එක, අපේ application එක start කරන්නේ කෙසේදැයි දැනගන්නේ `package.json` file එකේ `scripts` කොටසේ ඇති `start` command එකෙනි. එය
"start": "node server.js"
ලෙස නිවැරදිව සකසා ඇති බවට වග බලා ගන්න.
- PORT Binding: අපේ `server.js` file එකේ port එක `const PORT = process.env.PORT || 5000;` ලෙස සකසා තිබීම වැදගත් වේ. මන්ද, deployment platforms විසින් application එක run කළ යුතු port එක `process.env.PORT` variable එක හරහා ලබා දෙනු ලැබේ.
2. Deployment Options: යෙදුම ස්ථාපනය කළ හැකි තැන්
Node.js application එකක් deploy කිරීමට ප්රධාන ක්රම කිහිපයක් ඇත.
- PaaS (Platform as a Service): මේවා deployment ක්රියාවලිය ඉතා සරල කරන cloud platforms වේ. ඔබ ඔබේ code එක Git repository එකකට push කළ පසු, ඉතිරි සියලු දේ (server setup, scaling, maintenance) මෙම platform එක මගින් බලා ගනී. Render සහ Heroku இதற்கு சிறந்த உதாரணங்கள் ஆகும். ආරම්භකයින් සඳහා වඩාත් සුදුසුම ක්රමය මෙයයි.
- VPS (Virtual Private Server): DigitalOcean, Linode, AWS EC2 වැනි සේවාවන් මගින් ඔබට virtual server එකක් (Linux computer) ලබා දේ. මෙහිදී server එකේ OS එකේ සිට, Node.js, database, web server (Nginx) දක්වා සියල්ල ඔබ විසින්ම install කර configure කළ යුතුය. මෙය වැඩි නිදහසක් සහ පාලනයක් ලබා දුන්නත්, වැඩි තාක්ෂණික දැනුමක් අවශ්ය වේ.
Render සමඟ Deploy කිරීම (Step-by-Step)
Render යනු නොමිලේම web applications deploy කිරීමට ඉඩ සලසන ඉතා ජනප්රිය PaaS එකකි. අපේ Notes API එක Render මත deploy කරමු.
- GitHub Repository එකක් සාදන්න: ඔබේ Notes API project එක GitHub repository එකකට push කරන්න. (
.gitignore
file එකේ node_modules
සහ .env
ඇතුළත් කිරීමට අමතක නොකරන්න).
- Render Account එකක් සාදන්න: render.com වෙත ගොස්, ඔබේ GitHub account එක සමඟ ලියාපදිංචි වන්න.
- New Web Service: Render dashboard එකේ, "New +" බොත්තම ඔබා "Web Service" තෝරන්න.
- Connect Repository: ඔබේ GitHub account එක connect කර, deploy කිරීමට අවශ්ය Notes API repository එක තෝරන්න.
- Settings:
- Name: ඔබේ application එකට කැමති නමක් දෙන්න (e.g., `sinhala-notes-api`).
- Region: ඔබට ආසන්නම region එක තෝරන්න (e.g., Singapore).
- Branch: `main` (හෝ `master`).
- Root Directory: (හිස්ව තබන්න).
- Runtime: `Node`.
- Build Command:
npm install
.
- Start Command:
node server.js
.
- Add Environment Variables: "Advanced" settings වල, "Environment Variables" යටතේ, ඔබේ
.env
file එකේ තිබූ variables (`MONGO_URI`, `JWT_SECRET`) එකින් එක Add කරන්න.
- Create Web Service: "Create Web Service" බොත්තම ඔබන්න. Render විසින් ඔබේ code එක pull කර, dependencies install කර, application එක deploy කිරීමට පටන් ගනී.
- Done! මිනිත්තු කිහිපයකට පසු, deployment එක සාර්ථක වූ විට, Render විසින් ඔබට live URL එකක් ලබා දෙනු ඇත. දැන් ඔබට එම URL එක හරහා ඔබේ API එකට පිවිසිය හැක.
3. Scaling with PM2 & Nginx (Advanced)
PM2: Process Manager
Production server එකකදී, අපි node server.js
ලෙස application එක run කරන්නේ නැහැ. යම් error එකක් නිසා application එක crash වුවහොත්, එය නැවත auto-restart වන්නේ නැහැ. PM2 යනු මෙම ගැටලුවට විසඳුමයි. එය Node.js සඳහා වූ production process manager එකකි.
- Application එක crash වූ විට ස්වයංක්රීයව restart කරයි.
- Server එකේ CPU cores සියල්ලම භාවිතා කර, application එකේ performance වැඩි කිරීමට (clustering) ඉඩ සලසයි.
- Deployment ක්රියාවලිය පහසු කරයි (zero-downtime reloads).
- Logs කළමනාකරණය කරයි.
VPS එකකදී, PM2 install කර, pm2 start server.js
ලෙස application එක run කිරීම සම්මත ක්රමයයි.
Nginx: Reverse Proxy
Nginx යනු අධි-ක්රියාකාරී web server එකකි. Node.js applications ඉදිරියේ මෙය **reverse proxy** එකක් ලෙස බහුලව භාවිතා වේ. Client ගෙන් එන requests (port 80/443) මුලින්ම භාරගන්නේ Nginx විසිනි. පසුව Nginx එම requests, අපේ Node.js app එක run වන port එකට (e.g., port 5000) යොමු කරයි. මෙමගින් SSL/TLS termination, load balancing, serving static files වැනි කාර්යයන් වඩාත් කාර්යක්ෂමව සිදු කළ හැක.
4. Future Learning Paths: මීළඟට කුමක්ද?
සුභ පැතුම්! ඔබ Node.js සහ Express backend development හි මූලික කරුණු සාර්ථකව ඉගෙනගෙන අවසන්.
දැන් ඔබට ඔබේ දැනුම තවත් පුළුල් කරගත හැකි මාර්ග කිහිපයක් මෙන්න:
- Frontend Framework එකක් ඉගෙන ගන්න: ඔබ නිර්මාණය කළ API එක භාවිතා කරන සම්පූර්ණ (full-stack) application එකක් සෑදීමට React, Vue, හෝ Angular වැනි frontend framework එකක් ඉගෙන ගන්න.
- TypeScript: JavaScript වලට static types එකතු කරන TypeScript ඉගෙන ගැනීමෙන්, විශාල applications වලදී bugs අඩු කර, code එකේ ගුණාත්මක භාවය වැඩි කරගත හැක.
- GraphQL: REST වලට විකල්පයක් වන GraphQL ඉගෙන ගැනීමෙන්, වඩාත් නම්යශීලී සහ කාර්යක්ෂම APIs නිර්මාණය කළ හැක.
- Real-time Applications: WebSockets (Socket.io library එක සමඟ) ඉගෙන ගෙන, chat applications, live notifications වැනි real-time features නිර්මාණය කරන්න.
- DevOps & Containerization: Docker ඉගෙන ගෙන, ඔබේ application එක ඕනෑම පරිසරයක එකම ආකාරයට run වන containers බවට පත් කරන්න. CI/CD (Continuous Integration/Continuous Deployment) pipelines ගැන ඉගෙන ගෙන deployment ක්රියාවලිය ස්වයංක්රීය කරන්න.
නිරන්තරයෙන් අලුත් දේ ඉගෙන ගැනීම සහ ප්රායෝගිකව projects නිර්මාණය කිරීම, දක්ෂ developer කෙනෙක් වීමේ යතුරයි. ඔබට ජය!
Go Back to Module 9
Back to Course Home