70 lines
3.1 KiB
Markdown
70 lines
3.1 KiB
Markdown
---
|
|
namespace: work
|
|
tags: [system, tool, infrastructure, taiga]
|
|
created: '2026-05-18'
|
|
updated: '2026-05-18'
|
|
last_synced: '2026-05-18'
|
|
confidence: 1.0
|
|
sources:
|
|
- personal/projects/library-app.md
|
|
---
|
|
# Library App
|
|
|
|
Персональный веб-интерфейс для библиотеки книг на TrueNAS (Taiga). Развёрнут 2026-05-16.
|
|
|
|
## Что это
|
|
|
|
Замена inpxer — полноценный сайт для просмотра коллекции Flibusta (687k книг) + личных книг, с отметками статуса чтения, связями между книгами и графом.
|
|
|
|
## Доступ
|
|
|
|
- **URL:** `https://library.mallexxx.duckdns.org`
|
|
- **Контейнер:** `library-app` на TrueNAS (Taiga)
|
|
- **Расположение:** `/mnt/RED_2TB/docker/library/`
|
|
|
|
## Стек
|
|
|
|
- Backend: Python + FastAPI
|
|
- Frontend: Vue 3 + Tailwind CSS (CDN, без build)
|
|
- Граф: vis.js
|
|
- Контейнер: python:3.12-slim
|
|
|
|
## Данные
|
|
|
|
| Хранилище | Назначение | Лимит |
|
|
|-----------|------------|-------|
|
|
| `books.db` (SQLite) | Flibusta коллекция, пересоздаётся при старте из INPX (~23 сек) | 687k книг, 227 MB |
|
|
| `library.db` (SQLite) | Персистентный: статусы чтения, связи | Никогда не удалять |
|
|
|
|
**library.db таблицы:**
|
|
- `read_log(book_id, status, date_updated, rating, notes)` — статусы `read | reading | want`
|
|
- `relations(book_id, related_id, type, weight, fetched_at)` — кэш связей
|
|
|
|
## Связи между книгами
|
|
|
|
Строятся при первом открытии книги, кэшируются в `relations`:
|
|
1. `same_author` — все книги автора (мгновенно из books.db)
|
|
2. `same_series` — книги той же серии (мгновенно)
|
|
3. `same_genre` — топ-20 жанра по дате (мгновенно)
|
|
4. `openlibrary` — readers also read через OpenLibrary API (async, ~300ms, обновляется раз в 30 дней)
|
|
|
|
## Ссылки на скачивание
|
|
|
|
- Flibusta: `https://books.mallexxx.duckdns.org/download/{id}` (inpxer)
|
|
- Личные книги: `https://docs.mallexxx.duckdns.org/books/{path}` (FileBrowser)
|
|
|
|
## Известные питфолы
|
|
|
|
- **inpxer Badger DB lock:** при последовательных/параллельных запросах к inpxer сервер зависает. Решение: скачивать книги с паузой ≥3 сек между запросами.
|
|
- **books.db пересоздаётся при каждом перезапуске** (~23 сек) — нормальное поведение.
|
|
- **library.db на хосте** — `docker rm` не удаляет. Важно: не монтировать как tmpfs.
|
|
|
|
## Статус
|
|
|
|
✅ Задеплоен 2026-05-16. 687,722 книг.
|
|
|
|
## Связанные страницы
|
|
|
|
- [[personal-os-architecture]] — Taiga как хост, TrueNAS infrastructure
|
|
- [[personal-os-schema]] — паттерны хранения данных в personal-os
|