अध्याय १ · खण्ड III · 24 मिनेट
तपाईंको पहिलो Nepal-hosted deployment
'मेरो laptop मा चल्दछ' बाट 'real URL मा चल्दछ जुन real user ले भ्रमण गर्न सक्दछ' सम्म। Containerise गर्नुहोस्, hosted platform मा deploy गर्नुहोस्, एक domain जोड्नुहोस्, र Nepal-serving endpoint expose गर्नुहोस्। AI परियोजनाहरूको लागि day-one deployment playbook।
Service तपाईंको laptop मा चल्दछ। ढक्कन बन्द गर्नुहोस्, र service गयो। एक real कुरा बन्नको लागि, यो सधैँ चलिरहेको computer मा चल्नुपर्दछ, जसमा power र internet छ, र URL मा पुग्न योग्य छ। यो खण्ड “स्थानीय रूपमा काम गर्दछ” बाट “nepse-mitra.example.np मा चल्दछ” सम्मको सबैभन्दा सानो ईमानदार बाटो हो — Nepal मा AI परियोजनाहरूको लागि day-one deployment playbook।
तीन चलिरहेका भागहरू
हरेक deployment का तीन भागहरू छन्:
- Build। तपाईंको कोड, यसका dependencies, र यसको runtime, कुनै reproducible मा packaged — सामान्यतया एक Docker container।
- Host। एक machine (भौतिक वा cloud) जुन container 24/7 चलाउँछ। 2026 मा, यो लगभग सधैँ managed platform (Fly.io, Railway, Render, DigitalOcean App Platform) वा cloud provider (AWS, GCP) हो।
- Address। एक URL जुन host मा point गर्दछ। एक real उत्पादको लागि, custom domain (
your-app.npवा subdomain)।
हामी प्रत्येकलाई एक पछि अर्को हिँडाउनेछौँ।
चरण 1 — Containerise
एउटा Docker container तपाईंको app को एक सानो, reproducible bundle हो: code, Python संस्करण, dependencies, config। Docker install भएको कुनै पनि machine ले यसलाई समान रूपमा चलाउन सक्दछ।
खण्ड 1.2 बाट service को लागि एक न्यूनतम Dockerfile:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY service.py .
EXPOSE 8000
CMD ["uvicorn", "service:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "2"]
र requirements.txt:
fastapi==0.115.0
uvicorn[standard]==0.30.0
anthropic==0.40.0
python-dotenv==1.0.0
slowapi==0.1.9
pydantic==2.9.0
आफ्नो versions pin गर्नुहोस्। यो preference होइन — यो कसरी तपाईंले “laptop मा काम गर्दछ” र “production मा काम गर्दछ” उही राख्नुहुन्छ।
Image build गर्नुहोस्:
docker build -t nepse-mitra:v0.1 .
स्थानीय रूपमा चलाउनुहोस्:
docker run -p 8000:8000 --env-file .env nepse-mitra:v0.1
पहिले जस्तै endpoints curl गर्नुहोस्। समान व्यवहार। भिन्नता: यो अब कुनै पनि machine मा समान रूपमा चल्दछ।
चरण 2 — Host छनोट गर्नुहोस्
तपाईं कहाँ deploy गर्नुहुन्छ त्यो महत्त्वपूर्ण छ। विकल्पहरू, मोटामोटी जटिलताको क्रममा:
Managed platforms — दिन 1 को लागि सिफारिस गरिएको।
- Fly.io — Docker-native, generous free tier, नजिकको क्षेत्रहरूमा deploy (Singapore/Mumbai ले Nepal लाई राम्रोसँग सर्भ गर्दछ)। Commands:
flyctl deploy। साना AI services को लागि आदर्श। - Railway — धेरै स्मूथ developer अनुभव, deploy गर्न
git push। समान मूल्य निर्धारण। - Render — परिपक्व platform, कम Docker-native तर धेरै सरल।
- Google Cloud Run — pay-per-request; निष्क्रिय हुँदा शून्यमा scale हुन्छ। कम-traffic services को लागि उत्कृष्ट।
IaaS (Infrastructure as a Service) — पछिको लागि।
- DigitalOcean droplets वा AWS EC2 — तपाईंले machine व्यवस्थापन गर्नुहुन्छ, Docker install गर्नुहुन्छ, nginx सेट अप गर्नुहुन्छ, अपडेटहरू सम्हाल्नुहुन्छ। थप नियन्त्रण, थप काम।
Nepal-hosted विकल्पहरू।
- नेपाली cloud providers अवस्थित छन् (WorldLink, Vianet enterprise) तर 2026 सम्म तिनीहरूको Docker/serverless offerings सीमित छन्। Latency कारणहरूको लागि, Singapore वा Mumbai Nepal को पर्याप्त नजिक छन् (round-trip ~80-100 ms)।
पहिलो Nepal-facing AI service को लागि, Singapore मा Fly.io सामान्यतया सही call हो। Latency राम्रो छ, free tier real छ, र deployment एक command हो।
चरण 3 — Deploy
Fly.io लाई उदाहरणको रूपमा:
# One-time setup
brew install flyctl # or: curl -L https://fly.io/install.sh | sh
flyctl auth login
flyctl launch # creates fly.toml interactively
flyctl launch command ले तपाईंको Dockerfile पढ्दछ, केही प्रश्नहरू सोध्दछ, र fly.toml लेख्दछ। Region छनोट गर्नुहोस्: Nepal-serving traffic को लागि sin (Singapore) वा bom (Mumbai)।
आफ्ना API keys लाई secrets को रूपमा थप्नुहोस्:
flyctl secrets set ANTHROPIC_API_KEY=sk-ant-...
flyctl secrets set OPENAI_API_KEY=sk-...
त्यसपछि:
flyctl deploy
दुई मिनेट पछि, platform ले यस्तो केही output गर्दछ:
Deployed successfully.
Visit: https://nepse-mitra.fly.dev
URL curl गर्नुहोस्:
curl https://nepse-mitra.fly.dev/summarise \
-H "Content-Type: application/json" \
-d '{"text": "...", "max_sentences": 2}'
यसले काम गर्दछ। तपाईंको service live छ।
चरण 4 — Real domain
nepse-mitra.fly.dev एक demo URL हो। एक real उत्पादको लागि, तपाईं आफ्नै domain (nepse-mitra.np, वा subdomain जस्तै api.nepse-mitra.np) चाहनुहुन्छ।
दुई-चरण प्रक्रिया:
-
Domain दर्ता गर्नुहोस्। एक
.npdomain को लागि, Mercantile वा अर्को accredited नेपाली registrar मार्फत दर्ता गर्नुहोस् (Rs 1,500/year$10/year)।.com.npजस्ता व्यक्तिगत TLDs को लागि; premium namespaces को लागि उच्च)। एक international.comको लागि, Namecheap वा Cloudflare प्रयोग गर्नुहोस् ( -
Domain लाई host तिर point गर्नुहोस्। आफ्नो DNS provider को dashboard मा, एक
Arecord (वाCNAME) थप्नुहोस् जुन तपाईंको domain तिर platform लाई point गर्दछ। Fly.io लेflyctl certs create nepse-mitra.npमा ठ्याक्कै निर्देशनहरू प्रदान गर्दछ। DNS propagate हुनको लागि 15 मिनेट पर्खनुहोस्।
Fly.io (सबै modern platforms जस्तै) ले Let’s Encrypt मार्फत स्वचालित रूपमा SSL certificate provision गर्दछ। तपाईंले HTTPS निःशुल्क पाउनुहुन्छ।
भयो। https://nepse-mitra.np ले तपाईंको summariser API फर्काउँछ।
चरण 5 — Nepal बाट verify गर्नुहोस्
Latency ले फरक पार्दछ। एक काठमाडौँ connection बाट, आफ्नो endpoint curl गर्नुहोस्:
time curl -s https://nepse-mitra.np/hello
Singapore वा Mumbai मा भए ~150-300 ms round trip अपेक्षा गर्नुहोस्। 500 ms भन्दा माथिको कुनै पनि कुराले request लामो बाटो routed भइरहेको सुझाव दिन्छ; आफ्नो host मा region settings जाँच गर्नुहोस्।
मोडेल call आफैको लागि, अर्को ~800-1500 ms थप्नुहोस् (Anthropic/OpenAI response time)। summariser call को लागि Nepal बाट कुल end-to-end: 1-2 सेकेन्ड। धेरै UI flows को लागि स्वीकार्य।
यदि तपाईं एक उत्पादलाई सर्भ गर्नुहुन्छ जहाँ sub-second responses महत्त्वपूर्ण छन् (interactive chat), streaming responses (Course 04 खण्ड 1.2 मा कभर) मा विचार गर्नुहोस् ताकि प्रयोगकर्ताले output तुरुन्त सुरु देख्न सकून्।
अब तपाईंसँग के छ
सबै दिन-1 essentials भएको एक deployed AI प्रणाली:
- Reproducible build (Docker)।
- Always-on host (managed platform)।
- Real URL (custom domain)।
- Default रूपमा HTTPS (Let’s Encrypt)।
- Nepal-acceptable latency (regional host)।
- Secrets सुरक्षित रूपमा stored (platform secrets)।
- Crash मा restart (platform-managed)।
यो एक shipped service हो। यो सानो छ — एक endpoint, एक model, एक worker pool — तर यो real हो। External प्रयोगकर्ताहरू यसमा पुग्न सक्दछन्। तपाईंले आफ्नो laptop बन्द गर्दा यो चल्दछ। यो crash भएमा restart हुन्छ। यो तपाईंको उपयोग विरुद्ध bill हुन्छ।
यहाँबाट सबै कुरा यो आकार माथि निर्माण गर्दछ।
Deploy discipline
दिन 1 बाट निर्माण गर्न लायक तीनवटा habits:
-
हरेक अर्थपूर्ण परिवर्तनमा deploy गर्नुहोस्। महिनामा एकपटक होइन। साना, बारम्बार deploys ले pipeline स्वस्थ राख्दछ र समस्याहरू साना छँदा तपाईंलाई catch गर्न दिन्छ। माथिको हरेक platform ले सेकेन्डहरूमा
flyctl deploy/git pushdeploys समर्थन गर्दछ। -
एक staging environment प्रयोग गर्नुहोस्। कुनै पनि user-facing कुराको लागि, दुई संस्करणहरू चलाउनुहोस्:
nepse-mitra.np(production) रstaging.nepse-mitra.np(जहाँ तपाईं अर्को संस्करण परीक्षण गर्नुहुन्छ)। स्टेजिङमा पहिले परीक्षण बिना कहिल्यै production मा सिधै deploy नगर्नुहोस्। -
आफ्नो deploys लाई version गर्नुहोस्। प्रत्येक deploy लाई एक संस्करण (
v0.1,v0.2.1) वा git SHA सँग tag गर्नुहोस्। तपाईंको platform ले सम्भवतः स्वचालित रूपमा यो गर्दछ। जब केही टुट्छ, तपाईं एक command मा एक ज्ञात-राम्रो संस्करणमा roll back गर्न सक्नुहुन्छ।
अब के आउँछ
तपाईंसँग एक service छ। यो चल्दछ। यसको URL छ। तर यसले cost जाँच नगरी हरेक request मा खुसीसाथ LLM call गर्दछ। Chapter 2 जहाँ wallet कथा सुरु हुन्छ: हरेक call को वास्तविक cost, budget caps, quotas, र caching — ताकि तपाईंको सुन्दर deployed service viral traffic को पहिलो दिनमा अचम्मित Rs 50,000 मासिक बिलमा नरूपान्तरित होस्।