Этот проект является демонстрацией профессионального, production-ready подхода к управлению конфигурацией и секретами в веб-приложениях на основе FastAPI, SQLAlchemy и Docker.
- Backend: Python 3.11
- Framework: FastAPI
- ORM: SQLAlchemy 2.0 (с асинхронной поддержкой
asyncpg) - Конфигурация: Pydantic-settings
- Контейнеризация: Docker, Docker Compose
- Логирование: Встроенный
loggingс конфигурацией для Uvicorn
- Разделение конфигурации и кода: Строгое следование принципу Twelve-Factor App.
- Безопасность секретов: Пароль от БД передается через Docker Secrets, что исключает его попадание в код, систему контроля версий и логи.
- Надежный запуск:
docker-compose.ymlиспользуетhealthcheckдля гарантии того, что приложение запустится только после полной готовности базы данных. - Гибкая настройка: Единый
.envфайл используется для конфигурации. Для запуска в Docker используетсяdocker-compose.override.ymlдля переопределения специфичных для контейнера настроек (например,DB_HOST). - Асинхронность: Весь стек, от FastAPI до драйвера БД (
asyncpg), является полностью асинхронным. - Информативное логирование: Настроено структурированное логирование для Uvicorn.
Предварительные требования: Установленный Docker и Docker Compose.
-
Создайте
.envфайл: Скопируйте.env.exampleв.env. Значения по умолчанию уже подходят для запуска в Docker.cp .env.example .env
-
Создайте файл с секретом: Этот файл будет содержать пароль, указанный в
DB_PASSв вашем.envфайле.echo "testpassword" > db_pass
-
Соберите и запустите контейнеры:
docker-compose up --build -d
Docker автоматически использует
docker-compose.ymlиdocker-compose.override.yml. -
Проверьте статус: Приложение будет доступно по адресу
http://localhost:8000. Для проверки статуса подключения к БД перейдите наhttp://localhost:8000/db-status. -
Остановка:
docker-compose down
- Настройте PostgreSQL: Убедитесь, что у вас запущен локальный сервер PostgreSQL.
- Настройте
.env: Скопируйте.env.exampleв.envи укажите в нем актуальные данные для подключения к вашей локальной базе данных. Убедитесь, чтоDB_HOST=localhost. - Установите зависимости:
pip install -r requirements.txt. - Запустите приложение:
uvicorn src.main:app --reload.
GET /: Приветственное сообщение.GET /db-status: Проверяет статус подключения к базе данных.