infra/@yandex-disk.storage/management/SETUP.md

Установка и настройка Яндекс.Диск инфраструктуры

Требования

Шаг 1: Установка rclone

На Ubuntu/Debian

# Установка через официальный скрипт
curl https://rclone.org/install.sh | sudo bash

# Проверка установки
rclone version

На других системах

См. официальную документацию: https://rclone.org/install/

Шаг 2: Настройка Яндекс.Диска

Автоматическая настройка (рекомендуется)

# Запустить интерактивную настройку
rclone config

# Следовать инструкциям:
# 1. Выбрать: n (new remote)
# 2. Name: ydisk
# 3. Storage: yandex
# 4. Client ID: (нажать Enter для использования встроенного)
# 5. Client Secret: (нажать Enter для использования встроенного)
# 6. Advanced config: n
# 7. Auto config: y
# 8. Откроется браузер для авторизации
# 9. После авторизации вернуться в терминал
# 10. Quit: q

Ручная настройка

Если автоматическая настройка не работает (например, на удалённом сервере):

# 1. Запустить на локальной машине с браузером
rclone authorize "yandex"

# 2. Скопировать полученный токен

# 3. На сервере создать конфигурацию
mkdir -p ~/.config/rclone
nano ~/.config/rclone/rclone.conf

# 4. Добавить:
[ydisk]
type = yandex
token = ВСТАВИТЬ_ТОКЕН_СЮДА

# 5. Сохранить (Ctrl+O, Enter, Ctrl+X)

Шаг 3: Проверка подключения

# Список директорий в корне
rclone lsd ydisk:

# Информация о хранилище
rclone about ydisk:

# Создать тестовую директорию
rclone mkdir ydisk:test-connection

# Удалить тестовую директорию
rclone rmdir ydisk:test-connection

Шаг 4: Настройка проекта

# Перейти в директорию проекта
cd $WORKSPACE/projects/infra-yandex-disk

# Проверить что скрипты исполняемые
chmod +x solution/scripts/*.py
chmod +x solution/lib/*.py

# Создать директорию для бэкапов на Яндекс.Диске
rclone mkdir ydisk:backups

Шаг 5: Тестирование

Тест 1: Чтение файла

# Создать тестовый файл
echo "Test content" > /tmp/test.txt

# Загрузить на Яндекс.Диск
python3 solution/scripts/yd_write.py \
  --local /tmp/test.txt \
  --remote "test/test.txt"

# Скачать обратно
python3 solution/scripts/yd_read.py \
  --remote "test/test.txt" \
  --local /tmp/test-downloaded.txt

# Проверить содержимое
cat /tmp/test-downloaded.txt

Тест 2: Синхронизация

# Создать тестовую директорию
mkdir -p /tmp/test-sync
echo "File 1" > /tmp/test-sync/file1.txt
echo "File 2" > /tmp/test-sync/file2.txt

# Синхронизировать на Яндекс.Диск (dry run)
python3 solution/scripts/yd_sync.py \
  --local /tmp/test-sync \
  --remote "test/sync" \
  --dry-run

# Синхронизировать (реально)
python3 solution/scripts/yd_sync.py \
  --local /tmp/test-sync \
  --remote "test/sync"

Тест 3: Бэкап

# Создать бэкап тестовой директории
python3 solution/scripts/yd_backup.py create \
  --source /tmp/test-sync \
  --destination "test/backups" \
  --timestamp

# Список бэкапов
python3 solution/scripts/yd_backup.py list \
  --path "test/backups"

# Восстановить последний бэкап
python3 solution/scripts/yd_backup.py restore \
  --source "test/backups" \
  --destination /tmp/test-restored

Тест 4: Python библиотека

# Запустить интерактивный Python
python3

# В Python консоли:
import sys
sys.path.insert(0, '$WORKSPACE/projects/infra-yandex-disk/solution/lib')
from ydisk_client import YDiskClient

client = YDiskClient()
info = client.get_info()
print(info)

files = client.list_files("")
print(f"Files in root: {len(files)}")

Шаг 6: Очистка тестовых данных

# Удалить тестовые файлы
rclone purge ydisk:test
rm -rf /tmp/test.txt /tmp/test-downloaded.txt
rm -rf /tmp/test-sync /tmp/test-restored

Автоматизация бэкапов (опционально)

Настройка cron для ежедневных бэкапов

# Открыть crontab
crontab -e

# Добавить задачу (ежедневно в 2:00)
0 2 * * * /usr/bin/python3 $WORKSPACE/projects/infra-yandex-disk/solution/scripts/yd_backup.py create --source /opt/myproject --destination backups/myproject --timestamp

# Добавить ротацию (еженедельно, оставить 7 бэкапов)
0 3 * * 0 /usr/bin/python3 $WORKSPACE/projects/infra-yandex-disk/solution/scripts/yd_backup.py rotate --path backups/myproject --keep 7 --force

Безопасность

Защита конфигурации

# Установить правильные права доступа
chmod 600 ~/.config/rclone/rclone.conf

# Убедиться что конфиг не в git
echo ".config/rclone/rclone.conf" >> ~/.gitignore

Шифрование (опционально)

Для дополнительной безопасности можно настроить crypt remote:

rclone config

# Создать crypt remote поверх ydisk:
# 1. Name: ydisk-crypt
# 2. Storage: crypt
# 3. Remote: ydisk:encrypted
# 4. Password: ВАШЕ_ШИФРОВАНИЕ_ПАРОЛЬ
# 5. Salt: (автогенерация)

Теперь использовать ydisk-crypt: вместо ydisk: для зашифрованного хранения.

Устранение проблем

Ошибка: "rclone not found"

# Проверить установку
which rclone

# Переустановить
curl https://rclone.org/install.sh | sudo bash

Ошибка: "Failed to create file system"

# Проверить конфигурацию
rclone config show

# Пересоздать remote
rclone config delete ydisk
rclone config  # создать заново

Ошибка: "Token expired"

# Обновить токен
rclone config reconnect ydisk:

Готово!

Инфраструктура Яндекс.Диска готова к использованию.

Следующие шаги:
- Операционные процедуры
- Примеры использования
- Детали реализации