$lang['tuto'] = "பயிற்சிகள்"; ?> FastAPI க்கு பெரிய

FastAPI க்கு பெரிய கோப்புகளை பதிவேற்றும் போது டோக்கர் கம்போஸில் உள்ள 502 மோசமான கேட்வே பிழைகளை சரிசெய்தல்

Temp mail SuperHeros
FastAPI க்கு பெரிய கோப்புகளை பதிவேற்றும் போது டோக்கர் கம்போஸில் உள்ள 502 மோசமான கேட்வே பிழைகளை சரிசெய்தல்
FastAPI க்கு பெரிய கோப்புகளை பதிவேற்றும் போது டோக்கர் கம்போஸில் உள்ள 502 மோசமான கேட்வே பிழைகளை சரிசெய்தல்

கோப்பு பதிவேற்றத்தின் போது டோக்கர் 502 பிழைகளை சரிசெய்தல்

FastAPI, Docker Compose மற்றும் கோப்பு பதிவேற்றங்களுடன் பணிபுரியும் போது, ​​நீங்கள் எப்போதாவது பிழைகளை சந்திக்கலாம், குறிப்பாக பெரிய கோப்பு பதிவேற்றங்களில். டெவலப்பர்களால் புகாரளிக்கப்படும் ஒரு பொதுவான பிரச்சினை a 502 மோசமான நுழைவாயில் பிழை, குறிப்பாக 120MB .7z காப்பகம் போன்ற பெரிய கோப்புகளைப் பதிவேற்ற முயற்சிக்கும்போது.

சர்வர் நேரமுடிவுகள், டோக்கரில் உள்ளமைவு வரம்புகள் அல்லது Nginx உடன் எதிர்கொள்ளும் ப்ராக்ஸி சிக்கல்கள் போன்ற பல காரணங்களால் இந்த வகையான பிழை ஏற்படலாம். இந்த தொடர்ச்சியான பதிவேற்ற சிக்கல்களைத் தீர்ப்பதற்கு மூல காரணத்தைப் புரிந்துகொள்வது முக்கியமாகும்.

நீங்கள் பதிவேற்றங்களுக்கு FastAPI இன் Swagger UI ஐப் பயன்படுத்துகிறீர்கள் எனில், செயலியின் போது, ​​குறிப்பாக சிறிய கோப்பு பதிவேற்றங்களுடன், பயன்பாடு புதுப்பிக்க அல்லது செயலிழக்க முயற்சிப்பதை நீங்கள் கவனிக்கலாம். இந்த அறிகுறிகள் சீரற்ற நடத்தைக்கு வழிவகுக்கும் மேலும் பிழைத்திருத்தம் தேவைப்படும்.

இந்த வழிகாட்டியில், கோப்பு அளவு வரம்புகள், தலைகீழ் ப்ராக்ஸி தவறான உள்ளமைவுகள் அல்லது உங்களில் உள்ள பிற பின்தளத்தில் சிக்கல்கள் உட்பட, இந்தப் பிழைகள் எதனால் ஏற்படக்கூடும் என்பதை நாங்கள் முழுவதுமாகப் பார்ப்போம். டோக்கர் கம்போஸ் சூழல். FastAPI பயன்பாடுகளில் கோப்புப் பதிவேற்றங்களைக் கையாளும் போது மீண்டும் மீண்டும் பிழைகளைத் தடுப்பதற்கான சாத்தியமான தீர்வுகளையும் ஆராய்வோம்.

கட்டளை பயன்பாட்டின் உதாரணம்
background_tasks.add_task() இந்த FastAPI கட்டளையானது கிளையண்டிற்கு பதில் அனுப்பப்பட்ட பிறகு ஒத்திசைவின்றி இயங்கும் பின்னணி பணியை திட்டமிடுகிறது. கோப்புப் பிரித்தெடுத்தல் போன்ற நீண்ட காலப் பணிகளைக் கையாளுவதற்கு இது அவசியம்.
shutil.copyfileobj() இந்த பைதான் கட்டளை ஒரு கோப்பு பொருளின் உள்ளடக்கங்களை மற்றொன்றுக்கு திறமையாக நகலெடுக்க பயன்படுகிறது. கோப்பு பதிவேற்றங்களின் சூழலில், உள்வரும் HTTP கோரிக்கையிலிருந்து பெரிய கோப்புகளைச் சேமிக்க இது சேவையகத்தை அனுமதிக்கிறது.
client_max_body_size இந்த Nginx உத்தரவு கிளையன்ட் கோரிக்கை அமைப்பின் அதிகபட்ச அனுமதிக்கப்பட்ட அளவை அமைக்கிறது. 120MB கோப்புகள் போன்ற பெரிய பதிவேற்றங்களைக் கையாளும் போது இது மிகவும் முக்கியமானது, இந்த வரம்பை மீறினால் 413 பிழை ஏற்படும். அதை சரிசெய்வது 502 பிழைகள் போன்ற சிக்கல்களைத் தடுக்கிறது.
proxy_read_timeout ப்ராக்ஸி சர்வரில் இருந்து பதிலைப் படிப்பதற்கான காலக்கெடுவை அமைக்கும் மற்றொரு Nginx உத்தரவு. இந்த மதிப்பை அதிகரிப்பதன் மூலம் பெரிய அல்லது நீண்ட நேரம் இயங்கும் கோப்பு பதிவேற்றங்களைக் கையாளும் போது 502 மோசமான கேட்வே பிழைகளைத் தடுக்கலாம்.
uuid.uuid4() இந்த பைதான் செயல்பாடு ஒரு சீரற்ற UUID (Universally Unique Identifier) ​​உருவாக்குகிறது. கோப்பு கையாளுதலில், ஏற்கனவே உள்ள கோப்புகளை மேலெழுதுவதைத் தவிர்த்து, பதிவேற்றிய கோப்புகள் தனித்தனியாக பெயரிடப்பட்டிருப்பதை உறுதி செய்கிறது.
uvicorn --timeout-keep-alive இந்த Uvicorn கட்டளையானது, பெரிய கோப்புப் பதிவேற்றங்களின் போது இணைப்பை அதிக நேரம் உயிர்ப்புடன் வைத்திருக்க காலக்கெடுவை நீட்டிக்கிறது. இது நீண்ட செயல்பாட்டின் போது காலக்கெடுவைத் தடுக்க உதவுகிறது.
async def இந்த பைதான் முக்கிய சொல் FastAPI இல் ஒரு ஒத்திசைவற்ற செயல்பாட்டை வரையறுக்கிறது. ஒத்திசைவற்ற செயல்பாடுகளைப் பயன்படுத்துவது தடையற்ற I/O செயல்பாடுகளை அனுமதிக்கிறது, இது கோப்பு பதிவேற்றங்கள் போன்ற பணிகளை திறமையாக கையாள்வதற்கு முக்கியமானது.
HTTPException இந்த FastAPI கட்டளை ஒரு குறிப்பிட்ட நிலைக் குறியீட்டுடன் HTTP பிழையை எழுப்புகிறது. தவறான கோப்பு வகைகள் பதிவேற்றப்படும் போது அல்லது சேவையக செயலாக்கம் தோல்வியடையும் போது, ​​தனிப்பயன் பிழை செய்திகளை வழங்க இது பயன்படுகிறது.

டோக்கர் கம்போஸ் மூலம் FastAPI இல் 502 பிழைக்கான தீர்வைப் புரிந்துகொள்வது

முன்பு வழங்கப்பட்ட ஸ்கிரிப்டுகள் பெரிய கோப்புகளைப் பதிவேற்றுவதில் உள்ள சிக்கலைச் சமாளிப்பதை நோக்கமாகக் கொண்டுள்ளன, குறிப்பாக 120MB .7z காப்பகம், FastAPI மற்றும் Docker Compose வழியாக. முக்கிய கூறுகளில் ஒன்று பயன்பாடு ஆகும் பின்னணி பணிகள் FastAPI இல். அந்நியப்படுத்துவதன் மூலம் background_tasks.add_task() கட்டளை, கோப்பு பிரித்தெடுத்தல் செயல்முறை ஒத்திசைவற்ற முறையில் கையாளப்படுகிறது, அதாவது இது முக்கிய கோரிக்கை சுழற்சியைத் தடுக்காது. பெரிய கோப்புகளை செயலாக்கும் போது காலாவதி பிழைகளைத் தடுக்க இது அவசியம். இந்த அம்சம் இல்லாமல், FastAPI பிரதான தொடரிழையில் உள்ள அனைத்தையும் கையாள முயற்சிக்கும், சேவையகம் பதிலளிக்க அதிக நேரம் எடுத்தால் 502 மோசமான நுழைவாயில் பிழை ஏற்படலாம்.

மற்றொரு முக்கிய அம்சம் பயன்பாடு ஆகும் shutil.copyfileobj() பதிவேற்றப்பட்ட கோப்பை வட்டில் திறமையாக எழுதும் முறை. இந்த செயல்பாடு பெரிய கோப்புகளுக்காக வடிவமைக்கப்பட்டுள்ளது, ஏனெனில் இது கோப்பு ஸ்ட்ரீமில் இருந்து துகள்களாகப் படிக்கிறது, நினைவக ஓவர்லோடைத் தடுக்கிறது. Python இல் உள்ள UUID செயல்பாடு, மேலெழுதுவதைத் தடுக்க ஒவ்வொரு கோப்பிற்கும் ஒரு தனிப்பட்ட பெயரைப் பெறுவதை உறுதிசெய்கிறது, இது பல பயனர்கள் ஒரே நேரத்தில் கோப்புகளைப் பதிவேற்றும் சூழல்களில் முக்கியமானது. கோப்புப் பெயர் தனிப்பட்டதாக இல்லாவிட்டால், பதிவேற்றச் செயல்பாட்டின் போது கோப்பு சிதைவு அல்லது முரண்பாடுகள் போன்ற சிக்கல்களைச் சந்திக்க நேரிடும்.

டோக்கர் கம்போஸ் கோப்பு FastAPI சேவையகத்தைப் பயன்படுத்தி நேரத்தை நீட்டிக்க கட்டமைக்கப்பட்டுள்ளது uvicorn --timeout-keep-alive விருப்பம். பெரிய கோப்புகள் பதிவேற்றுவதற்கு கணிசமான நேரத்தை எடுத்துக் கொண்டாலும், சேவையகமானது கிளையண்டுடன் நீண்ட நேரம் தொடர்பை பராமரிக்க முடியும் என்பதை இந்த கட்டளை உறுதி செய்கிறது. இதை 300 வினாடிகளுக்கு (அல்லது 5 நிமிடங்கள்) அமைப்பதன் மூலம், இது டோக்கரை முன்கூட்டியே இணைப்பை மூடுவதைத் தடுக்கிறது, இது பெரும்பாலும் 502 பிழையை ஏற்படுத்துகிறது. இது நீண்ட கால செயல்முறைகளின் போது நிலைத்தன்மையை பராமரிக்க உதவுகிறது.

கடைசியாக, பெரிய கோப்பு பதிவேற்றங்களை அமைப்பதில் Nginx உள்ளமைவு முக்கிய பங்கு வகிக்கிறது வாடிக்கையாளர்_அதிகபட்ச_உடல்_அளவு 200MB க்கு உத்தரவு. இந்த மாற்றம் Nginx இயல்புநிலை வரம்பான 1MB ஐ விட பெரிய கோப்புகளை ஏற்க முடியும் என்பதை உறுதி செய்கிறது. உடன் இணைந்து ப்ராக்ஸி_ரீட்_டைம்அவுட் கட்டளை, பின்தளத்தில் சேவையகத்தின் பதிலுக்காக சேவையகத்தை நீண்ட நேரம் காத்திருக்க அனுமதிக்கிறது, இந்த அமைப்புகள் மெதுவான அல்லது பெரிய கோப்பு பரிமாற்றங்களில் இருந்து வரும் பிழைகளைத் தவிர்க்க உதவுகின்றன. ஒன்றாக, இந்த மேம்படுத்தல்கள் உங்கள் FastAPI பயன்பாடு பெரிய கோப்பு பதிவேற்றங்களை செயலிழக்காமல் அல்லது டோக்கர் கம்போஸ் சூழல்களில் 502 பிழைகளை ஏற்படுத்தாமல் கையாள முடியும் என்பதை உறுதி செய்கிறது.

டோக்கர் கம்போஸ் மூலம் FastAPI இல் பெரிய கோப்பு பதிவேற்றங்களை கையாள்வதில் 502 பிழை

தீர்வு 1: பைதான் (FastAPI) பின்-இறுதி அணுகுமுறையுடன் உகந்த கோப்பு கையாளுதல் மற்றும் பின்புலப் பணிகள்

# This FastAPI function handles large file uploads using background tasks.
from fastapi import FastAPI, UploadFile, File, BackgroundTasks, HTTPException, status
import os, shutil, uuid
from fastapi.responses import JSONResponse
app = FastAPI()
UPLOAD_DIR = "/app/uploads"
@app.post("/7zip/")
async def upload_7zip(background_tasks: BackgroundTasks, archive_file: UploadFile = File(...)):
    # Check if the uploaded file is a valid .7z file
    if not archive_file.filename.endswith(".7z"):
        raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Please upload a valid 7z file.")
    # Generate a unique filename to prevent overwrites
    archive_filename = f"{uuid.uuid4()}_{archive_file.filename}"
    archive_path = os.path.join(UPLOAD_DIR, archive_filename)
    try:
        # Save the uploaded file to the server
        with open(archive_path, "wb") as buffer:
            shutil.copyfileobj(archive_file.file, buffer)
        # Add file extraction to background tasks to avoid timeouts
        background_tasks.add_task(extract_file, archive_path)
        return JSONResponse({"message": "File uploaded successfully, extraction is in progress."})
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"An error occurred while processing the 7z file: {str(e)}")
# Background task to extract files
def extract_file(archive_path: str):
    # Placeholder function for extracting 7z files
    pass

பெரிய பதிவேற்றங்களைக் கையாள Nginx ரிவர்ஸ் ப்ராக்ஸியை மேம்படுத்துகிறது

தீர்வு 2: பெரிய கோப்பு அளவு பதிவேற்றங்களுக்கான Nginx ரிவர்ஸ் ப்ராக்ஸி உள்ளமைவு

# Adjusting Nginx configuration to allow larger file uploads
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://app:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    # Set the maximum allowed upload size to 200MB
    client_max_body_size 200M;
    proxy_read_timeout 300;
}

பெரிய பதிவேற்றங்களின் போது காலக்கெடுவைத் தவிர்க்க டோக்கர் கம்போஸை மேம்படுத்துதல்

தீர்வு 3: பெரிய கோப்பு கையாளுதலுக்கான கூடுதல் காலக்கெடுவுடன் டோக்கர் கம்போஸ் உள்ளமைவு

# Docker Compose file with increased timeout to avoid 502 errors
version: '3'
services:
  app:
    container_name: fastapi_app
    build: .
    command: bash -c "uvicorn main:app --host 0.0.0.0 --port 8000 --timeout-keep-alive=300"
    ports:
      - "8000:8000"
    volumes:
      - ./uploads:/app/uploads
    depends_on:
      - db
    restart: always
    environment:
      - FASTAPI_ENV=production
  db:
    image: postgres
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass

டோக்கர் கம்போஸ் மூலம் FastAPI இல் கோப்பு அளவு சிக்கல்களை சமாளித்தல்

கோப்பு பதிவேற்றங்களை பாதிக்கும் ஒரு முக்கியமான அம்சம் டோக்கர் கம்போஸ் சூழல்கள் என்பது நினைவகம் மற்றும் காலக்கெடுவுகளுக்கான சேவையக வரம்புகளைக் கையாள்வதாகும். சர்வர் காலக்கெடு சரிசெய்தல் மற்றும் ரிவர்ஸ் ப்ராக்ஸி உள்ளமைவுகளுக்கு கூடுதலாக, கிடைக்கக்கூடிய நினைவகம் மற்றும் CPU ஆதாரங்கள் போன்ற கணினி-நிலைக் கட்டுப்பாடுகளாலும் கோப்பு பதிவேற்றங்கள் பாதிக்கப்படலாம். 120MB .7z காப்பகம் போன்ற பெரிய கோப்பைப் பதிவேற்றும் போது, ​​சேவையகம் நினைவகச் செயலிழப்பு அல்லது அதிக CPU பயன்பாட்டில் இயங்கலாம், இதனால் அது செயலிழக்கச் செய்யலாம் அல்லது செயல்முறையின் நடுப்பகுதியில் புதுப்பிக்கலாம். பல பயனர்கள் ஒரே நேரத்தில் கோப்புகளைப் பதிவேற்றும்போது இது மேலும் அதிகரிக்கலாம்.

மற்றொரு முக்கியமான விஷயம் என்னவென்றால், கன்டெய்னரைசேஷன் காரணமாக கோப்பு பதிவேற்ற செயல்திறன் குறையக்கூடும். டோக்கர் ஒரு கொள்கலனுக்கு ஆதாரங்களை தனிமைப்படுத்துகிறது, அதாவது, சரியாக உள்ளமைக்கப்படாவிட்டால், பெரிய கோப்புகளை திறமையாக கையாள ஒரு கொள்கலனில் போதுமான ஆதாரங்கள் இருக்காது. நீங்கள் அனுபவித்த 16-17 MB வரம்பு போன்ற சிறிய கோப்புகளைக் கையாளும் போது இது சேவையகத்தைப் புதுப்பித்தல் அல்லது செயலிழக்கச் செய்யலாம். உங்கள் டோக்கர் கொள்கலன்களில் தேவையான CPU மற்றும் நினைவக வளங்கள் ஒதுக்கப்பட்டுள்ளதா என்பதை உறுதிப்படுத்துவது அவசியம், மேலும் வரம்புகள் நிஜ உலகக் காட்சிகளில் சோதிக்கப்பட வேண்டும்.

இறுதியாக, FastAPI இன் கோரிக்கை கையாளுதலை ஸ்ட்ரீமிங் நுட்பங்களைப் பயன்படுத்தி மேம்படுத்தலாம், இது துண்டிக்கப்பட்ட கோப்பு பதிவேற்றங்களை அனுமதிக்கிறது. இது சர்வரின் நினைவகத்தை அதிகப்படுத்தாமல் பெரிய கோப்புகளை கையாள உதவும். Nginx, Uvicorn மற்றும் Docker வள ஒதுக்கீடுகளின் சரியான உள்ளமைவுடன் இணைந்து, ஸ்ட்ரீமிங் உங்கள் API ஐ மேலும் வலுவாக மாற்றும். இந்த கூடுதல் மேம்படுத்தல்களைச் சேர்ப்பது, உற்பத்திச் சூழல்களில் பெரிய அல்லது ஒரே நேரத்தில் கோப்பு பதிவேற்றங்களைக் கையாளும் போது சிறந்த நிலைத்தன்மையை உறுதி செய்கிறது.

FastAPI மற்றும் Docker Compose File Uploads பற்றி அடிக்கடி கேட்கப்படும் கேள்விகள்

  1. பெரிய கோப்புகளைப் பதிவேற்றும்போது டோக்கர் ஏன் 502 பிழையைக் கொடுக்கிறது?
  2. பிழை ஏற்படலாம் timeout issues அல்லது டோக்கரில் வளக் கட்டுப்பாடுகள். சரிசெய்தல் uvicorn --timeout-keep-alive மற்றும் proxy_read_timeout Nginx இல் இதைத் தணிக்க உதவும்.
  3. FastAPI இல் கோப்பு பதிவேற்ற அளவு வரம்பை எவ்வாறு அதிகரிப்பது?
  4. பெரிய பதிவேற்றங்களை அனுமதிக்க, நீங்கள் மாற்ற வேண்டும் client_max_body_size உங்கள் Nginx உள்ளமைவில் பெரிய கோப்புகளுக்கு Docker மற்றும் FastAPI சரியாக உள்ளமைக்கப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும்.
  5. பெரிய கோப்பு பதிவேற்றங்களின் போது பின்னணி பணிகள் காலாவதியைத் தடுக்க முடியுமா?
  6. ஆம், FastAPI ஐப் பயன்படுத்துதல் background_tasks.add_task() பிரதான தொடரிழையைத் தடுப்பதைத் தவிர்க்கவும், நேரம் முடிவடைவதைத் தடுக்கவும் செயலாக்கப் பணிகளை ஆஃப்லோடு செய்ய உதவும்.
  7. சிறிய கோப்புகளைப் பதிவேற்றும்போது எனது டோக்கர் கண்டெய்னர் ஏன் புதுப்பிக்கப்படுகிறது?
  8. கொள்கலனில் உள்ள வள வரம்புகள் காரணமாக இது நிகழலாம். கொள்கலனில் போதுமான நினைவகம் மற்றும் CPU ஒதுக்கப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும்.
  9. பெரிய கோப்புகளுக்கு வேறு என்ன FastAPI உள்ளமைவுகள் உதவும்?
  10. ஸ்ட்ரீமிங் பதிவேற்றங்களை இயக்குவதன் மூலமும் ஒத்தியங்காமையைப் பயன்படுத்துவதன் மூலமும் FastAPI ஐ மேம்படுத்தலாம் async def I/O செயல்பாடுகளை திறமையாக கையாளும் செயல்பாடுகள்.

டோக்கரில் 502 பிழைகளைத் தீர்ப்பதற்கான இறுதி எண்ணங்கள்

டோக்கரில் உள்ள FastAPI இல் பெரிய கோப்புப் பதிவேற்றங்களைக் கையாளுவதற்கு, சர்வர் நேரமுடிவுகள், கோப்பு அளவு வரம்புகள் மற்றும் கொள்கலன் வள ஒதுக்கீடு ஆகியவற்றின் சிந்தனைமிக்க உள்ளமைவு தேவைப்படுகிறது. இந்த அமைப்புகளைச் சரிசெய்வது பதிவேற்றங்களின் போது 502 பிழைகளைத் தவிர்க்க உதவும்.

டோக்கர் கொள்கலன்களில் போதுமான நினைவகம் அல்லது CPU இல்லாவிடில் சிறிய பதிவேற்றங்களும் சிக்கல்களை ஏற்படுத்தலாம். முறையான ஆதார வரம்புகளைச் செயல்படுத்துவது, ஒத்திசைவற்ற செயலாக்க நுட்பங்களுடன், மென்மையான கோப்பு கையாளுதல் மற்றும் கணினி நிலைத்தன்மையை உறுதி செய்கிறது.

டோக்கர் 502 பிழை தீர்வுகளுக்கான குறிப்புகள் மற்றும் ஆதாரங்கள்
  1. FastAPI இன் பின்னணி பணிகள் மற்றும் பெரிய பதிவேற்றங்களுக்கான ஒத்திசைவு கோப்பு கையாளுதல் ஆகியவற்றை அதன் அதிகாரப்பூர்வ ஆவணங்களுடன் விரிவாக விளக்குகிறது. FastAPI பின்னணி பணிகள்
  2. 502 பிழைகளைத் தடுக்க, வாடிக்கையாளர்_max_body_size மற்றும் ப்ராக்ஸி அமைப்புகளை அதிகரிப்பது போன்ற Nginx உள்ளமைவுகள் பற்றிய நுண்ணறிவுகளை வழங்குகிறது. Nginx கிளையண்ட் அதிகபட்ச உடல் அளவு
  3. டோக்கர் கம்போஸ் ரிசோர்ஸ் மேனேஜ்மென்ட் மற்றும் பெரிய கோப்புப் பதிவேற்றங்களைக் கையாள கன்டெய்னர்களை உள்ளமைப்பதற்கான சிறந்த நடைமுறைகளைப் பற்றி விவாதிக்கிறது. டோக்கர் எழுதும் ஆவணம்
  4. அதிகாரப்பூர்வ Uvicorn ஆவணங்கள் நீட்டிக்கப்பட்ட கோப்பு பதிவேற்றங்களின் போது இணைப்புகளை உயிர்ப்புடன் வைத்திருப்பதற்கான சர்வர் காலக்கெடுவை எவ்வாறு சரிசெய்வது என்பதை விளக்குகிறது. யுவிகார்ன் டைம்அவுட் அமைப்புகள்