Rumah > pembangunan bahagian belakang > Tutorial Python > Bahagian belakang Python boleh skala: Membina Aplikasi FastAPI dalam kontena dengan uv, Docker dan prakomit: panduan langkah demi langkah

Bahagian belakang Python boleh skala: Membina Aplikasi FastAPI dalam kontena dengan uv, Docker dan prakomit: panduan langkah demi langkah

Susan Sarandon
Lepaskan: 2025-01-17 22:17:12
asal
612 orang telah melayarinya

Dalam dunia kontena hari ini, penggunaan aplikasi bahagian belakang yang cekap adalah penting. FastAPI, rangka kerja Python yang popular, cemerlang dalam mencipta API yang pantas dan berprestasi tinggi. Kami akan menggunakan uv, pengurus pakej, untuk menyelaraskan pengurusan pergantungan.

uv

Dengan mengandaikan anda telah memasang uv dan Docker, mari buat apl kami: uv init simple-app. Ini menjana:

<code>simple-app/
├── .python-version
├── README.md
├── hello.py
└── pyproject.toml</code>
Salin selepas log masuk

pyproject.toml memegang metadata projek:

<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>
Salin selepas log masuk

Tambah kebergantungan projek pada 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>
Salin selepas log masuk

Bahagian [tool.uv] mentakrifkan kebergantungan pembangunan yang dikecualikan semasa penggunaan. Jalankan uv sync ke:

  1. Buat uv.lock.
  2. Buat persekitaran maya (.venv). uv memuat turun penterjemah Python jika perlu.
  3. Pasang kebergantungan.

FastAPI

Buat struktur aplikasi FastAPI:

<code>recipe-app/
├── app/
│   ├── main.py
│   ├── __init__.py
│   └── ...
├── .python-version
├── README.md
└── pyproject.toml</code>
Salin selepas log masuk

Dalam 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>
Salin selepas log masuk

Lari dengan: uv run fastapi dev app/main.py. Anda akan melihat output yang serupa dengan:

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

Aksesnya di https://www.php.cn/link/c099034308f2a231c24281de338726c1.

Pelabuh

Jom Berlabuh. Kami akan membangunkan dalam bekas. Tambahkan 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>
Salin selepas log masuk

Untuk pengurusan kontena yang lebih mudah, gunakan 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>
Salin selepas log masuk

Buat fail .env dengan pembolehubah persekitaran. Lari dengan: docker compose up --build.

[tool.uv] dan Alat Pembangunan

Bahagian [tool.uv] dalam pyproject.toml menyenaraikan alatan pembangunan:

  • pytest: Rangka kerja ujian (di luar skop di sini).
  • mypy: Penyemak jenis statik. Jalankan secara manual: uv run mypy app.
  • ruff: Liter cepat (menggantikan berbilang alatan).
  • pra-komit: Menguruskan cangkuk pra-komit. Cipta .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>
Salin selepas log masuk

Tambah pyproject.toml konfigurasi untuk mypy dan ruff (contoh disediakan dalam teks asal). Pasang sambungan VS Code Ruff untuk linting masa nyata. Persediaan ini memastikan gaya kod yang konsisten, semakan jenis dan semakan prakomit untuk aliran kerja yang diperkemas.

Atas ialah kandungan terperinci Bahagian belakang Python boleh skala: Membina Aplikasi FastAPI dalam kontena dengan uv, Docker dan prakomit: panduan langkah demi langkah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan