ডকুমেন্টেশননিরাপত্তা এবং স্থাপনা
স্থাপন করুন
দুটি আদেশ: nx build শিল্পকর্ম তৈরি করে, nx start তাদের পরিবেশন করে।
আপনি শুরু করার আগে: একটি প্রকল্প যা স্থানীয়ভাবে তৈরি করে nx build, এবং - ক্লায়েন্ট পৃষ্ঠাগুলির জন্য - ফ্রন্টএন্ড টুলচেন যা nx new ইনস্টল করা হয়।
nx buildnx start --host 0.0.0.0 --port 8000
রানটাইমের প্রয়োজন শুধুমাত্র Python। Uvicorn কম্পাইল করা অ্যাপ এবং স্ট্যাটিক সম্পদ পরিবেশন করে; কোন নোড প্রক্রিয়া এবং কোন Vite প্রক্রিয়া জড়িত নয়।
বিল্ড কি উত্পাদন করে
__nexy__/ কম্পাইল করা রুট মডিউল, __nexy__/client/ এর অধীনে ক্লায়েন্ট বান্ডিল এবং ফ্রেমওয়ার্ক রুটের জন্য পূর্ব-রেন্ডার করা HTML রয়েছে। প্রোজেক্টটি কপি করুন - সোর্স প্লাস __nexy__/ - অথবা ইমেজের ভিতরে তৈরি করুন।
Docker
বিল্ড স্টেজে Node প্রয়োজন (Vite] এবং Python (কম্পাইলারের জন্য)। রানটাইম পর্যায়ে শুধুমাত্র প্রয়োজন Python।
FROM node:22-bookworm-slim AS buildWORKDIR /app COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uvCOPY pyproject.toml uv.lock ./RUN uv sync --frozen --no-install-project COPY . .RUN uv sync --frozen && uv run nx build FROM python:3.13-slimWORKDIR /appCOPY --from=build /app /appENV PATH="/app/.venv/bin:$PATH" EXPOSE 8000CMD ["nx", "start", "--host", "0.0.0.0", "--port", "8000"]uv একটি পরিচালিত Python নিয়ে আসে যখন বেস ইমেজের কোনোটিই থাকে না, এই কারণেই একটি নোড ইমেজ থেকে বিল্ড স্টেজ শুরু হতে পারে।
একটি বিপরীত প্রক্সি পিছনে
লোকালহোস্টে nx start চালান এবং Nginx, Caddy বা প্ল্যাটফর্ম প্রক্সিকে TLS বন্ধ করতে দিন:
nx start --host 127.0.0.1 --port 8000
নিশ্চিত করুন যে আপনি যদি SOCKET হ্যান্ডলার ব্যবহার করেন তবে প্রক্সি ফরওয়ার্ড WebSocket আপগ্রেড হয় এবং এটি মূল হোস্টকে ফরোয়ার্ড করে - FastAPI এটি থেকে সম্পূর্ণ URL তৈরি করে।
স্বাস্থ্য পরীক্ষা
একটি হ্যান্ডলার ফাইল যোগ করুন, src/routes/api/health.py, এবং প্রোব /api/health - ধীরে ধীরে রেন্ডার হতে পারে এমন একটি পৃষ্ঠার পরিবর্তে:
async def GET(): return {"status": "ok"}একটি নিয়ামক যোগ করুন, এবং প্রোব /health/ - এমন একটি দৃশ্যের পরিবর্তে যা ধীরে ধীরে রেন্ডার হতে পারে:
from nexy.decorators import Controller @Controller("/health")class HealthController: async def get(self): return {"status": "ok"}এটিকে রুট মডিউলের controllers তালিকাভুক্ত করুন।
অন্তর্নির্মিত শেষ পয়েন্ট
একটি লোড ব্যালেন্সার বা কুবারনেটস দুটি প্রশ্ন জিজ্ঞাসা করে: প্রক্রিয়াটি কি জীবন্ত, এবং এটি ট্র্যাফিক পেতে পারে? সেট useHealth এবং Nexy উভয়ই উত্তর দেয়, কোনো হ্যান্ডলার ফাইল এবং কোনো নিয়ামক ছাড়াই:
from nexy.core.models import NexyConfigModel class NexyConfig(NexyConfigModel): useHealth = True| শেষবিন্দু | উত্তর 200 | উত্তর 503 |
|---|---|---|
GET /health/live |
যখন প্রক্রিয়া উত্তর দেয় | কখনই |
GET /health/ready |
আবেদন শুরু হয়ে গেলে | যখন এটি শুরু হয়, এবং একবার সার্ভার এটি বন্ধ করতে বলে |
Nexy গ্যারান্টি দেয় যে /health/ready সার্ভারের স্টার্টআপ এবং শাটডাউন অনুসরণ করে।
Nexy গ্যারান্টি দেয় যে উভয় এন্ডপয়েন্টই অ্যাক্সেস লগের বাইরে এবং OpenAPI স্কিমার বাইরে থাকবে।
Nexy গ্যারান্টি দেয় যে উভয় এন্ডপয়েন্টই useTrustedHost এবং useHTTPSRedirect এর আগে উত্তর দেয়, তাই একটি পডের ঠিকানায় HTTP এর মাধ্যমে প্রেরিত একটি প্রোব প্রত্যাখ্যান করা হয় না।
নিয়ম অনুসারে আপনি আপনার নিজের রুটগুলি বন্ধ রাখেন /health/live এবং /health/ready যখন useHealth চালু থাকে: প্রথমে Nexy উত্তরের শেষ পয়েন্টগুলি। useHealth ডিফল্টরূপে False হয়, তাই একটি প্রকল্প যা এটি সেট করে না উভয় পথই রাখে।
আপনার অ্যাপ্লিকেশনটি কিসের উপর নির্ভর করে তা পরীক্ষা করার জন্য দায়ী: /health/ready সার্ভারের জীবনচক্র রিপোর্ট করে, ডাটাবেসের অবস্থা নয়।
একটি কুবারনেটিস Deployment এর অনুসন্ধানগুলি তাদের দিকে নির্দেশ করুন:
apiVersion: apps/v1kind: Deploymentmetadata: name: appspec: replicas: 2 selector: matchLabels: app: app template: metadata: labels: app: app spec: containers: - name: app image: registry.example.com/app:1.0 ports: - containerPort: 8000 livenessProbe: httpGet: path: /health/live port: 8000 periodSeconds: 10 readinessProbe: httpGet: path: /health/ready port: 8000 periodSeconds: 5স্ট্যাটিক হোস্টিং
প্রতিটি পৃষ্ঠা এইচটিএমএল, কিন্তু নেক্সি রাউটিং এবং API হ্যান্ডলারের জন্য একটি সার্ভার ধরে নেয়।
চেকলিস্ট
-
nx buildCI-তে, আপনি সার্ভারে রেন্ডার করার আশা করা রুটের জন্য কোনো সতর্কতা নেই -
nx startকোড 1 দিয়ে প্রস্থান করে, এবং কিছুই শুরু করে না, যখন একটি রুট ফাইল লোড করতে পারে না -
NEXY_ACTION_SECRETসেট, বা__nexy__/action.keyবিল্ডের সাথে রাখা -
useDocs = Falseউত্পাদনে যদি API স্কিমা সর্বজনীন হওয়া উচিত নয় -
useTrustedHostএবংuseHTTPSRedirectপাবলিক স্থাপনার জন্য সেট -
useHealth = Trueযখন একটি লোড ব্যালেন্সার বা কুবারনেটস অ্যাপটি অনুসন্ধান করে -
__nexy__/প্রতিশ্রুতিবদ্ধ নয়
পরবর্তী পদক্ষেপ
- কনফিগ: HTTPS, বিশ্বস্ত হোস্ট, সেশন
- ফ্রন্টেন্ড: যা Vite তৈরি করে
- টেস্টিং: CI তে চালানোর কমান্ড