
Grimmory: Установка современной цифровой библиотеки на сервер
Grimmory — это независимый community-форк проекта Booklore и одно из самых мощных self-hosted решений для организации домашней библиотеки. В отличие от многих аналогов, Grimmory создан для тех, кто относится к чтению серьёзно: умные полки с фильтрами, встроенная читалка с аннотациями, синхронизация прогресса с Kobo/KOReader, автоматический импорт через BookDrop и загрузка метаданных из Google Books, Open Library и Amazon.
В этом руководстве мы пошагово развернём Grimmory на чистом VPS с Ubuntu 24.04, используя официальный Docker-образ и MariaDB. Инструкция адаптирована для работы от пользователя root и не требует настройки домена или SSL на начальном этапе — идеально для быстрого старта и тестирования.
Требования
- VPS с Ubuntu 24.04 LTS
- Минимум 2 ГБ RAM (Java/Spring Boot + MariaDB требуют ресурсов)
- Открытый порт
6060в фаерволе провайдера/хостинга - Установленный Docker и Docker Compose
Шаг 1. Подготовка системы и установка Docker
Подключаемся к серверу по SSH и обновляем систему:
apt update && apt upgrade -y
apt install -y ca-certificates curl gnupg lsb-release nano wget
Устанавливаем официальный Docker Engine и плагин Compose:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable --now docker
Проверяем установку:
docker compose version
# Ожидаемый вывод: Docker Compose version v2.x.x
Шаг 2. Создание структуры директорий
Создаём изолированное пространство для Grimmory. Поскольку мы работаем от root, все файлы будут принадлежать UID/GID 0.
mkdir -p /opt/grimmory/{data,books,bookdrop,mariadb/config}
cd /opt/grimmory
💡 Назначение папок:
• data — внутренние данные приложения, иконки, кэш обложек.
• books — ваша основная библиотека. Сюда монтируются ваши книги.
• bookdrop — папка автоматического импорта. Файлы, попавшие сюда, автоматически парсятся и предлагаются к добавлению.
• mariadb/config — конфигурация и данные базы данных.
Шаг 3. Настройка переменных окружения (.env)
Создаём файл .env для безопасного хранения паролей и настроек:
nano /opt/grimmory/.env
Заполняем его следующим содержимым (обязательно смените пароли!):
# Application
APP_USER_ID=0
APP_GROUP_ID=0
TZ=Europe/Moscow
# Database
DATABASE_URL=jdbc:mariadb://mariadb:3306/grimmory
DB_USER=grimmory
DB_PASSWORD=Your_Secure_Grimmory_Password!
# Storage: LOCAL (default) or NETWORK
DISK_TYPE=LOCAL
# API Docs (optional)
API_DOCS_ENABLED=false
# MariaDB
DB_USER_ID=0
DB_GROUP_ID=0
MYSQL_ROOT_PASSWORD=Your_Secure_MariaDB_Root_Password!
MYSQL_DATABASE=grimmory
⚠️ Важно для пользователей root: Обратите внимание на APP_USER_ID=0 и APP_GROUP_ID=0. Это гарантирует, что контейнер будет иметь полный доступ к смонтированным томам без ошибок Permission denied, которые часто возникают при стандартных значениях 1000.
Шаг 4. Создание docker-compose.yml
Создаём compose-файл на основе официальной документации:
nano /opt/grimmory/docker-compose.yml
services:
grimmory:
image: grimmory/grimmory:latest
container_name: grimmory
environment:
- USER_ID=${APP_USER_ID}
- GROUP_ID=${APP_GROUP_ID}
- TZ=${TZ}
- DATABASE_URL=${DATABASE_URL}
- DATABASE_USERNAME=${DB_USER}
- DATABASE_PASSWORD=${DB_PASSWORD}
- API_DOCS_ENABLED=${API_DOCS_ENABLED}
- DISK_TYPE=${DISK_TYPE}
depends_on:
mariadb:
condition: service_healthy
ports:
- "6060:6060"
volumes:
- ./data:/app/data
- ./books:/books
- ./bookdrop:/bookdrop
healthcheck:
test: wget -q -O - http://localhost:6060/api/v1/healthcheck
interval: 60s
retries: 5
start_period: 60s
timeout: 10s
restart: unless-stopped
mariadb:
image: lscr.io/linuxserver/mariadb:11.4.5
container_name: grimmory-mariadb
environment:
- PUID=${DB_USER_ID}
- PGID=${DB_GROUP_ID}
- TZ=${TZ}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASSWORD}
volumes:
- ./mariadb/config:/config
restart: unless-stopped
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost"]
interval: 5s
timeout: 5s
retries: 10
Шаг 5. Запуск и первый вход
Запускаем стек:
cd /opt/grimmory
docker compose up -d
⏳ Терпение! Первый запуск занимает время
Grimmory написан на Java/Spring Boot. При первом старте выполняется 138 миграций Flyway. Контейнер может находиться в статусе starting или unhealthy до 2–3 минут. Не паникуйте, если интерфейс не открывается сразу.
Отслеживайте прогресс:
docker compose logs -f grimmory
Ждите строку: Started BookloreApplication in XXX seconds. Только после этого переходите в браузер.
Открытие порта
Если используете UFW:
ufw allow 6060/tcp
Перейдите по адресу http://<IP_ВАШЕГО_СЕРВЕРА>:6060 и создайте учётную запись администратора.


Шаг 6. Создание библиотеки (Критически важный момент!)
Это тот этап, где многие ошибаются. Чтобы книги автоматически обнаруживались:
- Нажмите «Создать библиотеку».
- В поле Путь (Path) укажите строго:
/books(это путь внутри контейнера, а не на хосте!). - ✅ ОБЯЗАТЕЛЬНО включите опцию «Отслеживать изменения» (Monitor for changes / Watch folder). Без этого флажка новые файлы не будут подхватываться автоматически, даже если они лежат в правильной папке.
- Сохраните.





Шаг 7. Тестирование: BookDrop и загрузка книг
Автоматический импорт через BookDrop
Скачаем легальную тестовую книгу прямо в папку автоимпорта:
wget -O /opt/grimmory/bookdrop/frankenstein.epub "https://www.gutenberg.org/ebooks/84.epub3.images"
Grimmory автоматически:
- Обнаружит новый файл.
- Загрузит метаданные и обложку из Google Books / Open Library.
- Поместит книгу в очередь на ревью в интерфейсе.




Ручное копирование
Вы также можете копировать файлы напрямую в /opt/grimmory/books. Благодаря включённому мониторингу они появятся в библиотеке автоматически.
Поддерживаемые форматы
| Категория | Форматы |
|---|---|
| Электронные книги | EPUB, MOBI, AZW, AZW3, FB2 |
| Документы | |
| Комиксы | CBZ, CBR, CB7 |
| Аудиокниги | M4B, M4A, MP3, OPUS |
Полезные команды для администрирования
# Просмотр логов в реальном времени
docker compose logs -f grimmory
# Перезапуск после изменений в .env
docker compose down && docker compose up -d
# Обновление до последней версии
docker compose pull && docker compose up -d
# Полный сброс (удаление всех данных!)
docker compose down && rm -rf data/* mariadb/config/* books/* bookdrop/*
Заключение
Grimmory — зрелая, активно развивающаяся альтернатива Calibre-web и Kavita. Использование официального Docker-образа с MariaDB обеспечивает стабильность, а функция BookDrop делает процесс наполнения библиотеки максимально удобным.
Статья подготовлена на основе личного опыта развёртывания на VPS Ubuntu 24.04 и официальной документации проекта grimmory-tools/grimmory.