Files
docker-migrate/README.md

4.4 KiB
Raw Permalink Blame History

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)

wget -qO- https://giteas.stitch505.su/Stitch505/docker-migrate/raw/main/install.sh | bash

Или через curl:

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):

docker-migrate
# или: python3 /opt/docker-migrate/migrate
# Выбираем: 1 — Подготовка к переносу (Source)

Скрипт:

  1. Запрашивает имя Docker-сервиса/контейнера
  2. Автоматически найдет всё окружение
  3. Покажет манифест (что будет перенесено)
  4. Попросит подтверждения
  5. Соберёт tar.gz архив
  6. Предложит остановить сервис
  7. Предложит передать на новый сервер

На новом сервере (target):

docker-migrate --mode=target --remote-dir=/tmp/docker-migrate-incoming

Или интерактивно:

docker-migrate
# Выбираем: 2 — Восстановление (Target)

Скрипт:

  1. Проверит Ubuntu и права
  2. Установит Docker, Compose, nginx (если нужно)
  3. Сделает backup существующего
  4. Восстановит файлы
  5. Запустит сервис и проверит логи

Resume (если ошибка)

python3 migrate --resume

Или:

python3 migrate
# Выбираем: 3 — Продолжить (Resume)

Статус и логи

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 вместо "начни сначала"