API-сервис на FastApi, SQLalchemy, Postgres, Docker, docker-compose
Для этого проекта была взята небольшая задача, которою я планирую расширять и дополнять. Основная цель - создание личной кодовой базы
- Докер - Dockerfile и docker-compose.yaml
- Модели SQLalchemy - app/database/models/buisiness_entities.py и app/database/models/base.py
- Настройка алембика - migrations/env.py
- Функции взаимодейсствия с бд - app/database/dals/base_model_dal.py и app/database/dals/base_dal.py
- Экшены для модерации таблиц и бизнес функциональности - app/api/actions
- Схемы для модерации таблиц и бизнес функциональности - app/api/schemas
- Хэндлеры для модерации таблиц и бизнес функциональности - app/api/handlers
Это личный проект поэтому для удобства пароль от бд находится в открытом доступе в репозитории. Этот пароль скомпрометирован - рекомендую сменить его!
Для этого замените старый пароль на свой в docker-compose.yaml на строке 38 и в app/config/secret.env на строке 1
Приложение тестировалось на Ubuntu 20.04
- Для работы приложения потребуется Python 3.10 и docker 23.0.1. Установите их.
- Находясь в корневой папке проекта запустите файл init.sh
bash init.py
Или запустите команды находящиеся в нем по отдельности:
Запускаем докер:
sudo service docker start
Билдим образы бд и api-сервис:
sudo docker compose build
Поднимаем контейнеры:
sudo docker compose up -d --force-recreate
Устанавливаем пакет с кодом проекта в интерпретатор python:
pip install -e .
Устанавливаем библиотеки для работы алембика в интерпретатор python:
pip install -r requirements/alembic.txt
Накатываем миграции на базу данных:
alembic upgrade heads
- Теперь сервис доступен по адресу http://localhost:5050/docs
Dockerfile:
LOGGING_LEVEL - уровень логов в std.err
LOGGING_DIR_LEVEL - Уровень логов в файл
LOG_DIR - Директория куда будут складываться логи. Если не задавать этот конфиг, то логи будут писаться только в std.err
TZ - таймзона установленная в контейнере api-сервиса
app/config/shared.env:
DB_NAME - имя базы данных
DB_HOST_GLOBAL - имя сети docker
DB_HOST_LOCAL - хост по которому можно достучаться до базы не из контейнера
DB_PORT - порт на котором располагается база
DB_USER - имя юзера postgresql
app/config/secret.env:
DB_PASSWORD - пароль бд
Обратите внимание что данные docker_compouse должны совпадать с app/config/shared.env и app/config/secret.env
POSTGRES_DB - имя базы данных - DB_NAME
postgres.name (строка 43) - имя сети docker - DB_HOST_GLOBAL
ports (строка 43) - порт на котором располагается база: порт внутри контейнера - DB_PORT
POSTGRES_USER - имя юзера postgresql - DB_USER
POSTGRES_PASSWORD - пароль бд - DB_PASSWORD
MVP
- docker-compouse - Dokerfile
- Развертывание бд - PostgreSQL
- Модели, запросы - SQLalchemy
- api - FastApi
Модерация таблиц:
- Обновление моделей под v.2,
- Base модель,
- Миграции alembic
- Base data acess level
- Base actions
- Handlers
- Тесты модерации
Система пользователей:
- Пользователи
- Аутентификация
- Токены
- Роли
- Тесты системы пользователей
Сбор метрик:
- Prometheus
- Тест сбора метрик
Кэширование:
- Radis
- Тест кэширования
Деплой:
- Пайлайн сборки
- K8 на удаленном сервере
- Тесты деплоя
Фронтенд:
- Plotly, Streamlit