Skip to content

shasoka/eQueue_backend

Repository files navigation

logo Серверная часть приложения "eQueue"


eQueue: что это и для кого? 🤔

  1. "Что это": официальная версия - "Информационная система управления процессом сдачи лабораторных и практических работ студентами". Идея состоит в том, чтобы дать возможность студентам организовывать рабочие пространства, в которых они могли бы хранить информацию о предметах, преподавателях, их требованиях и пр., а также, что самое важное, вести живые очереди для сдачи работ.
  2. "Для кого": целевая аудитория - студенты СФУ, т.к. на данный момент приложение заточено под работу в связке с системой электронного обучения СФУ (еКурсы). На REST API еКурсов завязана авторизация пользователей, получение студенческих групп, получение доступных предметов и заданий по ним.

Стек 🔨

  1. FastAPI=^0.115.12 - веб-фреймворк
  2. SQLAlchemy=^2.0.40 - ORM-библиотека
  3. Pydantic=^2.11.2 - библиотека валидации данных
  4. Uvicorn=^0.34.0 - ASGI веб-сервер (dev)
  5. Gunicorn=^23.0.0 - WSGI веб-сервер (prod). Для асинхронности запускается с uvicorn workers.

В качестве СУБД используется PostgreSQL.

Кроме вышеописанных библиотек также применялись httpx (асинхронные запросы к REST API еКурсов), alembic (миграции базы данных), websockets (говорит сам за себя; для работы с живыми очередями), asyncpg (асинхронный движок для подключения к PostgreSQL), jinja2 (шаблонизатор).

Деплой 🚀

Приложение развернуто на удаленном сервере. Достучаться до него можно тут. Там же находится полностью задокументированный Swagger UI (ну, прям полностью, даже все коды ответов для каждого эндпоинта).

Если кому-то придет в голову развернуть это, то:

  1. Клонировать репозиторий на целевую машину.

  2. Убедиться, что установлен docker engine.

  3. Перекреститься.

  4. В корне проекта создать .env файл следующего содержания:

    POSTGRES_USER=...
    POSTGRES_PASSWORD=...
    POSTGRES_DB=...
  5. В папке ./app создать второй .env следующего содержания:

    APP_CONFIG__DB__URL=postgresql+asyncpg://<POSTGRES_USER>:<POSTGRES_PASSWORD>@localhost:5432/<POSTGRES_DB>

    Вместо значений в треугольных скобках нужно указать те же значения, что лежат в первом .env.

    Да, можно было бы обойтись одним файлом окружения.

  6. В файле ./app/templates/ws_test_client.html в строках 71:72 заменить протоколы на https и wss, если привязано доменное имя и получен SSL-сертификат (ну, и сами адреса заменить на доменное имя).

  7. Запустить sudo bash up-linux.sh и ждать чуда.

  8. После успешного запуска можете проверить адрес в браузере. В корне проекта появится app.log файл с логами.

  9. Победа, поздравляю.

Caution

Важный момент. VPS должен быть расположен в РФ (насчет Казахстана, РБ и прочих дружественных государств не уверен). В противном случае, еКурсы откажут в обслуживании и получится кирпич 🧱

В данной версии приложения прокси в коде не использовались.

Bateman

Languages