1. Гайды
  2. Панели и Xray

Обновления панели, нод и бота без поломок

Команда pull занимает десять секунд, откат без бэкапа занимает вечер. Порядок обновления Remnawave, нод и Bedolaga, закреплённые теги, проверка и откат, собранные из документации и чужих ошибок.

Актуально для Bedolaga 4.15, Remnawave 3.4 (по официальным репозиториям на 2026-09-24)Обновлено 24.09.2026 6 мин чтения

Панель, ноды и бот выпускаются независимо, но общаются по API, которое время от времени меняют без обратной совместимости. Типичный сценарий из базы: обновили что-то одно, и в понедельник у половины клиентов «0 байт».

Кто от кого зависит

Официально: документация Remnawave ( Upgrading) советует обновлять сначала панель, потом ноды и перед этим читать changelog. Документация Bedolaga ведёт таблицу совместимости с панелью: бот v4.0.0 требует Remnawave 3.0.0 (числовые id вместо UUID, ломающее изменение), GeoCheck из v4.1.0 требует панель и ноду 3.3.0+.

Что сообщество узнало на практике:

ДатаЧто случилосьВыводГде
28.03.2026Панель 2.7.0 не работала с нодами ниже 2.7: «обновил панель, у меня ноды по 0; обновил ноды, всё заработало». После обновления ноды пришлось перезапускатьноды обновлять сразу за панельюрелизы
31.03.2026В панели 2.7.x убрали эндпоинты, старый бот получил 404 Cannot GET /api/nodes/usage/realtimeбот обновлять после панелииндекс релизов
30.06–09.07.2026Бот 3.62.0 требует Remnawave 2.8.0, обратной совместимости нетпанель и бот обновлять паройиндекс релизов
август 2026Панель 3.0.0: бот 3.67 на ней падает с ZodValidationException "Invalid uuid", нужны бот 4+ и кабинет 1.65+. Бот 4.0 на панели 2.8.1 даёт Validation failedмажор панели = мажор ботаошибки
19–21.08.2026Нода 3.3.0 работает только с панелью 3.3.0 и не заводится на 3.2.2нода не новее панелирелизы
20–23.08.2026Панель 2.8.0 + нода latest: Client network socket disconnected before secure TLS connection was established. Лечили закреплением ноды 3.1.1 или 3.2.2 в composeникакого latestошибки

Отсюда порядок, который в базе повторяют с весны 2026: панель, затем ноды, затем бот, затем кабинет ( кейсы).

  1. Бэкап баз и .env
  2. Релиз-ноты
  3. Панель
  4. Проверка
  5. Ноды
  6. Бот и кабинет
Порядок обновления. Панель первой по docs.rw, бот и кабинет последними, потому что они клиенты API панели

Бэкап до, а не после

И панель, и бот мигрируют базу при старте. У Remnawave это prisma migrate deploy в docker-entrypoint.sh, у Bedolaga Alembic в main.py (пропускается только при SKIP_MIGRATION=true). Скачать новый образ и запустить его значит изменить схему. Например, в Remnawave 3.0.0 миграция удаляет UUID пользователей и переименовывает колонку id. Вернуть старый образ поверх такой базы не получится, откат возможен только из дампа.

# панель: роль и база из окружения контейнера
docker exec remnawave-db sh -c \
  'pg_dump -Fc -U "$POSTGRES_USER" -d "$POSTGRES_DB"' > /root/panel_$(date +%F).dump
# бот
docker exec remnawave_bot_db sh -c \
  'pg_dump -Fc -U "$POSTGRES_USER" -d "$POSTGRES_DB"' > /root/bot_$(date +%F).dump
# конфиги
cp /opt/remnawave/.env /opt/remnawave/docker-compose.yml /root/

Проверь, что дамп не пустой (pg_restore -l файл | head), и унеси его с сервера. Расписание, шифрование и проверка восстановления разобраны в гайде Бэкапы через restic.

Релиз-ноты

Где читать:

Искать нужно три вещи: слова breaking, переименованные переменные окружения и требования к версии соседнего компонента. Пример из перехода на бот 4.0.0: TRAFFIC_EXCLUDED_USER_UUIDS стала TRAFFIC_EXCLUDED_USER_IDS, и значения нужно заново взять из панели, автоматически они не конвертируются.

Грабли

Прыгать через много версий бота рискованно. По базе, с версий ниже 3.15.1 сначала обновлялись до 3.15.1 (там переход на Alembic), потом до последней ( установка и обновление, март–апрель 2026). Прыжок 3.46.1 → 3.60.0 падал с DuplicateTableError ( индекс релизов, 08.06.2026).

Закрепи версии

В официальном docker-compose-prod.yml панели стоит remnawave/backend:3, то есть «любая 3.x». Нода в примерах документации идёт с latest. Так следующий pull может принести версию, о которой ты не знал. Удобнее указать точный тег и менять его руками:

Приедет то, что сейчас в реестре

image: remnawave/backend:3
# нода
image: remnawave/node:latest

Приедет то, что ты выбрал

image: remnawave/backend:3.4.4
# нода
image: remnawave/node:3.4.1

Обратная сторона мажорного тега: :2 никогда не подтянет 3.x. На этом спотыкались: в базе есть жалобы «ремна обновляется только до 2.8.1», а совет из того же обсуждения сменить версию с 2 на 3 ( релизы, установка и обновление, 21.08.2026). Переход на новый мажор всегда делается сменой тега.

У бота образа в compose нет, он собирается из исходников (build: .). docker compose pull для такого сервиса ничего не скачает, поэтому версию закрепляют git-тегом:

cd /opt/remnawave-bedolaga-telegram-bot   # ← свой путь
git fetch --tags
git checkout v4.15.0
docker compose up -d --build

Заметка

Готовые образы бота есть на Docker Hub (fr1ngg/remnawave-bedolaga-telegram-bot), но на 2026-09-24 теги там вида v4.15.0-877690a7 и latest, чистого v4.15.0 нет. Для закрепления проще git-тег.

Обновление по шагам

Панель. В документации между pull и up ещё стоит docker compose down. Без него up -d тоже пересоздаёт контейнеры, у которых поменялся образ, тома при этом сохраняются:

cd /opt/remnawave
sed -i -E 's#remnawave/backend:[A-Za-z0-9._-]+#remnawave/backend:3.4.4#' docker-compose.yml
docker compose pull
docker compose up -d
docker compose logs -f remnawave

Ноды: по одной, начиная с наименее нагруженной. На ноде нет базы, конфиги хранятся в панели, так что откат ноды сводится к смене тега.

cd /opt/remnanode
sed -i -E 's#remnawave/node:[A-Za-z0-9._-]+#remnawave/node:3.4.1#' docker-compose.yml
docker compose pull
docker compose up -d
docker compose logs -f

Бот и кабинет обновляются последними и вместе. В базе фиксировали связки кабинет 1.64 с ботом 3.67 и кабинет 1.65+ под Remnawave 3.0 ( релизы). Про устройство compose, сети и чистку старых образов есть отдельный гайд Docker для панелей.

Проверка после обновления

  • docker compose ps: контейнер не перезапускается по кругу. У панели есть healthcheck, статус должен стать healthy.
  • Логи панели: миграции прошли, ошибок нет. При неудачной миграции контейнер завершается сам, это заложено в entrypoint.
  • В панели все ноды подключены. Нода, которая висит offline после обновления, это повод откатить именно её, а не всё сразу.
  • Бот: docker compose logs -f bot без ошибок API, в админке проходит синхронизация с панелью, /health/unified отвечает.
  • Одно реальное подключение клиентом и тестовая выдача подписки через бота.

Откат

  1. Вернуть прежний тег (или git checkout прежнего тега у бота).
  2. Если новая версия успела стартовать, миграции уже применены. Остановить приложение и восстановить дамп:
cd /opt/remnawave
docker compose stop remnawave
docker exec -i remnawave-db sh -c \
  'pg_restore -U "$POSTGRES_USER" -d "$POSTGRES_DB" --clean --if-exists' < /root/panel_ДАТА.dump
docker compose up -d
  1. Кэш панели (valkey) в официальном compose работает без сохранения на диск (--save "", --appendonly no) и пустеет при пересоздании контейнера. По опыту сообщества, если после восстановления панель не встаёт, помогает очистить redis ( бэкапы). У бота похожий случай: залипший режим техработ лечится удалением ключа maintenance_status в Redis ( ошибки, август 2026).

Postgres между major-версиями

22.06.2026 в официальном compose панели образ базы сменился с postgres:17.6 на postgres:18.4, и одновременно точка монтирования тома переехала с /var/lib/postgresql/data на /var/lib/postgresql. Причина во втором изменении: начиная с 18-й версии образ postgres хранит данные в /var/lib/postgresql/18/docker.

Не делай так

Не копируй новый compose поверх рабочей установки на 17-м Postgres. Формат данных между major-версиями меняется, и PostgreSQL 18 не запустится на каталоге от 17-го. Официальные пути: дамп старой версией (pg_dumpall) и восстановление в новый пустой том либо pg_upgrade. Старый том не удаляй, пока не проверишь новый.

Опыт сообщества здесь скромный: скрипт distillium/remnawave-backup-restore с Postgres 18 сам не восстанавливал, приходилось вручную ( бэкапы, конец 2025). После того как в форке eGames подняли Postgres, нормального переноса с форка на обычную Remnawave не осталось ( релизы, 20.07.2026). Бота это пока не касается: у него в compose postgres:15-alpine, этот тег обновляет только минорные версии 15.x.

Если ставишь с нуля, бери актуальный compose из документации, см. Remnawave с нуля и Нода Remnawave. Про связку бота с панелью есть гайд Bedolaga-бот.

Источники