После входа администратором в меню библиотеки появляются три дополнительных пункта: Сервис, Пользователи и Добавить. Все три требуют 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 — ручное добавление книги, которой нет на Флибусте (или которую вы не хотите ждать в дампе). Три шага формы:

  1. Название. При уходе из поля библиотека ищет похожие названия и показывает список; при точном совпадении потребует галочку «Всё равно добавить».
  2. Авторы. Поиск с допуском на опечатки по всем авторам базы, включая тех, у кого пока нет книг; можно добавить нового автора (фамилия, имя, отчество, псевдоним). Хотя бы один автор обязателен.
  3. Файл. 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 и перезапустите контейнер; рецепт — в разделе «Справка» самой библиотеки.