Skip to content

Cервис загрузки медиафайлов и медиаплеер.Реализован на FastAPI.Интегрирован асинхронный подход к запросам к БД.

License

Notifications You must be signed in to change notification settings

VladimirMonolith/filegram

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cервис Filegram

Python FastAPI fastapi-users Асинхронность Anyio Cookies JWT PostgreSQL Alembic SQLAlchemy Docker Redis Celery Uvicorn Gunicorn

Описание

Cервис загрузки медиафайлов и плеер.Пользователи могут загружать медиаконтент(изображения, видео, аудио) и просматривать/прослушивать его в медиаплеере.Интегрирован асинхронный подход к запросам к БД.Для кеширования использован Redis.Для фоновых задач подключён Celery.Реализована возможность чата посредством вебсокетов.Проект подготовлен для развертывания локально и в контейнерах Docker.

Доступный функционал

  • Аутентификация реализована с помощью куков и JWT-токена.
  • У неаутентифицированных пользователей доступ к API только на уровне чтения.
  • Создание объектов разрешено только аутентифицированным пользователям, прошедшим верификацию.
  • Управление пользователями доступно при наличии прав суперпользователя.
  • Возможность получения подробной информации о себе и ее редактирование, если пользователь прошел верификацию.
  • Получение списка всего доступного контента.
  • Возможность загрузки медиаконтента.
  • Получение, обновление и удаление конкретного файла.
  • Просмотр контента в плеере с возможностью выбрать необходимую стартовую точку воспроизведения.
  • Пользователь может получить на свой email отчет о количестве загрузок.
  • Онлайн-чат

Документация к API доступна локально: http://localhost:8000/docs/ , в контейнерах: http://localhost:7567/docs/

Технологи

  • Python 3.9
  • FastAPI 0.92.0
  • fasapi-users 10.4.1
  • fastapi-cache2 0.2.1
  • Asynchronous
  • Anyio
  • Cookies
  • JWT
  • Alembic
  • SQLAlchemy 2.0.4
  • Docker
  • PostgreSQL
  • Redis 4.5.2
  • Celery 5.2.7
  • Flower
  • Asyncpg
  • Uvicorn
  • Gunicorn
  • CORS

Локальный запуск проекта

  • Преварительно необходимо установить Docker и Redis для вашей системы.

  • Склонировать репозиторий:

   git clone <название репозитория>

Cоздать и активировать виртуальное окружение:

Команды для установки виртуального окружения на Mac или Linux:

   python3 -m venv env
   source env/bin/activate

Команды для Windows:

   python -m venv venv
   source venv/Scripts/activate
  • Перейти в директорию infra:
   cd source/infra
  • Создать .env-файл для локального запуска по образцу:
   cp .env-example .env
  • Установить зависимости из файла requirements.txt:
   cd ..
   cd ..
   pip install -r requirements.txt
  • Для создания миграций выполнить команду:
   alembic init migrations
  • В alembic.ini нужно задать адрес базы данных.
   sqlalchemy.url = postgresql+asyncpg://%(POSTGRES_USER)s:%(POSTGRES_PASSWORD)s@%(POSTGRES_HOST)s:%(POSTGRES_PORT)s/%(POSTGRES_DB_NAME)s?async_fallback=True
  • В папке migrations в .env файле должны быть следующие импорты:
from alembic import context

from source.infra.config import POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB_NAME
  • В этом же файле добавить получение переменных из конфига:
config = context.config

section = config.config_ini_section
config.set_section_option(section, "POSTGRES_USER", POSTGRES_USER)
config.set_section_option(section, "POSTGRES_PASSWORD", POSTGRES_PASSWORD)
config.set_section_option(section, "POSTGRES_HOST", POSTGRES_HOST)
config.set_section_option(section, "POSTGRES_PORT", POSTGRES_PORT)
config.set_section_option(section, "POSTGRES_DB_NAME", POSTGRES_DB_NAME)
  • В этом же файле добавить импорт моделей и установку метадаты в блоке, где написано from myapp import mymodel:
from source.database.models import Base
target_metadata = Base.metadata
  • Инициализировать БД:
    alembic revision --autogenerate -m 'comment'  
  • Применить миграцию:
    alembic upgrade heads  
  • Перейти в директорию source:
    cd source   
  • Запустить проект:
    uvicorn main:app --reload   
  • Запустить Redis:
    redis-server.exe
    redis-cli.exe
  • Запустить Celery:
    celery -A tasks.tasks:celery worker --loglevel=INFO --pool=solo
  • Запустить Flower:
    celery -A tasks.tasks:celery flower

Запуск в контейнерах Docker

  • Перейти в директорию infra:
   cd source/infra
  • Создать файл .env-docker для запуска в контейнерах:
   cp .env-example .env-docker
  • Выполнить команду для запуска:
   docker-compose up -d --build

Примеры некоторых запросов API

Регистрация пользователя:

    POST /auth/register

Получение токена верификации:

   POST /auth/request-verify-token

Сброс пароля:

   POST /auth/reset-password

Получение данных своей учетной записи:

   GET /users/me 

Удаление пользователя:

   DELETE /users/id

Добавление контента:

   POST /contents/

Обновление контента:

   PATCH /contents/content_id

Просмотр контента в плеере:

   GET /contents/streamig/content_id

Полный список запросов API находится в документации

Автор

Гут Владимир - https://github.com/VladimirMonolith

About

Cервис загрузки медиафайлов и медиаплеер.Реализован на FastAPI.Интегрирован асинхронный подход к запросам к БД.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages