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

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

Susan Sarandon
Susan Sarandon원래의
2025-01-17 22:17:12665검색

오늘날의 컨테이너화된 세계에서는 효율적인 백엔드 애플리케이션 배포가 중요합니다. 널리 사용되는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.