Heim > Backend-Entwicklung > Python-Tutorial > Skalierbares Python-Backend: Erstellen einer containerisierten FastAPI-Anwendung mit UV, Docker und Pre-Commit: eine Schritt-für-Schritt-Anleitung

Skalierbares Python-Backend: Erstellen einer containerisierten FastAPI-Anwendung mit UV, Docker und Pre-Commit: eine Schritt-für-Schritt-Anleitung

Susan Sarandon
Freigeben: 2025-01-17 22:17:12
Original
613 Leute haben es durchsucht

In der heutigen Containerwelt ist eine effiziente Bereitstellung von Backend-Anwendungen von entscheidender Bedeutung. FastAPI, ein beliebtes Python-Framework, zeichnet sich durch die Erstellung schneller, leistungsstarker APIs aus. Wir verwenden uv, einen Paketmanager, um das Abhängigkeitsmanagement zu optimieren.

UV

Angenommen, Sie haben uv und Docker installiert, erstellen wir unsere App: uv init simple-app. Dies erzeugt:

<code>simple-app/
├── .python-version
├── README.md
├── hello.py
└── pyproject.toml</code>
Nach dem Login kopieren

pyproject.toml enthält Projektmetadaten:

<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>
Nach dem Login kopieren

Projektabhängigkeiten hinzufügen zu 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>
Nach dem Login kopieren

Der Abschnitt [tool.uv] definiert Entwicklungsabhängigkeiten, die während der Bereitstellung ausgeschlossen werden. Führen Sie uv sync zu:

aus
  1. Erstellen uv.lock.
  2. Erstellen Sie eine virtuelle Umgebung (.venv). uv lädt bei Bedarf einen Python-Interpreter herunter.
  3. Abhängigkeiten installieren.

FastAPI

Erstellen Sie die FastAPI-Anwendungsstruktur:

<code>recipe-app/
├── app/
│   ├── main.py
│   ├── __init__.py
│   └── ...
├── .python-version
├── README.md
└── pyproject.toml</code>
Nach dem Login kopieren

In 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>
Nach dem Login kopieren

Laufen mit: uv run fastapi dev app/main.py. Sie erhalten eine Ausgabe ähnlich der folgenden:

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

Zugriff unter https://www.php.cn/link/c099034308f2a231c24281de338726c1.

Docker

Lassen Sie uns Dockerisieren. Wir entwickeln in Containern. Fügen Sie ein Dockerfile:

hinzu
<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>
Nach dem Login kopieren

Für eine einfachere Containerverwaltung verwenden Sie 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>
Nach dem Login kopieren

Erstellen Sie eine .env-Datei mit Umgebungsvariablen. Ausführen mit: docker compose up --build.

[tool.uv] und Entwicklungstools

Der Abschnitt [tool.uv] in pyproject.toml listet Entwicklungstools auf:

  • pytest: Test-Framework (hier außerhalb des Geltungsbereichs).
  • mypy: Statischer Typprüfer. Manuell ausführen: uv run mypy app.
  • ruff:Schneller Linter (ersetzt mehrere Werkzeuge).
  • Pre-Commit: Verwaltet Pre-Commit-Hooks. Erstellen Sie .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>
Nach dem Login kopieren

Fügen Sie pyproject.toml-Konfigurationen für mypy und ruff hinzu (Beispiel im Originaltext). Installieren Sie eine VS Code Ruff-Erweiterung für Echtzeit-Linting. Dieses Setup gewährleistet einen konsistenten Codestil, Typprüfung und Pre-Commit-Prüfungen für einen optimierten Arbeitsablauf.

Das obige ist der detaillierte Inhalt vonSkalierbares Python-Backend: Erstellen einer containerisierten FastAPI-Anwendung mit UV, Docker und Pre-Commit: eine Schritt-für-Schritt-Anleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage