123 lines
8.1 KiB
Markdown
123 lines
8.1 KiB
Markdown
# Миграция из Remnashop
|
||
|
||
Remnashop импортируется через общий скрипт импорта `backend/scripts/import_legacy.py`.
|
||
Самый удобный путь - интерактивный install wizard:
|
||
|
||
```bash
|
||
curl -fsSL https://raw.githubusercontent.com/3252a8/remnawave-minishop/main/scripts/install.sh -o install.sh
|
||
sh install.sh
|
||
```
|
||
|
||
В меню выберите `Install new stack and run migration` для нового сервера
|
||
или `Run migration only`, если compose-папка и `.env` уже готовы.
|
||
|
||
## Что переносится
|
||
|
||
- пользователи Telegram, username, email, Remnawave UUID и метаданные профиля;
|
||
- старые referral codes и связи рефералов;
|
||
- подписки, сроки, лимиты трафика, HWID/device limit и UUID подписок панели;
|
||
- платежи и статусы платежей;
|
||
- промокоды на дни подписки и их активации, если таблицы есть в source DB;
|
||
- служебные mappings, чтобы повторный запуск мог работать в режиме `merge`;
|
||
- настройки совместимости Remnashop в админке: старые ref-ссылки и promo codes.
|
||
|
||
Данные, которые не имеют прямого аналога, сохраняются в служебных таблицах миграции или
|
||
message logs как заметки, чтобы администратор мог проверить их после переноса.
|
||
|
||
## Настройки и платежные провайдеры
|
||
|
||
Если указать старый Remnashop `.env`, importer дополнительно переносит часть
|
||
настроек в админские overrides:
|
||
|
||
- `REMNAWAVE_HOST` -> `PANEL_API_URL`;
|
||
- `REMNAWAVE_TOKEN` -> `PANEL_API_KEY`;
|
||
- `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, 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` или
|
||
`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. Их
|
||
нужно указать во внешних сервисах вместо старых 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`;
|
||
- FreeKassa notification/result URL: `WEBHOOK_BASE_URL` + `/webhook/freekassa`;
|
||
- Platega webhook URL: `WEBHOOK_BASE_URL` + `/webhook/platega`;
|
||
- Telegram webhook `WEBHOOK_BASE_URL` + `/tg/webhook` выставляется ботом
|
||
автоматически при старте.
|
||
|
||
## Flow wizard
|
||
|
||
1. Wizard скачивает compose-профиль и `backend/scripts/import_legacy.py` через
|
||
`raw.githubusercontent.com`, без клонирования репозитория.
|
||
2. Вы указываете source PostgreSQL DSN Remnashop и schema, обычно `public`.
|
||
3. Опционально указываете путь к старому Remnashop `.env` для `APP_CRYPT_KEY`,
|
||
Remnawave API settings и переносимых settings.
|
||
4. Вы выбираете целевую БД: текущую compose-БД или ручной target DSN.
|
||
5. При необходимости указываете JSON map тарифов Remnashop в локальные
|
||
`tariff_key`, например `{"basic": "standard_month"}`.
|
||
6. Wizard запускает `dry-run` и показывает JSON-сводку.
|
||
7. После подтверждения `y` importer применяет изменения, печатает список новых
|
||
webhook URL для Remnawave Panel и платежных провайдеров, затем перезапускает
|
||
`backend`/`worker`, чтобы настройки совместимости перечитались.
|
||
|
||
Если source DB находится на том же Docker host, помните, что DSN выполняется
|
||
из backend-контейнера. Для подключения к сервису вне compose-сети может
|
||
понадобиться host name вроде `host.docker.internal`, внешний адрес сервера или
|
||
ручное подключение контейнеров к общей Docker network.
|
||
|
||
## Ручной запуск
|
||
|
||
Если нужно запустить importer без wizard:
|
||
|
||
```bash
|
||
docker compose run --rm backend \
|
||
python backend/scripts/import_legacy.py \
|
||
--source-type remnashop \
|
||
--source-dsn 'postgresql://old_user:old_password@old_host:5432/remnashop' \
|
||
--source-schema public \
|
||
--source-env-file /path/to/remnashop/.env \
|
||
--dry-run
|
||
```
|
||
|
||
После успешного `dry-run` повторите команду без `--dry-run`. По умолчанию
|
||
режим конфликтов `merge`: существующие пользователи и платежи сопоставляются,
|
||
а новые записи добавляются. Для узкого импорта используйте `--only`, например
|
||
`--only users,referrals,promocodes`.
|