Stitch505 97b3623915 bugfix: comprehensive stability audit and fixes
- discover/docker.py: handle comma-separated compose_file in labels
- discover/network.py: replace os.getlogin() with robust user detection
- target.py: add lsb_release fallback via hostnamectl, guard None compose_file,
  use container name (not cached CID) for docker logs
- main.py: call reset_state(mode='target') before target mode,
  improve EOF handling info message
- source.py: remove redundant set_stage('DONE') inside transfer_offer
- transfer.py: fix stage naming for resume after transfer
- add dry_run.py for local logic validation
2026-05-22 20:58:37 +04:00

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 вместо "начни сначала"
S
Description
Универсальный интерактивный инструмент миграции Docker-сервисов между Ubuntu-серверами. Включает авто-поиск зависимостей (Docker, nginx, sidecar, systemd, cron), manifest, adaptive transfer и resume.
Readme
371 KiB
Languages
Python 96.5%
Shell 3.5%