> 백엔드 개발 > 파이썬 튜토리얼 > 확장 가능한 Python 백엔드: uv, Docker 및 사전 커밋을 사용하여 컨테이너화된 FastAPI 애플리케이션 구축: 단계별 가이드

확장 가능한 Python 백엔드: uv, Docker 및 사전 커밋을 사용하여 컨테이너화된 FastAPI 애플리케이션 구축: 단계별 가이드

Susan Sarandon
풀어 주다: 2025-01-17 22:17:12
원래의
613명이 탐색했습니다.

오늘날의 컨테이너화된 세계에서는 효율적인 백엔드 애플리케이션 배포가 중요합니다. 널리 사용되는 Python 프레임워크인 FastAPI는 빠른 고성능 API를 만드는 데 탁월합니다. 종속성 관리를 간소화하기 위해 패키지 관리자인 uv을 사용하겠습니다.

uv

uv과 Docker를 설치했다고 가정하고 uv init simple-app 앱을 만들어 보겠습니다. 이는 다음을 생성합니다:

<code>simple-app/
├── .python-version
├── README.md
├── hello.py
└── pyproject.toml</code>
로그인 후 복사

pyproject.toml에는 프로젝트 메타데이터가 있습니다.

<code class="language-toml">[project]
name = "simple-app"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = []</code>
로그인 후 복사

pyproject.toml에 프로젝트 종속성 추가:

<code class="language-toml">dependencies = [
    "fastapi[standard]=0.114.2",
    "python-multipart=0.0.7",
    "email-validator=2.1.0",
    "pydantic>2.0",
    "SQLAlchemy>2.0",
    "alembic=1.12.1",
]

[tool.uv]
dev-dependencies = [
    "pytest=7.4.3",
    "mypy=1.8.0",
    "ruff=0.2.2",
    "pre-commit=4.0.0",
]</code>
로그인 후 복사

[tool.uv] 섹션에서는 배포 중에 제외되는 개발 종속성을 정의합니다. uv sync을 실행하여 다음을 수행합니다.

  1. 만들기 uv.lock.
  2. 가상 환경을 만듭니다(.venv). uv 필요한 경우 Python 인터프리터를 다운로드합니다.
  3. 종속성을 설치합니다.

FastAPI

FastAPI 애플리케이션 구조 만들기:

<code>recipe-app/
├── app/
│   ├── main.py
│   ├── __init__.py
│   └── ...
├── .python-version
├── README.md
└── pyproject.toml</code>
로그인 후 복사

app/main.py에서:

<code class="language-python">from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Hello(BaseModel):
    message: str

@app.get("/", response_model=Hello)
async def hello() -> Hello:
    return Hello(message="Hi, I am using FastAPI")</code>
로그인 후 복사

다음으로 실행: uv run fastapi dev app/main.py. 다음과 유사한 출력이 표시됩니다.

Scalable Python backend: Building a containerized FastAPI Application with uv, Docker, and pre-commit: a step-by-step guide

https://www.php.cn/link/c099034308f2a231c24281de338726c1에서 액세스하세요.

도커

Dockerize해 보겠습니다. 우리는 컨테이너 내에서 개발할 것입니다. Dockerfile 추가:

<code class="language-dockerfile">FROM python:3.11-slim

ENV PYTHONUNBUFFERED=1

COPY --from=ghcr.io/astral-sh/uv:0.5.11 /uv /uvx /bin/

ENV UV_COMPILE_BYTE=1
ENV UV_LINK_MODE=copy

WORKDIR /app

ENV PATH="/app/.venv/bin:$PATH"

COPY ./pyproject.toml ./uv.lock ./.python-version /app/

RUN --mount=type=cache,target=/root/.cache/uv \
    --mount=type=bind,source=uv.lock,target=uv.lock \
    --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
    uv sync --frozen --no-install-project --no-dev

COPY ./app /app/app

RUN --mount=type=cache,target=/root/.cache/uv \
    uv sync --frozen --no-dev

CMD ["fastapi", "dev", "app/main.py", "--host", "0.0.0.0"]</code>
로그인 후 복사

더 쉬운 컨테이너 관리를 위해 docker-compose.yaml:

를 사용하세요.
<code class="language-yaml">services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    working_dir: /app
    volumes:
      - ./app:/app/app
    ports:
      - "${APP_PORT:-8000}:8000"
    environment:
      - DATABASE_URL=${DATABASE_URL}
    depends_on:
      - postgres

  postgres:
    image: postgres:15
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data: {}</code>
로그인 후 복사

환경 변수를 사용하여 .env 파일을 만듭니다. 다음으로 실행: docker compose up --build.

[tool.uv] 및 개발 도구

[tool.uv]pyproject.toml 섹션에는 개발 도구가 나열되어 있습니다.

  • pytest: 테스트 프레임워크(여기서는 범위를 벗어남).
  • mypy: 정적 유형 검사기입니다. 수동으로 실행: uv run mypy app.
  • ruff: 빠른 린터(여러 도구 대체).
  • 사전 커밋: 사전 커밋 후크를 관리합니다. .pre-commit-config.yaml:
  • 만들기
<code class="language-yaml">repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
      - id: check-added-large-files
      - id: check-toml
      - id: check-yaml
        args:
          - --unsafe
      - id: end-of-file-fixer
      - id: trailing-whitespace
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.8.6
    hooks:
      - id: ruff
        args: [--fix]
      - id: ruff-format</code>
로그인 후 복사

pyproject.tomlmypy에 대한 ruff 구성을 추가합니다(원본 텍스트에 제공된 예). 실시간 Linting을 위해 VS Code Ruff 확장을 설치합니다. 이 설정을 통해 일관된 코드 스타일, 유형 확인, 커밋 전 확인이 가능해 워크플로가 간소화됩니다.

위 내용은 확장 가능한 Python 백엔드: uv, Docker 및 사전 커밋을 사용하여 컨테이너화된 FastAPI 애플리케이션 구축: 단계별 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿