Обновление и бэкап
Обновление
Заголовок раздела «Обновление»Самый простой путь — команда /update боту (скачает свежий образ и перезапустит). Либо вручную:
cd /opt/remnachillbotdocker compose pulldocker compose up -dНовый образ появляется в GHCR автоматически после каждого пуша в
main(это делает CI).
Версии и релизы
Заголовок раздела «Версии и релизы»Начиная с 1.0.0 каждый релиз получает git-тег vX.Y.Z, страницу релиза со списком изменений и версионный Docker-образ:
ghcr.io/mrvibecodic/chill-remna-bot:v1— все релизы 1.x.y без автоперехода на будущий 2.0.0 (дефолт вdocker-compose.yml);ghcr.io/mrvibecodic/chill-remna-bot:latest— всегда свежий релиз изmain(канал stable);ghcr.io/mrvibecodic/chill-remna-bot:dev— превью из веткиdev, как и раньше;ghcr.io/mrvibecodic/chill-remna-bot:v1.0.0— конкретная версия.
Чтобы зафиксироваться на версии, впишите её тег в docker-compose.yml вместо :latest — docker compose pull перестанет приносить обновления, пока тег не сменить. Возврат на канал — просто верните :latest (или :dev).
- SQLite: сохраните том
bot-dataцеликом — тамbot.dbиsecret.key. - PostgreSQL:
и дополнительно сохраните
Окно терминала docker exec remnabot-db pg_dump -U remnabot remnabot > backup_$(date +%F).sqlsecret.keyиз томаbot-data.
Без secret.key восстановленная база будет нечитаемой (настройки зашифрованы) — храните его вместе с дампом.
Переезд с remnashop
Заголовок раздела «Переезд с remnashop»Если раньше вы продавали подписки через remnashop, переносить пользователей руками не нужно — в боте есть мастер импорта: Система → 📦 Переезд с remnashop.
Как перенести:
- В remnashop: Дашборд → Бэкап → создайте бэкап базы. Получится файл
db_backup_YYYY-MM-DD_HH-MM-SS.sql. (Можно и своимpg_dump— подойдёт обычный текстовый дамп, в том числе с--inserts.) - Если файл больше 20 МБ, сожмите его:
gzip db_backup.sql— Telegram не отдаёт боту документы крупнее. - В нашем боте: Система → 📦 Переезд с remnashop → 📥 Загрузить дамп и пришлите файл в чат.
- Бот покажет, что нашёл (сколько пользователей, подписок, промокодов, платежей) — нажмите ✅ Импортировать.
Что переносится:
| Из remnashop | Куда у нас |
|---|---|
users (telegram_id, username, name, is_blocked) |
пользователи бота |
is_trial_available = false и факт подписки |
отметка «триал использован» — второй раз бесплатный период не выдастся |
subscriptions.expire_at (самая поздняя, кроме удалённых) |
срок подписки → напоминания об окончании |
users.points (реферальные баллы) |
баланс кошелька, 1 балл = 1 ₽ (и «заработано» на экране рефералов) |
referrals |
связи «кто кого привёл»; бонус помечается уже выплаченным |
promocodes + promocode_activations |
промокоды на дни (DURATION, SUBSCRIPTION) и их активации |
transactions со статусом COMPLETED |
история платежей (для статистики) |
Что не переносится: настройки, тарифы, платёжные шлюзы, рассылки и веб-аккаунты remnashop без Telegram ID (их пароли хранятся в другом формате — такие входы можно только создать заново). Промокоды с наградой «трафик/устройства/скидка» пропускаются: у нас нет таких видов — бот честно перечислит их в предупреждениях перед импортом.
Какие версии remnashop поддерживаются. v0.8.0 – v0.8.2 — актуальная линейка, где база уже приведена к числовым внешним ключам. Дамп более старой версии (там таблицы ссылались на пользователя через *_telegram_id) бот отклонит с подсказкой, а не перенесёт наполовину: обновите remnashop до 0.8.x — он сам прогонит миграции своей базы — и снимите бэкап заново.
Панель Remnawave 3.0.0. Переносить можно и перед обновлением панели, и после: в нашей базе не хранится ни одного идентификатора панели — только Telegram ID, даты и деньги. Бот сам определяет версию панели и работает как с 2.7.4+, так и с 3.x (там пользователь ищется через /api/users/stream?telegramId=, а by-username и постраничный список не менялись). Порядок такой: сначала снимите дамп remnashop (он поддерживает панель до 2.8.x), импортируйте его, затем обновляйте панель.
Панель Remnawave трогать не нужно. Аккаунты в ней остаются как есть (имена вида rs_<telegram_id>): бот находит их по telegramId, а если он не проставлен — по имени, при первом заходе пользователя. Продления идут в тот же аккаунт, дубли не создаются.
Что импорт делает с теми, кто уже есть в боте. Ничего не удаляет и не уменьшает:
- срок подписки только продлевается — если у вас записан более поздний, он и остаётся;
- баланс начисляется один раз, только тем, кого завёл сам импорт;
- имя и username заполняются, только если у нас пусто;
- реферальная связь ставится, только если её ещё нет, и бонус сразу помечается выплаченным (в remnashop он уже выплачен);
- блокировка из remnashop применяется только к новым — у действующего пользователя бота импорт доступ не отбирает;
- отметка «триал использован» ставится тем, у кого в remnashop была подписка или израсходован триал: это и есть защита от повторной выдачи бесплатного периода;
- платежи добавляются в историю с уникальным
ext_idвидаrs:<payment_id>.
Пользователей, которых в дампе нет, импорт не трогает вообще. Повторная загрузка того же дампа ничего не задваивает.