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 📙
- Host: GitHub
- URL: https://github.com/shasoka/equeue_backend
- Owner: shasoka
- Created: 2025-05-18T17:21:45.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-05-31T07:27:43.000Z (11 months ago)
- Last Synced: 2025-05-31T18:13:48.433Z (11 months ago)
- Topics: alembic, asyncpg, fastapi, moodle, poetry, postgresql, pydantic, python3, sqlalchemy, websocket
- Language: Python
- Homepage: https://eqapi.ru/docs#/
- Size: 335 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
##  Серверная часть приложения "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 должен быть расположен в РФ (насчет Казахстана, РБ и
> прочих дружественных государств не уверен). В противном случае, еКурсы
> откажут в обслуживании и получится кирпич 🧱
>
> В данной версии приложения прокси в коде не использовались.
