После входа администратором в меню библиотеки появляются три дополнительных
пункта: Сервис, Пользователи и Добавить. Все три требуют HTTPS и
активной сессии администратора — доверенная сеть (FLIBUSTA_TRUSTED_NET)
сюда не пускает. Попытка открыть их читателем без прав записывается в лог
попыток входа как ошибка с кодом 5.
Сервис
Страница /service — панель обслуживания. Слева статистика, справа кнопки
операций, ниже добавление книг из торрента и лог последней операции.
Статистика
| Поле | Что показывает |
|---|---|
| Актуальность базы | дата самой свежей книги в импортированном дампе Флибусты (книги, добавленные вручную, не учитываются) |
| Всего произведений | число записей в таблице книг, включая добавленные вручную |
| Размер архива | суммарный размер /flibusta |
| Размер кэша | размер кэша обложек и фотографий авторов |
| Обложки скачаны / Проверка добавлений / БД Флибусты скачана / Последний скан ZIP | отметки времени последнего успешного выполнения соответствующей операции |
Операции
Кнопки двух цветов. Синие запускают операции, которые меняют базу данных: пока они идут, библиотека в режиме техобслуживания — поиск, чтение и скачивание приостановлены. Жёлтые на работу библиотеки не влияют.
| Кнопка | Скрипт | Что делает |
|---|---|---|
| Скачать базу данных | getsql.sh |
скачивает дампы таблиц (lib.*.sql.gz) с FLIBUSTA_URL/sql/ в /sql. Перед скачиванием сравнивает ETag с сохранённым и не тянет файлы, которые не изменились |
| Обновить базу данных (синяя) | app_import_sql.sh |
распаковывает дампы, заново заполняет таблицы, чистит HTML в аннотациях, удаляет пустые серии и жанры, восстанавливает добавленные вручную книги, строит полнотекстовые индексы и индекс zip-архивов, сбрасывает кэш описаний книг |
| Скачать обложки | getcovers.sh |
скачивает lib.a.attached.zip и lib.b.attached.zip (фотографии авторов и обложки) в /cache; при показе книги обложка извлекается оттуда и кэшируется |
| Скачать последние обновления | update_daily.sh |
скачивает с FLIBUSTA_URL/daily/ архивы новых поступлений (f.fb2.*.zip, f.n.*.zip), которых ещё нет, в /cache/local. После этого нужен «Сканирование ZIP» |
| Сканирование ZIP (синяя) | app_reindex.sh |
заново строит соответствие «диапазон id книг → zip-файл» по содержимому /flibusta и /cache/local — и таблицу book_zip, и файл /cache/zip_index.php; сбрасывает кэш описаний книг. Нужен после любого изменения набора архивов |
| Очистить кэш | — | удаляет кэш обложек, фотографий авторов и логи в /cache/log. Книги, БД и кэш в Redis не трогает |
Порядок первичного наполнения: скачать базу → обновить базу → обложки → обновления → сканирование ZIP. Для регулярного обновления достаточно «Скачать последние обновления» + «Сканирование ZIP» раз в день и «Скачать базу» + «Обновить базу» раз в неделю-две; как это автоматизировать — в статье о скриптах и cron.
Одновременно выполняется только одна операция: все скрипты берут общую
блокировку, и вторая кнопка вернёт «не удалось получить блокировку». Пока
операция идёт, страница показывает её вывод и обновляется каждые 10 секунд.
Блокировка — это flock на файле, поэтому если скрипт упал или контейнер
перезапустился, она снимается сама: «застрявшего» режима техобслуживания не
бывает.
Добавить книги из торрента
Два поля: magnet-ссылка и загрузка .torrent-файла. В обоих случаях
запускается aria2c, который читает список файлов торрента и скачивает
только те, что одновременно подходят по имени
(f.fb2-NNN-NNN.zip, f.usr-…, f.n-…, с префиксом d. или без) и
отсутствуют и в /flibusta, и в /cache/local. Скачанные архивы кладутся
в /cache/local. Так можно докачивать свежие «дельты» Флибусты, не
переносить файлы руками и не бояться дубликатов. Если торрент мёртв,
операция сама прервётся через 10 минут нулевой скорости. После завершения —
«Сканирование ZIP».
Учтите, что /cache/local не монтируется только для чтения, как /flibusta,
и лежит в рабочей директории; если вы держите основной архив на отдельном
большом диске, скачанные торренты стоит время от времени переносить в
/flibusta и запускать сканирование.
Лог последней операции
Внизу страницы — вывод последнего выполненного скрипта. Полные логи импорта
лежат в /cache/log/dbupdate.log и /cache/log/update_zip_list.log.
Пользователи
Страница /users, четыре вкладки.
Пользователи. Таблица аккаунтов с кнопками «Сделать админом» / «Сделать читателем» / «Удалить» и форма «Добавить/обновить пользователя». Форма работает и как смена пароля: введите существующее имя и новый пароль. Роли две: читатель (книги, полка, настройки) и администратор (плюс три административных раздела). Удаление аккаунта каскадно удаляет его сессии, токены, избранное и настройки.
Любое из этих действий — смена роли, смена пароля, удаление — немедленно завершает все сессии пользователя на всех устройствах. Иначе, например, разжалованный администратор сохранял бы доступ к служебным разделам до конца своей сессии, а она из доверенной сети живёт очень долго.
Сессии. Активные сессии всех пользователей: время последнего обращения,
User-Agent, IP входа. Кнопка «Удалить» принудительно разлогинивает сессию.
Сессии хранятся не в файлах, а в общем хранилище, поэтому переживают
перезапуск контейнера: по умолчанию это Postgres, а если задана переменная
FLIBUSTA_REDIS_HOST — Redis (см. статью о кэше).
Вкладка выглядит и работает одинаково в обоих случаях. Cookie сессии живёт
4 часа, а из доверенной сети — год; сама сессия на сервере хранится, пока к
ней обращаются.
Remember-Me токены. Токены галочки «Запомнить меня» на форме входа. Токен привязан к пользователю, имеет срок годности и при каждом использовании перевыпускается. Удаление токена означает, что на том устройстве придётся войти заново.
Активность пользователей. Содержимое таблицы попыток входа: адрес, имя, User-Agent, результат, время. Здесь видны и успешные входы, и неудачные, и срабатывания блокировок. Записи старше 30 дней удаляются автоматически.
Если соединение не по HTTPS, вверху страницы будет красное предупреждение.
Добавить
Страница /addbook — ручное добавление книги, которой нет на Флибусте
(или которую вы не хотите ждать в дампе). Три шага формы:
- Название. При уходе из поля библиотека ищет похожие названия и показывает список; при точном совпадении потребует галочку «Всё равно добавить».
- Авторы. Поиск с допуском на опечатки по всем авторам базы, включая тех, у кого пока нет книг; можно добавить нового автора (фамилия, имя, отчество, псевдоним). Хотя бы один автор обязателен.
- Файл. fb2, epub, pdf, djvu, docx, mobi, html, txt, rtf — или zip, содержащий ровно один такой файл. Плюс язык, год и до 10 жанров.
Что происходит внутри — важно понимать, чтобы книга не пропала при следующем импорте дампа:
- Книга и новые авторы получают идентификаторы начиная с 10 000 000 — дампы Флибусты до таких значений не доходят, так что конфликтов нет.
- Записи сохраняются в отдельные таблицы
local_*и параллельно в обычные таблицы библиотеки, поэтому книга видна сразу. - Файл упаковывается в одно-книжный zip в
/cache/localс именем по соглашению Флибусты, так что обычный поиск по архивам работает без специальных случаев. - При каждом импорте дампа обычные таблицы очищаются, и книги из
local_*переносятся обратно автоматически. Если добавленная вручную книга к тому времени появилась на Флибусте, что с ней делать, решаетFLIBUSTA_LOCAL_DUPLICATE_POLICY(см. переменные окружения).
Размер загружаемого файла ограничен 500 МБ на уровне PHP; reverse proxy
может ограничивать сильнее (client_max_body_size в nginx).
Мелочи, которые пригодятся
- «Сменить пользователя» в правом верхнем углу — это и вход, и способ переключиться с анонимного читателя из доверенной сети на администратора.
- Имя текущего пользователя показывается рядом с этой кнопкой: жёлтым для администратора, синим для читателя.
- Смена User-Agent в рамках одной сессии (например, переключение режима «версия для ПК» в мобильном браузере) прерывает сессию — так задумано.
- Если забыт пароль единственного администратора, заведите нового через
FLIBUSTA_APP_ADMINв docker-compose и перезапустите контейнер; рецепт — в разделе «Справка» самой библиотеки.