Серверная часть проекта EcoIoT. Принимает POST запросы от датчика и записывает данные в БД. Доступ пользователя к БД осуществляется через специальный веб-интерфейс
Состоит из трех docker-контейнеров:
- ecoiot_postgresql - СУБД PostgreSQL 14.4
- ecoiot_postgresql_adminer - веб-интерфейс Adminer
- ecoiot_server - FastAPI сервер с автодокой и интерактивными API (Swagger)
- Docker-compose >= 1.27 (желательно 1.29)
- Docker >= 20.10.12
- Python 3.9 (для отладки)
- Ubuntu >= 18.04
Для установки внешней зависимости docker-compose запустите скрипт:
bash prerequisites.shОстальные внешние зависимости разрешайте в частном порядке
Для установки внутренних зависимостей при отладке используйте команду:
pip install -r requirements.txtПеред запуском обязательно переименуйте или скопируйте файл .env.example в .env
и в нем укажите необходимые значения переменных:
dbms_admin_login- логин админа для СУБДdbms_admin_pwd- пароль админа для СУБДdbms_host- адрес хоста СУБД, для отладки значениеlocalhost, для деплояpostgresql, т.к. при деплое сервисы соединяются по внутренней сети dockergases_database_name- имя БД для газовых значений датчиковapi_access_token- токен доступа к API (эндпоинтам)
После чего для деплоя введите:
docker-compose up -dДля отладки закомментируйте в файле docker-compose.yaml сервис ecoiot_server и добавьте проброс портов в сервис postgresql,
также в файле .env укажите у переменной dbms_host значение localhost, после чего выполните команду:
docker-compose up -dПри этом поднимутся только сервисы с СУБД и веб-интерфейсом для нее.
Сам веб-сервер отдельно запустите командой:
python -m appПри деплое все сервисы ждут, пока не поднимется сервис с СУБД, после чего сервис ecoiot_server подключается к СУБД, создает новые БД и заливает в них
миграции. Далее он генерирует из созданных БД модели для ORM SQLAlchemy. К этому времени на веб-сервере поднимаются API и уже можно слать на них запросы. Запросы к API валидируются через pydantic и в случае некорректного формата данных выбрасывается ошибка валидации в ответе на запрос. Роуты группируются в роутеры по соответствующим БД. Более подробную информацию об API можно увидеть в автодоке Swagger по адресу localhost:8090/docs
Для просмотра и интерактивного использования API перейдите по адресу localhost:8090/docs,
там можно увидеть описание входных значений, ответов эндпоинтов и прочее, также можно использовать API в интерактивном режиме.
В дополнение есть другой вид интерфейса документации Swagger по адресу localhost:8090/redoc, но в нем отсутствует интерактивный режим
Для просмотра и прочего взаимодействия с СУБД перейдите по адресу localhost:8085 в веб-интейрфейс Adminer,
где нужно будет ввести логин и пароль из файла .env
Если понадобится добавить новую БД, то нужно проделать следующие действия:
- В файле
.envукажите переменную и значение названия новой БД, например:
waters_database_name=waters- После чего в файле
app/settings.pyдобавить такое же поле и тип в классSettings. Именно через этот класс осуществляется доступ к переменным в.envчерезpydantic - В папке
app/libs/postgresqlсоздать папку с названием новой БД и добавить туда файл миграций с расширением.sql(сайт, где можно удобно составить БД и экспортировать в миграции https://dbdiagram.io) - Затем в файле
app/mainв списокdatabasesдобавить объект классаDataBaseс параметрами новой БД, после чего в папке новой БД рядом с файлом миграций появится файлmodels.pyс моделями дляSQLAlchemy - Модифицируйте методы репозитория
MeasureRepository(app/repositories/measure.py) в соответствии с новой БД или создайте новый репозиторий по его подобию - После чего создайте новый роутер в папке
routersдля новой БД по подобию уже имеющегося