ホームページ >バックエンド開発 >Python チュートリアル >スケーラブルな Python バックエンド: uv、Docker、プリコミットを使用したコンテナ化された FastAPI アプリケーションの構築: ステップバイステップ ガイド

スケーラブルな Python バックエンド: uv、Docker、プリコミットを使用したコンテナ化された FastAPI アプリケーションの構築: ステップバイステップ ガイド

Susan Sarandon
Susan Sarandonオリジナル
2025-01-17 22:17:12614ブラウズ

今日のコンテナ化された世界では、効率的なバックエンド アプリケーションの展開が非常に重要です。人気の Python フレームワークである FastAPI は、高速で高性能な API の作成に優れています。 依存関係管理を合理化するために、パッケージ マネージャーである 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. を作成します。
  3. 仮想環境 (.venv) を作成します。 uv 必要に応じて Python インタープリターをダウンロードします。
  4. 依存関係をインストールします。

高速API

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: プリコミットフックを管理します。 .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.tomlmypyruff 構成を追加します (例は元のテキストに示されています)。 リアルタイム lint のために VS Code Ruff 拡張機能をインストールします。 この設定により、一貫したコード スタイル、型チェック、およびコミット前チェックが保証され、効率化されたワークフローが実現します。

以上がスケーラブルな Python バックエンド: uv、Docker、プリコミットを使用したコンテナ化された FastAPI アプリケーションの構築: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。