Развертывание приложения — это важная часть разработки, которая определяет, как ваше приложение будет работать в реальных условиях, в продакшн-среде. В этой статье мы рассмотрим ключевые шаги для развертывания 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
Первым шагом для контейнеризации вашего приложения будет создание 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 обеспечит стабильную работу приложения в продакшн-среде. Теперь вы готовы развернуть ваше приложение и автоматизировать этот процесс!