Администрирование

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

Форк скрипта distillium под RM-Only. Бэкап панели Remnawave (и при необходимости проекта бота). После установки запуск из любой точки: rmonly.

1

Установка

⚠️
Если уже стоит оригинальный скрипт distillium — сначала удалите его. Команда оригинала: rw-backup (не путать с нашим rmonly). Удаление:
bash
rw-backup remove
Либо откройте rw-backup и выберите пункт удаления скрипта. Панель Remnawave и бот не трогаются. Оба скрипта живут в /opt/rw-backup-restore/ — вместе они конфликтуют.

От root. Скрипт ставится в /opt/rw-backup-restore/, появляется команда rmonly.

bash
curl -o ~/backup-restore.sh https://update.3xstore.org/backup-restore.sh && chmod +x ~/backup-restore.sh && ~/backup-restore.sh

Дальше в консоли: rmonly. Без меню: rmonly backup / restore / update / remove.

2

Что бэкапить: только Remnawave или Remnawave + RM-Only

По умолчанию в архив идёт только Remnawave. Проект бота (/root/bot) туда не попадает, пока не включите отдельно.

Чтобы добавить RM-Only в тот же архив:

  • 1rmonly → 5. Настройки
  • 29. Бекап RM-Only
  • 31. Включить бекап RM-Only. Путь по умолчанию — /root/bot
💡
Сервисы бота не стопаются: живой снимок SQLite. В общий архив панели кладётся remnawave_rmonly_*.tar.gz.
3

Хранение бекапа

По умолчанию архив всегда остаётся локально в /opt/rw-backup-restore/backup/.

Внешняя отправка — по желанию. Рекомендуем S3 (Timeweb, Selectel, Beget, AWS, MinIO — почти любое S3-совместимое хранилище). Telegram не примет файл больше 50 МБ, полного бэкапа панели обычно не хватает.

Данные для отправки заполняются в пункте 4. Способ отправки.

S3 / Timeweb

Удобный вариант — Timeweb Cloud → Объектное хранилище. Бакет создайте приватный.

  • 1Панель: timeweb.cloud/my/storage
  • 2Создайте хранилище и бакет. Тип доступа — приватный.
  • 3Создайте пользователя S3: Access Key и Secret Key.
  • 4rmonly → 4. Способ отправки → S3 и вставьте данные:
💡
Документация Timeweb: timeweb.cloud/docs/s3-storage. Telegram можно оставить только для уведомления «бэкап готов».

Проверка вручную

Сделайте тестовый бэкап: rmonly → 1. Создать бэкап.

Если в шапке меню оба включены, будет так:

шапка меню
REMNAWAVE: ВКЛЮЧЕН · /opt/remnawave
RM-Only: ВКЛЮЧЕН  ·  /root/bot

Если RM-Only выключен, вторая строка будет ВЫКЛЮЧЕН — в архиве только панель.

Cron — автобэкап

В пункте 3 настраивается cron (время по UTC+0): свои часы, ежечасно или ежедневно.

💡
Рекомендуем ежечасно. Тот же бэкап, что пункт 1. Локальные копии чистятся по сроку хранения в настройках.

Перенос Remnawave на сервер с ботом

Панель стоит на отдельном VPS, бот — на другом. Нужно перенести Remnawave под RM-Only (на тот же сервер, что бот). Полный переезд бота и панели на новый VPS — следующий раздел.

На сервере Remnawave

  • 1Установите скрипт (шаг 1). Для переноса панели достаточно обычного локального бэкапа — внешнее хранилище не обязательно.
  • 2Создайте бэкап пунктом 1 (или он создастся сам при SSH-переносе).

На сервере с ботом — подготовка

  • 1В веб-админке: Системные настройки → включите сервисный режим.
  • 2Можно временно остановить xuiweb (rmonly → 9 → стоп RM-Only, админка не трогается). Если за это время будут failed-платежи — в админке Инструменты → массовые операции можно всех продлить.
  • 3Перепривяжите домен Remnawave на IP сервера, где стоит RM-Only. Дождитесь, пока A-запись начнёт смотреть на новый сервер.

Остановка старой панели

Когда домен уже переключён: на старом сервере Remnawave в rmonly → 9. Остановка сервисов → остановите панель (docker compose down).

Три пути передать архив

Как только домен привязан, архив можно доставить на сервер бота тремя способами:

  1. Локально скопировать файл (scp в /opt/rw-backup-restore/backup/)
  2. Через ссылку S3 (пункт восстановления «ссылка на архив»)
  3. Перенос SSH — проще и удобнее

Перенос SSH (рекомендуем)

Запускается на сервере Remnawave, пункт 11. Скрипт ставится на сервер с ботом и туда же копируется свежий бэкап. Сам ничего не восстанавливает. Пароль SSH не сохраняется.

  • 1На сервере панели: rmonly → 11. Перенос SSH
  • 2Введите хост, порт (22), пользователя (root) и пароль сервера с ботом
  • 3Подтвердите. Скрипт поставится на бот-сервер, создастся свежий бэкап и уйдёт в /opt/rw-backup-restore/backup/ на стороне бота

Адрес панели в боте

После успешной отправки в веб-админке замените URL Remnawave на loopback и сохраните, затем перезапустите сервисы бота:

Remnawave → Настройки → Подключение → remnawave_base_url:

url
http://127.0.0.1:3000
bash · сервер с ботом
systemctl restart vpn-bot.service vpn-webadmin.service xuiweb.service website.service

Восстановление на сервере с ботом

  • 1На сервере с ботом: rmonly
  • 22. Восстановление → локальные файлы
  • 3Выберите свежий снимок из списка
  • 4Восстановить только Remnawave (не RM-Only — бот уже стоит)

Поднимутся Remnawave и node exporter. Для бота панель уже доступна локально на 127.0.0.1:3000.

💡
Выключите сервисный режим, когда веб-админка видит Remnawave онлайн и ноды на месте.

Реверс-прокси

Домен панели вы уже привязали к серверу бота. Когда убедились, что всё работает:

rmonly → 8. Nginx — реверс-прокси Remnawave — введите домен и установите.

Готово: панель перенесена.

⚠️
Когда всё проверили — остановите старый сервер Remnawave или полностью остановите контейнеры панели там. Иначе две панели с одним доменом снова разъедутся.

Перенос проекта Remnawave + RM-Only

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

⚠️
В шапке rmonly должно быть RM-Only: ВКЛЮЧЕН · /root/bot. Иначе в архиве не будет бота. Включение: шаг 2 — пункт 5 → 9 → включить.

Сообщить клиентам

Перед переносом напишите пользователям о технических работах. Заложите до 30 минут: сам перенос обычно 10–30 минут, всё упирается в скорость привязки доменов к новому серверу.

Сначала домены

После рассылки первым делом перепривяжите домены на IP нового сервера: и Remnawave, и RM-Only.

💡
Если домены новые (не те же имена, а другие) — сразу замените их в .env бота, в вебхуках Remnawave, в платёжных системах и в SUBPAGE. Иначе после переезда придут колбэки на старые URL.

Стоп бота, панель ещё работает

На старом сервере: rmonly. Remnawave пока не трогайте.

  • 1Пункт 9. Остановка сервисов
  • 23. Полностью отключить сервисы RM-Only (кроме админки)

Когда бот остановлен — перенос SSH.

Перенос SSH

  • 1Пункт 11. Перенос SSH
  • 2Данные нового сервера: хост, порт, root, пароль. Скрипт пароль не хранит.
  • 3Дождитесь сообщения об успешном переносе (скрипт встанет на новый сервер, свежий архив уйдёт в /opt/rw-backup-restore/backup/)

После успешной отправки — стоп Remnawave

На старом сервере: rmonly → 9 → остановить панель Remnawave.

На новом сервере

  • 1Проверьте, что домены уже смотрят на этот VPS
  • 2rmonly → 2. Восстановление → локальные файлы → свежий снимок
  • 3Восстановить всё: Remnawave + RM-Only (все файлы)

После восстановления панель Remnawave поднимается сама. Бота ставит install_bot.sh:

bash · новый сервер
cd /root/bot
bash install_bot.sh
  • 1Выберите 2) Восстановление из архива бекапа. Токен, секретный путь админки и клиенты берутся из vpn_bot.db — установщик их не меняет.
  • 2Введите домен бота для SSL (как в DNS). Certbot выпустит сертификат, nginx получит xuiweb.conf.
  • 3Дождитесь Восстановление завершено. В консоли будет ссылка на админку: https://домен/секретный_путь/.

Ставятся venv, зависимости и systemd. Сразу после установки работает только vpn-webadmin; бот, xuiweb и website остановлены.

💡
Админка после этого уже доступна. Остальные сервисы будут остановлены — запустите их в веб-админке: Инструменты → Сервисы (описание).

Nginx панели

rmonly → 8. Nginx — реверс-прокси Remnawave — введите домен Remnawave и установите.

Готово: проект перенесён.

⚠️
Убедитесь, что старый сервер выключен (или контейнеры панели и бот там не запущены), а новый полноценно работает: админка, панель онлайн, ноды, оплаты.

Если был личный кабинет (WEBSITE)

Установщик бота кабинет сам не поднимает. На новом сервере с ботом выполните шаги 4–6 инструкции кабинета: venv, systemd, UFW (порт 3012 только с IP проксирующего сервера).

На проксирующем сервере (тот, где висит домен кабинета) поменяйте IP бота в nginx — кабинет по-прежнему слушает :3012 на сервере с ботом:

bash · проксирующий сервер
nano /etc/nginx/conf.d/website.conf

В location / строка proxy_pass — старый IP бота на новый:

nginx
proxy_pass         http://НОВЫЙ_IP:3012;
bash
nginx -t && systemctl reload nginx

Домен кабинета и SSL на прокси не трогайте, если они те же. Полный конфиг — шаг 7 кабинета.