Перейти к содержимому

Обновление и бэкап

Самый простой путь — команда /update боту (скачает свежий образ и перезапустит). Либо вручную:

Окно терминала
cd /opt/remnachillbot
docker compose pull
docker 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 вместо :latestdocker compose pull перестанет приносить обновления, пока тег не сменить. Возврат на канал — просто верните :latest (или :dev).

  • SQLite: сохраните том bot-data целиком — там bot.db и secret.key.
  • PostgreSQL:
    Окно терминала
    docker exec remnabot-db pg_dump -U remnabot remnabot > backup_$(date +%F).sql
    и дополнительно сохраните secret.key из тома bot-data.

Без secret.key восстановленная база будет нечитаемой (настройки зашифрованы) — храните его вместе с дампом.

Если раньше вы продавали подписки через remnashop, переносить пользователей руками не нужно — в боте есть мастер импорта: Система → 📦 Переезд с remnashop.

Как перенести:

  1. В remnashop: Дашборд → Бэкап → создайте бэкап базы. Получится файл db_backup_YYYY-MM-DD_HH-MM-SS.sql. (Можно и своим pg_dump — подойдёт обычный текстовый дамп, в том числе с --inserts.)
  2. Если файл больше 20 МБ, сожмите его: gzip db_backup.sql — Telegram не отдаёт боту документы крупнее.
  3. В нашем боте: Система → 📦 Переезд с remnashop → 📥 Загрузить дамп и пришлите файл в чат.
  4. Бот покажет, что нашёл (сколько пользователей, подписок, промокодов, платежей) — нажмите ✅ Импортировать.

Что переносится:

Из 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>.

Пользователей, которых в дампе нет, импорт не трогает вообще. Повторная загрузка того же дампа ничего не задваивает.