ডকুমেন্টেশননিরাপত্তা এবং স্থাপনা

স্থাপন করুন

দুটি আদেশ: 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 - ধীরে ধীরে রেন্ডার হতে পারে এমন একটি পৃষ্ঠার পরিবর্তে:

src/routes/api/health.py
async def GET():    return {"status": "ok"}

একটি নিয়ামক যোগ করুন, এবং প্রোব /health/ - এমন একটি দৃশ্যের পরিবর্তে যা ধীরে ধীরে রেন্ডার হতে পারে:

src/apps/health_controller.py
from nexy.decorators import Controller  @Controller("/health")class HealthController:    async def get(self):        return {"status": "ok"}

এটিকে রুট মডিউলের controllers তালিকাভুক্ত করুন।

অন্তর্নির্মিত শেষ পয়েন্ট

একটি লোড ব্যালেন্সার বা কুবারনেটস দুটি প্রশ্ন জিজ্ঞাসা করে: প্রক্রিয়াটি কি জীবন্ত, এবং এটি ট্র্যাফিক পেতে পারে? সেট useHealth এবং Nexy উভয়ই উত্তর দেয়, কোনো হ্যান্ডলার ফাইল এবং কোনো নিয়ামক ছাড়াই:

nexyconfig.py
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 এর অনুসন্ধানগুলি তাদের দিকে নির্দেশ করুন:

k8s/deployment.yaml
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 build CI-তে, আপনি সার্ভারে রেন্ডার করার আশা করা রুটের জন্য কোনো সতর্কতা নেই
  • nx start কোড 1 দিয়ে প্রস্থান করে, এবং কিছুই শুরু করে না, যখন একটি রুট ফাইল লোড করতে পারে না
  • NEXY_ACTION_SECRET সেট, বা __nexy__/action.key বিল্ডের সাথে রাখা
  • useDocs = False উত্পাদনে যদি API স্কিমা সর্বজনীন হওয়া উচিত নয়
  • useTrustedHost এবং useHTTPSRedirect পাবলিক স্থাপনার জন্য সেট
  • useHealth = True যখন একটি লোড ব্যালেন্সার বা কুবারনেটস অ্যাপটি অনুসন্ধান করে
  • __nexy__/ প্রতিশ্রুতিবদ্ধ নয়

পরবর্তী পদক্ষেপ

GitHub-এ সম্পাদনা করুন

Enter ফলাফল খোলে, Esc বন্ধ করে।