Repository navigation
Self Hosting RU
Запустите Tonkatsu Box в браузере на своей машине или домашнем сервере. Один Docker-контейнер отдаёт приложение и держит базу, кеш обложек и API-ключи на сервере, поэтому все устройства в сети работают с одной библиотекой.
Это то же самое приложение, а не урезанная версия: коллекции, поиск, трекер эпизодов, тир-листы, mood-сетки, статистика, импорт и экспорт работают ровно так же, как на десктопе.
- Docker с Docker Compose
Больше ничего - веб-приложение собирается внутри контейнера, Flutter на вашей машине не нужен.
git clone https://github.com/hacan359/tonkatsu_box.git
cd tonkatsu_box
docker compose up -d --buildПервая сборка занимает несколько минут. Затем откройте:
http://<ip-сервера>:8080
Скопируйте .env.example в .env рядом с docker-compose.yml и раскомментируйте то, что нужно. Без .env всё работает на значениях по умолчанию.
| Переменная | По умолчанию | Что делает |
|---|---|---|
TONKATSU_DATA_PATH |
./data |
Папка на хосте со всеми данными сервера |
TONKATSU_PORT |
8080 |
Порт, на котором отвечает веб-интерфейс |
PUID / PGID
|
1000 / 1000
|
Владелец файлов в папке данных |
TONKATSU_KEY_* |
- | API-ключи, например TONKATSU_KEY_TMDB
|
TONKATSU_AUTH |
off |
token заставляет веб-интерфейс спрашивать токен доступа |
TONKATSU_AUTH_TOKEN |
генерируется | Свой токен вместо сгенерированного |
TONKATSU_BIND |
0.0.0.0 |
Интерфейс хоста, на котором публикуется порт |
TONKATSU_IMAGE_HOSTS |
любые | Хосты, с которых разрешено скачивать обложки, через запятую |
Ключи можно ввести и в самом приложении (Настройки → API ключи) - они хранятся на сервере в data/keys.json. Ключи из .env перекрывают keys.json.
Во внешние каталоги ходит сервер, а не ваш браузер: контейнер подставляет настоящие учётные данные и правильный user agent, поэтому ни один ключ не попадает во вкладку браузера, а CORS не мешает.
По умолчанию у сервера нет входа: библиотекой пользуется любой, кто дотянулся до порта. Если до сервера достают другие устройства, задайте в .env TONKATSU_AUTH=token. Тогда сервер при каждом запуске печатает ссылку для входа:
docker compose logs tonkatsu | grep "Sign in"
# Sign in: http://localhost:8080/?token=…Откройте эту ссылку, подставив адрес сервера вместо localhost: браузер сохранит токен и уберёт его из адресной строки. Браузер без токена увидит экран, куда его можно вставить, а в Настройки → API ключи его можно сменить позже. Токен хранится в data/auth_token; удалите файл и перезапустите контейнер, чтобы выпустить новый, или задайте свой через TONKATSU_AUTH_TOKEN.
TONKATSU_BIND=127.0.0.1 публикует порт только на этой машине. TONKATSU_IMAGE_HOSTS ограничивает хосты, с которых сервер скачивает обложки: список доменов через запятую, поддомены входят. Оставьте пустым, если не уверены, что это нужно: обложка с хоста вне списка покажется битой картинкой.
| Путь | Что это |
|---|---|
.env |
Ваша локальная конфигурация (не коммитится) |
data/tonkatsu_box.db |
База данных |
data/keys.json |
API-ключи, введённые в приложении |
data/auth_token |
Токен доступа при TONKATSU_AUTH=token
|
data/images/ |
Кеш обложек |
data/snapshots/ |
Автоматические снимки базы перед миграциями |
Скопируйте папку data/ при остановленном контейнере - это и есть полный бэкап. В веб-интерфейсе также есть Настройки → Резервные копии, они скачивают переносимый архив на то устройство, с которого вы зашли. См. Данные, синхронизация и копии.
git pull
docker compose up -d --buildНезавершённые миграции базы выполняются при старте; перед этим снимок старой базы сохраняется в data/snapshots/.
Caddy впереди даёт https://tonkatsu.box, HTTP/2 и установку как PWA:
# .env: TONKATSU_DOMAIN=tonkatsu.box (по умолчанию), TONKATSU_PORT оставьте 8080
docker compose -f docker-compose.yml -f docker-compose.caddy.yml up -d- Направьте домен на сервер: запись в DNS роутера или в
hosts(<ip-сервера> tonkatsu.box) на каждом устройстве. - Один раз на устройство доверьтесь локальному корневому сертификату Caddy - файл
data/caddy/caddy/pki/authorities/local/root.crt(в Windows: двойной клик → Установить сертификат → Доверенные корневые центры сертификации).
Обычный HTTP продолжает работать и без всего этого - Caddy это дополнение, а не требование.
Эти возможности требуют десктопного или Android-приложения:
- VGMaps (нужен WebView2, только Windows)
- Discord Rich Presence
- Синхронизация с Kodi
- Навигация геймпадом
- Синхронизация между устройствами по локальной сети
- Профили пользователей - на сервере одна библиотека
-
Своя папка данных - вместо неё
TONKATSU_DATA_PATH
Всё остальное работает как в десктопном приложении.
- В веб-сборке нет аккаунтов;
TONKATSU_AUTH=tokenвключает один общий токен доступа. Держите её в локальной сети или за HTTPS - не выставляйте в интернет без токена. - В браузере вообще нет базы данных: каждое чтение и запись - это обращение к серверу, поэтому два устройства не могут разойтись.
- Getting Started
- API Keys Setup
- Collections
- Search
- Item Details
- Personalization
- Statistics
- Canvas Board
- Wishlist
- Releases & Calendar
- Import / Export
- Data, Sync & Backup
- Browse Online Collections
- Trakt Import
- Simkl Import
- Steam Import
- RetroAchievements Import
- MyAnimeList Import
- AniList Import
- Hardcover Import
- IGDB List Import
- Kinorium Import
- Custom Cards Import
- Kodi Sync
- Tier Lists
- Mood Grid
- User Profiles
- Settings
- Self-Hosting (Web)
- Discord Rich Presence
- Contributing Collections
- FAQ
- Быстрый старт
- Настройка API ключей
- Коллекции
- Поиск
- Детали элемента
- Персонализация
- Статистика
- Визуальные доски
- Список желаний
- Релизы и календарь
- Импорт / Экспорт
- Данные, синхронизация и копии
- Каталог коллекций
- Импорт из Trakt
- Импорт из Simkl
- Импорт из Steam
- Импорт из RetroAchievements
- Импорт из MyAnimeList
- Импорт из AniList
- Импорт из Hardcover
- Импорт списка IGDB
- Импорт из Kinorium
- Импорт своих карточек
- Синхронизация Kodi
- Тир-листы
- Mood-сетка
- Профили пользователей
- Настройки
- Selfhost (веб)
- Discord Rich Presence
- Контрибуция коллекций
- FAQ
- 快速开始
- API 密钥设置
- 收藏
- 搜索
- 项目详情
- 个性化
- 统计
- 看板
- 愿望单
- 发行与日历
- 导入 / 导出
- 数据、同步与备份
- 收藏目录
- 从 Trakt 导入
- 从 Simkl 导入
- 从 Steam 导入
- 从 RetroAchievements 导入
- 从 MyAnimeList 导入
- 从 AniList 导入
- 从 Hardcover 导入
- 导入 IGDB 列表
- 从 Kinorium 导入
- 导入自定义卡片
- Kodi 同步
- 等级列表
- 心情格
- 用户配置
- 设置
- 自托管(Web)
- Discord Rich Presence
- 贡献收藏
- 常见问题
💬 Discord