FastAPI backend for archive
| core | ||
| models | ||
| routers | ||
| schemas | ||
| search | ||
| services | ||
| static | ||
| utils | ||
| .gitignore | ||
| docker-compose.yml | ||
| main.py | ||
| README.md | ||
| requriments.txt | ||
RSS / Archive Backend
Бэкенд для домашнего архива медиафайлов (видео, аудио, фото). Проект представляет собой асинхронное API на FastAPI, которое собирает данные из локальных директорий, агрегирует их в PostgreSQL и отдает на фронтенд.
Технологический стек
- Язык: Python 3.14+
- Фреймворк: FastAPI
- База данных: PostgreSQL 16 (Docker)
- ORM: SQLAlchemy 2.0 (Async) + psycopg (async)
- Валидация: Pydantic v2
- Сервер: Uvicorn
Архитектура проекта
RSS/
├── core/ # Конфигурация и подключение к БД
│ ├── config.py # Пути к медиа, константы
│ └── db.py # Движок SQLAlchemy, Base, SessionLocal
├── models/ # SQLAlchemy-модели (таблицы)
│ ├── video_model.py
│ ├── audio_model.py
│ └── photo_model.py
├── schemas/ # Pydantic-схемы (валидация и сериализация)
│ ├── video_schemas.py
│ ├── audio_schemas.py
│ └── photo_schemas.py
├── routers/ # Эндпоинты API
│ ├── video.py
│ ├── audio.py
│ ├── photo.py
│ └── ...
├── utils/ # Скрипты синхронизации (парсеры)
│ ├── update_videos.py
│ ├── update_audio.py
│ └── update_thumbs.py
├── media/ # Медиафайлы (монтируется в контейнер/отдается статикой)
│ ├── yt/ # Видео
│ ├── audio/ # Аудио
│ ├── _thumbs/ # Превью для видео
│ ├── _covers/ # Обложки для аудио
│ └── photos/ # Фото
├── main.py # Точка входа, подключение роутеров и статики
└── requirements.txt
Запуск
1 склонировать репозиторий и создать .env
git clone http://192.168.1.101:3000/ndmg/archive-backend.git
cd archive-backend
nano .env
2 в .env задать
DB_NAME
DB_PASSWORD
DB_USER
MEILI_KEY
MEILI_URL
# если надо парсинг тг:
API_ID
API_HASH
3 поднять контейнеры
sudo docker compose up -d
4 инициализация venv и установка зависимостей
python3 -m venv venv
source venv/bin/activate
pip install -r requrements.txt
5 запустить сервер
cd ..
uvicorn archive-backend.main:app --reload
6 API доступно по http://127.0.0.1:8000/docs
использование
фронтенд можно прикрутить мой а можно хз пишите свой
директории для поиска задаются в конфиге дефолтно это говно легаси структура:
- archive-backend/media/yt/ - для каналов с видео те фул путь - archive-backend/media/yt/channel/video.mp4
- archive-backend/media/media/ - для фото внутри директорий с категрией фото
- archive-backend/media/audio/ - для аудио принцип тот же