Миграция из Remnashop
Remnashop импортируется через общий скрипт импорта backend/scripts/import_legacy.py.
Самый удобный путь - интерактивный install wizard:
Wizard полностью русскоязычный. В главном меню выберите:
Установить новый remnawave-minishop и мигрировать данные из другого бота- для нового сервера;Мигрировать данные в уже установленный remnawave-minishop- если compose-папка и.envуже готовы.
Если wizard находит Remnashop на этом же сервере, он предлагает миграцию из него по умолчанию и подставляет найденные значения в уже заполненные ответы.
Для отдельного сервера выбирайте профиль Caddy HTTPS: это дефолтный вариант
wizard с автоматическими сертификатами. Если Remnawave Panel уже установлена на
этом же хосте скриптом eGamesAPI/remnawave-reverse-proxy,
выберите профиль Уже установленная Remnawave через eGames - использовать ее Nginx/TLS. В этом режиме wizard использует no-proxy compose, прописывает
DEPLOYMENT_PROFILE=egames и сам добавляет server-блоки для backend/webhook-домена
и Mini App в найденный nginx.conf eGames. После применения миграции wizard
перечитывает eGames Nginx (nginx -t, затем reload или restart контейнера),
чтобы Mini App/frontend не оставался за старым upstream.
Что переносится
Заголовок раздела «Что переносится»- пользователи Telegram и email-only аккаунты, username, подтвержденные email, Google/Yandex/VK OAuth identities, Remnawave UUID и метаданные профиля;
- старые referral codes и связи рефералов;
- текущий баланс
pointsкак стартовая запись пользовательского баланса; - подписки, сроки, лимиты трафика, HWID/device limit, UUID подписок панели, managed squads и индивидуальные internal/external squad overrides;
- платежи и статусы платежей;
- коды активации на дни подписки или обычный трафик и их активации, если таблицы есть в source DB;
- рекламные ссылки
ad_linksи первая атрибуция пользователей; - служебные mappings, чтобы повторный запуск мог работать в режиме
merge; - настройки совместимости Remnashop в админке: старые ref-ссылки и promo codes.
Данные, которые не имеют прямого аналога, сохраняются в служебных таблицах миграции или message logs как заметки, чтобы администратор мог проверить их после переноса.
Реферальные связи остаются обычными рефералами. Миграция не создает из них партнерские профили или заявки партнерской программы.
Пароли Remnashop не копируются: их хэши не считаются совместимым контрактом.
Подтвержденные адреса и OAuth identities позволяют сопоставить существующий
аккаунт; пользователи только с email получают стабильный технический user_id.
Валюта баланса
Заголовок раздела «Валюта баланса»Один point переносится как одна целая единица settings.default_currency
Remnashop. Для RUB/USD это означает умножение на 100 minor units, а для Telegram
Stars (XTR) scale равен 0 и значение переносится без умножения. Importer не
суммирует строки referral_rewards, потому что итог уже хранится в users.points.
Wizard показывает выбранную валюту после dry-run и, если есть ненулевые
балансы, записывает в .env USER_BALANCE_CURRENCY и включает
USER_BALANCE_ENABLED. Валюту можно явно переопределить через
REMNASHOP_BALANCE_CURRENCY или CLI-флаг --balance-currency. Если валюта не
определяется либо повторный запуск обнаруживает отличающуюся стартовую запись,
применение блокируется и транзакция откатывается.
Не переносятся автоматически история рассылок, device-only коды, бессрочные трафиковые коды и постоянные personal/purchase discounts: их семантика не имеет безопасного прямого соответствия текущей модели Minishop. Они отражаются в сводке и config plan для ручной проверки.
Настройки и платежные провайдеры
Заголовок раздела «Настройки и платежные провайдеры»Если указать старый Remnashop .env, importer дополнительно переносит часть
настроек в админские overrides:
REMNAWAVE_HOST->PANEL_API_URL;REMNAWAVE_TOKEN->PANEL_API_KEY;REMNAWAVE_COOKIE->PANEL_API_COOKIE;REMNAWAVE_WEBHOOK_SECRET->PANEL_WEBHOOK_SECRET;BOT_SUPPORT_USERNAME->SUPPORT_LINK;APP_DEFAULT_LOCALE->DEFAULT_LANGUAGE.
BOT_MINI_APP из Remnashop не переносится автоматически. В Remnashop эта
переменная управляет кнопкой подключения к subscription page или внешнему Mini
App, а не веб-кабинетом Remnashop. В Minishop SUBSCRIPTION_MINI_APP_URL
должен указывать на текущий frontend/Mini App этого стека; wizard настраивает
его из WEBHOOK_HOST/MINIAPP_HOST или MINIAPP_PUBLIC_URL.
Значения-заглушки вроде change_me importer пропускает, чтобы случайно не
записать шаблонные секреты в рабочую конфигурацию.
Платежные провайдеры берутся из таблицы Remnashop payment_gateways.
Поддерживаются и автоматически маппятся: Telegram Stars, YooKassa, WATA,
CryptoPay, Heleket, PayKilla, FreeKassa и Platega. Для них importer переносит флаги
включения, API-ключи/merchant IDs и прямые технические параметры, без которых
провайдер не сможет работать: YooKassa receipt email/VAT, FreeKassa second
secret/payment method/server IP и Platega payment method.
Provider currency и supported-currency ограничения не переносятся автоматически:
в Minishop валюта платежа управляется тарифами и DEFAULT_CURRENCY_SYMBOL.
Если старый gateway Remnashop был настроен на нестандартную валюту, importer
оставит предупреждение в JSON-сводке; проверьте CRYPTOPAY_ASSET,
HELEKET_CURRENCY, HELEKET_SUPPORTED_CURRENCIES, PAYKILLA_CURRENCY,
PAYKILLA_PAYMENT_CURRENCIES или
PLATEGA_SUPPORTED_CURRENCIES вручную.
Провайдеры YooMoney, Cryptomus, MulenPay, PayMaster, RoboKassa и UrlPay сейчас не имеют прямого аналога в Minishop. Если они были в Remnashop, importer оставит предупреждение в JSON-сводке и notes миграции, а настроить их нужно вручную или через будущий отдельный provider.
Remnashop может хранить секреты в формате enc_.... Для расшифровки нужен
старый APP_CRYPT_KEY; проще всего указать путь к старому .env в wizard или
передать --source-env-file. Если ключ не передан или неверный, зашифрованные
значения будут пропущены с предупреждением, остальные данные продолжат
импортироваться.
После успешного применения wizard в самом конце печатает раздел
Дальнейшие шаги со списком новых адресов webhook. В профиле egames он
дополнительно обновляет WEBHOOK_URL в найденном .env Remnawave Panel и
перезапускает backend панели. Остальные внешние платежные webhook нужно указать
во внешних сервисах вместо старых Remnashop URL:
- Remnawave Panel ->
WEBHOOK_URL:WEBHOOK_BASE_URL+/webhook/panel; - YooKassa HTTP notifications URL:
WEBHOOK_BASE_URL+/webhook/yookassa; - WATA webhook/callback URL:
WEBHOOK_BASE_URL+/webhook/wata; - CryptoBot/Crypto Pay webhook URL:
WEBHOOK_BASE_URL+/webhook/cryptopay; - Heleket payment webhook/callback URL:
WEBHOOK_BASE_URL+/webhook/heleket; - PayKilla webhook URL:
WEBHOOK_BASE_URL+/webhook/paykilla; - FreeKassa notification/result URL:
WEBHOOK_BASE_URL+/webhook/freekassa; - Platega webhook URL:
WEBHOOK_BASE_URL+/webhook/platega; - Telegram webhook
WEBHOOK_BASE_URL+/tg/webhookвыставляется ботом автоматически при старте.
Сценарий wizard
Заголовок раздела «Сценарий wizard»Importer автоматически строит TARIFFS_CONFIG_PATH из Remnashop plans,
plan_durations и plan_prices, затем сопоставляет plan id/name/tag/public_code
с созданным tariff_key. Используйте --tariff-map-json только если нужно
переопределить это автоматическое сопоставление.
- Wizard использует папку установки
/opt/remnawave-minishopпо умолчанию, скачивает выбранный compose-профиль иbackend/scripts/import_legacy.pyчерез GitLab Raw, без клонирования репозитория. Repository и ref не спрашиваются в обычном сценарии; для fork/dev-ветки задайтеMINISHOP_INSTALL_REPOиMINISHOP_INSTALL_REFперед запуском. - Wizard пытается найти Remnashop PostgreSQL,
.env,BOT_TOKEN,BOT_OWNER_ID/ADMIN_IDS,BOT_SECRET_TOKEN, Remnawave API URL/key/cookie и webhook secret, затем показывает найденные значения как уже заполненный ответ. Enter оставляет найденное значение. - Вы указываете source PostgreSQL DSN Remnashop. Schema источника по умолчанию
publicи не спрашивается в обычном wizard; для редкого кастомного случая задайтеREMNASHOP_SOURCE_SCHEMA=custom_schema. - Опционально указываете путь к старому Remnashop
.envдляAPP_CRYPT_KEY, Remnawave API settings, Telegram settings и переносимых provider settings. - Вы выбираете целевую БД: текущую compose-БД или ручной target DSN. Для
текущей compose-БД wizard предлагает pre-migration backup в
backups/pre-remnashop-migration-*; внутри будут основные файлы деплоя, PostgreSQL dump при доступной БД иrestore.sh. - При необходимости указываете JSON map тарифов Remnashop в локальные
tariff_key, например{"basic": "standard_month"}. - При необходимости задаете валюту баланса; пустой ответ использует
settings.default_currencyисходной базы. - Wizard запускает проверку без записи (
dry-run), показывает краткую сводку и сохраняет полный JSON/raw-вывод в.installer/remnashop-dry-run-summary.json. - После подтверждения
yimporter применяет изменения. У вопроса применения дефолтY, поэтому Enter после успешной проверки означает “применить”;nостановит миграцию без записи. - После применения wizard сохраняет apply-сводку, обновляет webhook Remnawave
Panel для eGames-профиля, перезапускает
backend,workerиfrontend, перечитывает eGames Nginx при необходимости, отправляет Telegram-уведомление админам/лог-чату и в финальном разделеДальнейшие шагипоказывает новые webhook URL.
Если source DB находится на том же Docker host и host в DSN совпадает с именем
контейнера, например remnashop-db, wizard сам подключит этот контейнер к сети
<COMPOSE_PROJECT_NAME>-network (по умолчанию remnawave-minishop-network) перед dry-run. Для подключения к сервису
вне Docker по-прежнему используйте host.docker.internal или внешний адрес
сервера.
Ручной запуск
Заголовок раздела «Ручной запуск»Если нужно запустить importer без wizard:
После успешного dry-run повторите команду без --dry-run. По умолчанию
режим конфликтов merge: существующие пользователи и платежи сопоставляются,
а новые записи добавляются. Для узкого импорта используйте --only, например
--only users,referrals,balances,promocodes,advertising.