diff --git a/README.md b/README.md index 17b1536..d06e0d6 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,197 @@ -# dsync +# dsync - Утилита для синхронизации директорий -Утилита для синхронизации директорий \ No newline at end of file +**dsync** - это инструмент командной строки для синхронизации локальных проектов с удаленными серверами через SSH и rsync. Позволяет легко управлять синхронизацией нескольких проектов с различными наборами серверов. + +## Структура проекта + +``` +/usr/local/bin/dsync ← глобальный скрипт + +/workspace/project1/ +├── train.py +├── .dsyncconfig +└── .dsyncignore + +/workspace/project2/ +├── train2.py +├── .dsyncconfig +└── .dsyncignore +``` + +## Основные возможности + +- 🚀 **Быстрая синхронизация** - использует rsync для эффективной передачи файлов +- 📊 **Проверка статуса** - показывает изменения перед синхронизацией +- 🔧 **Гибкая настройка** - каждый проект имеет свою конфигурацию +- 🚫 **Игнорирование файлов** - поддержка .dsyncignore для исключения файлов +- 🌐 **Множественные узлы** - синхронизация с несколькими серверами одновременно +- 🎨 **Цветной вывод** - понятная визуализация результатов +- ⚡ **Параллельная обработка** - проверка статуса всех узлов одновременно + +## Установка + +1. Скопируйте скрипт в глобальную директорию: +```bash +sudo cp dsync.py /usr/local/bin/dsync +sudo chmod +x /usr/local/bin/dsync +``` + +2. Убедитесь, что у вас настроены SSH-ключи для доступа к удаленным серверам без пароля ([Инструкция по настройке](../ssh_setup.md)). + +## Использование + +### Инициализация проекта + +```bash +cd /workspace/project1 +dsync init +``` + +Создает файлы: +- `.dsyncconfig` - конфигурация проекта +- `.dsyncignore` - паттерны для игнорирования файлов + +### Управление узлами + +```bash +# Добавить узлы для синхронизации +dsync add-node user@server1.com user@server2.com + +# Удалить узел +dsync del-node user@server1.com + +# Показать все узлы +dsync list-nodes +``` + +### Синхронизация + +```bash +# Проверить статус (что изменится) +dsync status + +# Выполнить синхронизацию +dsync sync +``` + +## Конфигурационные файлы + +### `.dsyncconfig` +```json +{ + "master_dir": "/workspace/project1", + "nodes": [ + "user@server1.com", + "user@server2.com" + ], + "ignore_file": ".dsyncignore" +} +``` + +### `.dsyncignore` +``` +# Системные файлы +.git/ +.gitignore +.dsyncconfig +.dsyncignore + +# Python +__pycache__/ +*.pyc +*.pyo +.venv/ +venv/ + +# IDE +.vscode/ +.idea/ + +# Логи +*.log + +# Node.js +node_modules/ +.npm +``` + +## Примеры использования + +### Базовый workflow + +```bash +# 1. Инициализация нового проекта +cd /workspace/ml-project +dsync init + +# 2. Добавление серверов для обучения +dsync add-node gpu-server1.com gpu-server2.com + +# 3. Проверка что будет синхронизировано +dsync status + +# 4. Синхронизация +dsync sync +``` + +### Вывод команды status + +``` +Checking status for 2 node(s)... +-------------------------------------------------- +[OK] gpu-server1.com: Up to date + +[!] gpu-server2.com: 3 change(s) pending + NEW FILE: train.py + UPDATE FILE: config.json (content, timestamp) + DELETE: old_model.pkl + +-------------------------------------------------- +Summary: 2 active, 0 error(s), 3 total changes +Run 'dsync sync' to apply changes +``` + +### Вывод команды sync + +``` +Syncing to gpu-server1.com:/workspace/ml-project... +[OK] Successfully synced to gpu-server1.com + +Syncing to gpu-server2.com:/workspace/ml-project... +[OK] Successfully synced to gpu-server2.com + +Sync completed: 2/2 nodes successful +``` + +## Команды + +| Команда | Описание | +|---------|----------| +| `dsync init` | Инициализировать dsync в текущей директории | +| `dsync add-node [node2...]` | Добавить один или несколько узлов | +| `dsync del-node [node2...]` | Удалить один или несколько узлов | +| `dsync list-nodes` | Показать все настроенные узлы | +| `dsync status` | Показать статус синхронизации для всех узлов | +| `dsync sync` | Синхронизировать со всеми настроенными узлами | +| `dsync help` | Показать справку | + +## Особенности + +- **Удаление файлов**: Использует `rsync --delete` для удаления файлов на удаленных серверах +- **Тайм-ауты**: Автоматические тайм-ауты для избежания зависания +- **Параллельность**: Проверка статуса всех узлов происходит параллельно +- **Безопасность**: SSH-соединения с отключенной проверкой host key +- **Цветной вывод**: Зеленый для успеха, желтый для предупреждений, красный для ошибок + +## Требования + +- Python 3.6+ +- rsync +- SSH-доступ к удаленным серверам +- Настроенные SSH-ключи для автоматической авторизации + +## Примечания + +- Каждый проект должен иметь свою конфигурацию +- SSH-ключи должны быть настроены для работы без пароля ([Настройка](../ssh_setup.md)) +- Изменения в `.dsyncignore` влияют на последующие синхронизации \ No newline at end of file