Files
docker-migrate/README.md
T

136 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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** вместо "начни сначала"