An open API service indexing awesome lists of open source software.

https://github.com/shasoka/equeue_backend

Серверная часть eQueue 📙
https://github.com/shasoka/equeue_backend

alembic asyncpg fastapi moodle poetry postgresql pydantic python3 sqlalchemy websocket

Last synced: 11 days ago
JSON representation

Серверная часть eQueue 📙

Awesome Lists containing this project

README

          

## ![logo](readme_images/sibfu_logo.png) Серверная часть приложения "eQueue"

- [eQueue: что это и для кого?](#equeue-что-это-и-для-кого-)
- [Стек](#стек-)
- [Деплой](#деплой-)

---

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

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

### Стек 🔨

1. **[`FastAPI=^0.115.12`](https://fastapi.tiangolo.com/)** - веб-фреймворк
2. **[`SQLAlchemy=^2.0.40`](https://www.sqlalchemy.org/)** - ORM-библиотека
3. **[`Pydantic=^2.11.2`](https://docs.pydantic.dev/latest/)** - библиотека
валидации данных
4. **[`Uvicorn=^0.34.0`](https://www.uvicorn.org/)** - ASGI веб-сервер (dev)
5. **[`Gunicorn=^23.0.0`](https://gunicorn.org/)** - WSGI веб-сервер (prod).
Для асинхронности запускается с `uvicorn workers`.

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

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

### Деплой 🚀

Приложение развернуто на удаленном сервере. Достучаться до него можно
[тут](https://eqapi.ru/docs/). Там же находится полностью задокументированный
`Swagger UI` (ну, прям полностью, даже все коды ответов для каждого эндпоинта).

Если кому-то придет в голову развернуть это, то:
1. Клонировать репозиторий на целевую машину.
2. Убедиться, что установлен `docker engine`.
3. Перекреститься.
4. В корне проекта создать `.env` файл следующего содержания:
```properties
POSTGRES_USER=...
POSTGRES_PASSWORD=...
POSTGRES_DB=...
```
5. В папке `./app` создать второй `.env` следующего содержания:
```properties
APP_CONFIG__DB__URL=postgresql+asyncpg://:@localhost:5432/
```
Вместо значений в треугольных скобках нужно указать те же значения, что
лежат в первом `.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](readme_images/psycho.jpg)