Скрипт бекапа и восстановления
Форк скрипта distillium под RM-Only. Бэкап панели Remnawave (и при необходимости проекта бота). После установки запуск из любой точки: rmonly.
Установка
rw-backup (не путать с нашим rmonly). Удаление:
rw-backup remove
rw-backup и выберите пункт удаления скрипта. Панель Remnawave и бот не трогаются. Оба скрипта живут в /opt/rw-backup-restore/ — вместе они конфликтуют.
От root. Скрипт ставится в /opt/rw-backup-restore/, появляется команда rmonly.
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.
Что бэкапить: только Remnawave или Remnawave + RM-Only
По умолчанию в архив идёт только Remnawave. Проект бота (/root/bot) туда не попадает, пока не включите отдельно.
Чтобы добавить RM-Only в тот же архив:
- 1
rmonly→ 5. Настройки - 29. Бекап RM-Only
- 31. Включить бекап RM-Only. Путь по умолчанию —
/root/bot
remnawave_rmonly_*.tar.gz.Хранение бекапа
По умолчанию архив всегда остаётся локально в /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.
- 4
rmonly→ 4. Способ отправки → S3 и вставьте данные:
| Поле в скрипте | Timeweb |
|---|---|
| Endpoint | https://s3.twcstorage.ru |
| Region | ru-1 |
| Bucket | имя приватного бакета |
| Access / Secret | ключи пользователя S3 |
| Prefix | необязательно, например rmonly/ |
Проверка вручную
Сделайте тестовый бэкап: rmonly → 1. Создать бэкап.
Если в шапке меню оба включены, будет так:
REMNAWAVE: ВКЛЮЧЕН · /opt/remnawave RM-Only: ВКЛЮЧЕН · /root/bot
Если RM-Only выключен, вторая строка будет ВЫКЛЮЧЕН — в архиве только панель.
Cron — автобэкап
В пункте 3 настраивается cron (время по UTC+0): свои часы, ежечасно или ежедневно.
Перенос 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).
Три пути передать архив
Как только домен привязан, архив можно доставить на сервер бота тремя способами:
- Локально скопировать файл (
scpв/opt/rw-backup-restore/backup/) - Через ссылку S3 (пункт восстановления «ссылка на архив»)
- Перенос 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:
http://127.0.0.1:3000
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.
Реверс-прокси
Домен панели вы уже привязали к серверу бота. Когда убедились, что всё работает:
rmonly → 8. Nginx — реверс-прокси 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
- 2
rmonly→ 2. Восстановление → локальные файлы → свежий снимок - 3Восстановить всё: Remnawave + RM-Only (все файлы)
После восстановления панель Remnawave поднимается сама. Бота ставит install_bot.sh:
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 на сервере с ботом:
nano /etc/nginx/conf.d/website.conf
В location / строка proxy_pass — старый IP бота на новый:
proxy_pass http://НОВЫЙ_IP:3012;
nginx -t && systemctl reload nginx
Домен кабинета и SSL на прокси не трогайте, если они те же. Полный конфиг — шаг 7 кабинета.