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

С Remnawave

Установщик сам находит Remnawave на сервере и предлагает перенести данные. Если выбрать Docker, скрипт скопирует данные напрямую из PostgreSQL Remnawave в PostgreSQL GoWave, минуя промежуточный файл SQLite. Исходная база во всех сценариях только читается.

Ниже описаны команды для ручного запуска.

Команда читает базу Remnawave и переносит записи в PostgreSQL GoWave одной транзакцией:

Окно терминала
# Настройки найдутся автоматически
gowave migrate pg-to-pg
# Или с явным указанием адресов подключения
gowave migrate pg-to-pg 'postgresql://rw:pass@127.0.0.1:5432/remnawave' 'postgresql://gw:pass@127.0.0.1:5432/gowave'

Флаг --force разрешает перезаписать данные, если в целевой базе уже есть пользователи, ноды или хосты.

Особенности переноса:

  • Исходная база читается в транзакции с уровнем изоляции Repeatable Read. Запись в неё не ведётся.
  • Целевая база заполняется за одну транзакцию. Любая ошибка отменяет изменения целиком.
  • Защита от ошибок: скрипт проверяет отпечатки баз и откажется запускаться, если источник и цель совпадают.
  • Типы UUID, JSON, массивы и перечисления переносятся с приведением типов через текстовый формат.
  • Пустые значения NULL для полей без указателей приводятся к нулевым значениям языка Go.
  • Контейнеры старой панели продолжают работать до завершения переноса. После проверки работы GoWave остановите их вручную или через интерактивное меню.

Если GoWave работает без Docker через systemd и хранит данные в файле:

Окно терминала
gowave migrate pg-to-sqlite
  • Настройки подключения к Remnawave считываются из /opt/remnawave/.env.
  • Переносятся все таблицы: пользователи, трафик, ноды, хосты, шаблоны, сквады.
  • По умолчанию создаётся файл gowave-migrated.sqlite. Укажите его в переменной DATABASE_URL с DB_DRIVER=sqlite и перезапустите службу GoWave.

Оба сценария доступны в интерактивном меню:

Окно терминала
gowave rescue
  • Пункт 8: перенос из PostgreSQL Remnawave в SQLite.
  • Пункт 10: перенос напрямую из PostgreSQL Remnawave в PostgreSQL GoWave.