Изменил(а) на 'README.md'

main
ilyukhin 2 months ago
parent 88d30f408d
commit 2c9dab2031

@ -1,3 +1,197 @@
# dsync # dsync - Утилита для синхронизации директорий
Утилита для синхронизации директорий **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 <node1> [node2...]` | Добавить один или несколько узлов |
| `dsync del-node <node1> [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` влияют на последующие синхронизации
Loading…
Cancel
Save