7.6 KiB
Миграция с remnawave-tg-shop на remnawave-minishop
Для переноса со старого родственного стека используйте общий install wizard:
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-папка уже готова. Затем
выберите источник Old remnawave-tg-shop.
Wizard поддерживает два способа переноса:
Copy old Docker volumes- для старого compose-стека на том же Docker host. Скрипт подготавливает новый stack, копируетremnawave-tg-shop-db-dataвremnawave-minishop-db-data, опционально переносит Caddy volumes и запускает новый stack.Dump from a source PostgreSQL DSN- для старой БД, доступной по DSN. Скрипт поднимает целевойpostgres, сбрасывает целевую БД, делаетpg_dumpиз старой БД, восстанавливает дамп в compose-БД и запускает сервисmigrate.
В обоих режимах старые volumes и старая БД не удаляются автоматически.
Как работает перенос
remnawave-tg-shop и remnawave-minishop имеют совместимую историю схемы.
После переноса старой PostgreSQL-БД сервис migrate накатывает недостающие
миграции из backend/db/migrator.py: сначала применяются Base.metadata,
затем последовательные записи schema_migrations. Это one-shot сервис: он
должен завершиться с кодом 0, после чего стартуют backend и worker.
При volume-миграции wizard:
-
Останавливает известные контейнеры старого и переходного стеков, если вы подтверждаете этот шаг.
-
Запускает
docker compose up --no-start, чтобы Docker Compose создал новые volumes. -
Копирует старый volume БД:
docker run --rm \ -v remnawave-tg-shop-db-data:/from:ro \ -v remnawave-minishop-db-data:/to \ alpine sh -c "cd /from && cp -a . /to" -
Если старые Caddy volumes существуют, переносит
remnawave-tg-shop-caddy-data->remnawave-minishop-caddy-dataиremnawave-tg-shop-caddy-config->remnawave-minishop-caddy-config. -
Запускает новый stack через Docker Compose.
Если целевой DB volume уже непустой, wizard не перетирает его молча: он останавливается и просит отдельное подтверждение на продолжение без копирования старой БД.
Что меняется в архитектуре
Контейнеры:
| Версия | Сервисы |
|---|---|
v2.7.0 |
remnawave-tg-shop, remnawave-tg-shop-db |
v3.1.x-v3.3.x |
remnawave-minishop, remnawave-minishop-db |
v3.4+ |
remnawave-minishop-backend, remnawave-minishop-worker, remnawave-minishop-frontend, remnawave-minishop-migrate, remnawave-minishop-postgres, remnawave-minishop-redis |
Volumes:
| Volume | Что происходит |
|---|---|
remnawave-minishop-db-data |
переносится из remnawave-tg-shop-db-data или восстанавливается из source DSN |
remnawave-minishop-redis-data |
создается пустым |
remnawave-minishop-shop-data |
создается пустым; runtime-файлы в /app/data дальше настраиваются через админку или вручную |
remnawave-minishop-caddy-data / remnawave-minishop-caddy-config |
переносятся из remnawave-tg-shop-caddy-*, если старый стек использовал Caddy |
Доступные compose-профили: docker-compose.yml,
deploy/examples/caddy/docker-compose.yml,
deploy/examples/nginx/docker-compose.yml,
deploy/examples/newt/docker-compose.yml,
deploy/examples/no-proxy/docker-compose.yml.
Переменные окружения
Перед запуском нового стека проверьте .env. Самые важные изменения:
| Было | Стало | Действие |
|---|---|---|
TELEGRAM_WEBHOOK_SECRET |
WEBHOOK_SECRET_TOKEN |
Перенести значение или сгенерировать новый stable secret. |
TELEGRAM_WEBHOOK_PATH |
удалена | Путь вебхука теперь рассчитывается автоматически. |
REQUIRED_CHANNEL_SUBSCRIBE_TO_USE |
удалена | Гейт включается, когда задан REQUIRED_CHANNEL_ID. |
STARS_PROVIDER_TOKEN |
удалена | Telegram Stars используются напрямую. |
POSTGRES_HOST=remnawave-tg-shop-db |
postgres внутри Compose |
В compose-файлах POSTGRES_HOST переопределяется service name postgres. |
WEBHOOK_BASE_URL |
обязательна | Без публичного URL backend не стартует корректно. |
| - | REDIS_URL=redis://redis:6379/0 |
В compose-профилях задано автоматически. |
| - | WEBAPP_SESSION_SECRET, WEBAPP_ENABLED, TARIFFS_CONFIG_PATH |
Новые настройки Web App и каталога тарифов. |
Остальные продуктовые настройки удобнее проверить после первого входа в админку.
Reverse Proxy
В старом стеке часто был один upstream remnawave-tg-shop:8000. В текущем
split-arch stack маршруты разделены:
| Назначение | Service | Port |
|---|---|---|
| Telegram, платежные и panel webhooks | backend |
8080 |
| Health-check | backend |
8080 (/healthz) |
| Web App API и auth | backend |
8081 внутри Docker-сети |
| Статический Web App frontend | frontend |
80 |
Минимальная схема для внешнего Nginx:
upstream remnawave_backend_webhooks { server backend:8080; }
upstream remnawave_frontend { server frontend:80; }
server {
server_name app.domain.com;
listen 443 ssl;
location /webhook/ { proxy_pass http://remnawave_backend_webhooks; }
location /healthz { proxy_pass http://remnawave_backend_webhooks; }
location / { proxy_pass http://remnawave_frontend; }
}
Готовые Caddy, Nginx, Pangolin/Newt и no-proxy профили уже содержат нужную маршрутизацию.
Проверка
После переноса:
docker compose ps
docker compose logs migrate
docker compose logs -f backend worker frontend
migrate должен завершиться успешно, а backend, worker, frontend,
postgres и redis должны быть running/healthy.
Когда убедитесь, что новый stack работает, старые volumes можно удалить вручную:
docker volume rm remnawave-tg-shop-db-data
docker volume rm remnawave-tg-shop-caddy-data remnawave-tg-shop-caddy-config 2>/dev/null || true