# docker-migrate Универсальный интерактивный инструмент миграции Docker-сервисов между Ubuntu-серверами. ## Что делает Этот скрипт переносит **не только Docker-контейнер**, а **всё окружение сервиса**: - Docker Compose, .env, volumes, bind mounts - Nginx конфиги, SSL-сертификаты - Systemd unit-файлы - Cron-задания - **Sidecar-процессы** (WARP, wireproxy, SOCKS-прокси, и т.д.) — найденные через loopback-соединения - Сетевую конфигурацию (iptables, routes, sysctl) ## Быстрый старт (одна команда из Gitea) ```bash wget -qO- https://giteas.stitch505.su/Stitch505/docker-migrate/raw/main/install.sh | bash ``` Или через curl: ```bash curl -fsSL https://giteas.stitch505.su/Stitch505/docker-migrate/raw/main/install.sh | bash ``` `install.sh` сам: 1. Проверит Python3 (при необходимости — `apt-get install -y python3`) 2. Скачает репозиторий (git clone / curl zip / wget zip) в `/opt/docker-migrate` 3. Поставит symlink `/usr/local/bin/docker-migrate` 4. Сразу запустит `migrate` Repository: https://giteas.stitch505.su/Stitch505/docker-migrate ## Как пользоваться На старом сервере (source): ```bash docker-migrate # или: python3 /opt/docker-migrate/migrate # Выбираем: 1 — Подготовка к переносу (Source) ``` Скрипт: 1. Запрашивает имя Docker-сервиса/контейнера 2. Автоматически найдет всё окружение 3. Покажет манифест (что будет перенесено) 4. Попросит подтверждения 5. Соберёт tar.gz архив 6. Предложит остановить сервис 7. Предложит передать на новый сервер На новом сервере (target): ```bash docker-migrate --mode=target --remote-dir=/tmp/docker-migrate-incoming ``` Или интерактивно: ```bash docker-migrate # Выбираем: 2 — Восстановление (Target) ``` Скрипт: 1. Проверит Ubuntu и права 2. Установит Docker, Compose, nginx (если нужно) 3. Сделает backup существующего 4. Восстановит файлы 5. Запустит сервис и проверит логи ## Resume (если ошибка) ```bash python3 migrate --resume ``` Или: ```bash python3 migrate # Выбираем: 3 — Продолжить (Resume) ``` ## Статус и логи ```bash python3 migrate --status python3 migrate --logs ``` ## Архитектура ``` docker-migrate/ ├── migrate # bootstrap (python3) ├── migrate.sh # bash wrapper (опционально) ├── core/ │ ├── main.py # точка входа, меню, CLI │ ├── fsm.py # state machine (resume) │ ├── state.py # JSON state.json │ ├── color.py # цветной вывод и UI │ └── runner.py # shell exec с логами ├── discover/ │ ├── docker.py # docker inspect, compose, mounts │ ├── nginx.py # nginx -T parser │ └── network.py # loopback, sidecar, routes, iptables ├── manifest/ │ └── manifest.py # build/review JSON manifest ├── source/ │ └── source.py # source-режим (pack, stop, transfer) ├── transfer/ │ └── transfer.py # scp/rsync adaptive transfer └── target/ └── target.py # target-режим (install, restore, verify) ``` ## Зависимости - `python3 >= 3.8` - `docker` (на source) - `ssh` / `scp` / `rsync` (для transfer) - `sudo` или root (для target) ## Принципы - **Модульность**, не монолит - **Универсальность**, не заточен под один сервис - **Автопоиск** вместо ручного выбора - **Полный манифест** вместо тупого копирования - **Resume** вместо "начни сначала"