Развертывание приложения — это важная часть разработки, которая определяет, как ваше приложение будет работать в реальных условиях, в продакшн-среде. В этой статье мы рассмотрим ключевые шаги для развертывания FastAPI-приложения, подготовку проекта к продакшену, использование Docker и Docker Compose для упаковки приложения, настройку серверов для продакшн-использования с Gunicorn и Uvicorn, а также настройку CI/CD для автоматизации развертывания. В конце статьи мы реализуем практический пример, развернув приложение с использованием Docker на сервере.
Подготовка проекта к продакшену
Перед тем как развернуть ваше FastAPI-приложение в продакшн-среду, нужно удостовериться, что оно готово к работе под нагрузкой и в реальных условиях. Некоторые важные моменты:
Установка зависимостей
Убедитесь, что все зависимости для вашего проекта указаны в файле requirements.txt или pyproject.toml (для Poetry). Это важно для того, чтобы на сервере можно было быстро установить все необходимые библиотеки.
fastapi
uvicorn
gunicorn
pydantic
sqlalchemyНастройка переменных окружения
Для работы приложения в продакшн-режиме рекомендуется использовать переменные окружения для конфигурации, а не жестко прописывать настройки в коде. Например, настройки базы данных, секреты и ключи API должны быть вынесены в переменные окружения.
from pydantic import BaseSettings
class Settings(BaseSettings):
database_url: str
secret_key: str
class Config:
env_file = ".env"
settings = Settings()Логирование
Не забывайте о логировании — важный аспект для мониторинга приложения в продакшн-среде. FastAPI и Python предлагают простые способы для настройки логирования:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@app.get("/")
def read_root():
logger.info("Root endpoint accessed")
return {"message": "Hello World"}Развертывание с Docker и Docker Compose
Что такое Docker?
Docker — это инструмент для контейнеризации, который позволяет упаковать приложение с его зависимостями в изолированный контейнер. Контейнеры гарантируют, что ваше приложение будет работать одинаково в любой среде, независимо от конфигурации хоста.
Шаг 1: Написание Dockerfile
📢 Подписывайтесь на наш Telegram-канал.
Там вы найдете анонсы обучающих статей и видео, готовый код для ваших проектов и увлекательные курсы. Ничего лишнего — только практика, вдохновение и развитие.
Первым шагом для контейнеризации вашего приложения будет создание Dockerfile. Это скрипт, который определяет, как будет собираться контейнер для вашего приложения.
# Используем официальный образ Python
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app/
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]Шаг 2: Написание docker-compose.yml
Если ваше приложение использует дополнительные сервисы, например, базу данных, вы можете использовать Docker Compose для координации всех контейнеров.
version: "3.9"
services:
app:
build: .
ports:
- "8000:8000"
depends_on:
- db
environment:
DATABASE_URL: "postgresql://user:password@db/mydatabase"
db:
image: postgres:13
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: user
POSTGRES_PASSWORD: password
ports:
- "5432:5432"Шаг 3: Сборка и запуск контейнеров
Соберите и запустите контейнеры с помощью команды:
docker-compose up --buildНастройка Gunicorn и Uvicorn
Gunicorn — это производительный WSGI-сервер для Python-приложений. Для ASGI-приложений, таких как FastAPI, он используется совместно с Uvicorn.
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:appНастройка конфигурации в Dockerfile:
CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "main:app"]CI/CD для FastAPI-приложений
Для автоматизации процессов сборки, тестирования и развертывания можно настроить CI/CD с помощью таких инструментов, как GitHub Actions.
name: FastAPI CI/CD
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: Install dependencies
run: |
pip install -r requirements.txt
- name: Run tests
run: |
pytest
- name: Build Docker image
run: |
docker build -t fastapi-app .
- name: Push Docker image
run: |
docker push fastapi-appЗаключение
В этой статье мы рассмотрели ключевые этапы развертывания FastAPI-приложений. Настройка Docker, Gunicorn, и CI/CD обеспечит стабильную работу приложения в продакшн-среде. Теперь вы готовы развернуть ваше приложение и автоматизировать этот процесс!
26.11.2024
0
1 332
Комментарии
0