# Synology Power Control Bot - Руководство по развертыванию в Docker

## Подготовка к развертыванию

Это руководство поможет вам развернуть бота для управления питанием Synology NAS в Docker-контейнере. Развертывание в Docker имеет следующие преимущества:
- Изоляция приложения и его зависимостей
- Простота управления и обновления
- Автоматический перезапуск при сбоях
- Возможность легкого переноса между системами

## Предварительные требования

1. **Установка Docker и Docker Compose**:

   **Для Ubuntu/Debian**:
   ```bash
   # Установка Docker
   sudo apt update
   sudo apt install apt-transport-https ca-certificates curl software-properties-common
   curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
   echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
   sudo apt update
   sudo apt install docker-ce docker-ce-cli containerd.io

   # Установка Docker Compose
   sudo curl -L "https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
   sudo chmod +x /usr/local/bin/docker-compose
   ```

   **Для CentOS/RHEL**:
   ```bash
   # Установка Docker
   sudo yum install -y yum-utils
   sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
   sudo yum install docker-ce docker-ce-cli containerd.io
   sudo systemctl start docker
   sudo systemctl enable docker

   # Установка Docker Compose
   sudo curl -L "https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
   sudo chmod +x /usr/local/bin/docker-compose
   ```

   **Для Windows**:
   - Скачайте и установите Docker Desktop с [официального сайта Docker](https://www.docker.com/products/docker-desktop/)

2. **Настройка проекта**:
   ```bash
   # Клонирование репозитория (если используете Git)
   git clone https://github.com/yourusername/synology_power_control_bot.git
   cd synology_power_control_bot
   
   # Или распакуйте архив с исходным кодом
   ```

## Конфигурация

1. **Создайте файл .env**:
   Создайте файл `.env` на основе `.env-example` и настройте его с вашими параметрами:

   ```bash
   cp .env-example .env
   nano .env  # или любой другой текстовый редактор
   ```

   Заполните следующие параметры:
   - `TELEGRAM_TOKEN`: Токен вашего Telegram-бота от @BotFather
   - `ADMIN_USER_IDS`: ID пользователей Telegram с доступом к боту
   - `SYNOLOGY_HOST`: IP-адрес вашего Synology NAS
   - `SYNOLOGY_USERNAME` и `SYNOLOGY_PASSWORD`: Учетные данные для DSM
   - `MAC_ADDRESS`: MAC-адрес Synology NAS для Wake-on-LAN

## Развертывание

### С использованием скриптов:

**Linux**:
```bash
chmod +x deploy.sh
./deploy.sh
```

**Windows**:
```
deploy.cmd
```

### Вручную с Docker Compose:

1. **Сборка и запуск**:
   ```bash
   docker-compose up -d --build
   ```

2. **Проверка статуса**:
   ```bash
   docker-compose ps
   ```

3. **Просмотр логов**:
   ```bash
   docker-compose logs -f
   ```

4. **Остановка**:
   ```bash
   docker-compose down
   ```

## Управление контейнером

### Перезапуск бота:
```bash
docker-compose restart
```

### Обновление:
```bash
# Остановка
docker-compose down

# Обновление (если используете Git)
git pull

# Пересборка и запуск
docker-compose up -d --build
```

### Резервное копирование данных:
Важные данные хранятся в томе `logs`, который можно скопировать:
```bash
# Создание бэкапа логов
tar -czvf synology_bot_logs_backup.tar.gz ./logs
```

## Проверка работоспособности

После развертывания можно проверить состояние бота с помощью следующих команд:

1. **Проверка статуса контейнера**:
   ```bash
   docker-compose ps
   ```

2. **Проверка health-check**:
   ```bash
   curl http://localhost:8080/health
   ```
   Должен вернуть `OK`.

3. **Проверка логов**:
   ```bash
   docker-compose logs -f
   ```
   Ищите строки с успешной инициализацией бота.

## Решение проблем

### Контейнер не запускается или сразу завершает работу
- Проверьте логи: `docker-compose logs -f`
- Проверьте файл `.env` на наличие всех необходимых параметров
- Убедитесь, что порт 8080 не занят другим приложением

### Проблемы с подключением к Synology NAS
- Проверьте доступность NAS из контейнера: 
  ```bash
  docker-compose exec synology-bot ping $SYNOLOGY_HOST
  ```
- Проверьте правильность учетных данных
- Убедитесь, что API DSM включено в настройках NAS

### Telegram-бот не отвечает
- Проверьте корректность TELEGRAM_TOKEN
- Убедитесь, что бот запущен: `/start` в чате с ботом
- Проверьте, что ваш Telegram ID указан в ADMIN_USER_IDS

## Автоматический запуск при перезагрузке сервера

Docker и Docker Compose по умолчанию настроены на автоматический запуск контейнеров при перезагрузке системы благодаря параметру `restart: unless-stopped` в docker-compose.yml.

Если эта опция не работает, вы можете настроить systemd:

1. **Создайте файл сервиса**:
   ```bash
   sudo nano /etc/systemd/system/synology-bot.service
   ```

2. **Добавьте следующее содержимое**:
   ```
   [Unit]
   Description=Synology Power Control Bot
   Requires=docker.service
   After=docker.service

   [Service]
   Type=oneshot
   RemainAfterExit=yes
   WorkingDirectory=/path/to/synology_power_control_bot
   ExecStart=/usr/local/bin/docker-compose up -d
   ExecStop=/usr/local/bin/docker-compose down
   TimeoutStartSec=0

   [Install]
   WantedBy=multi-user.target
   ```

3. **Активируйте и запустите сервис**:
   ```bash
   sudo systemctl enable synology-bot.service
   sudo systemctl start synology-bot.service
   ```

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

- Не передавайте файл `.env` с учетными данными третьим лицам
- Регулярно меняйте пароль от DSM
- Ограничьте доступ к боту только доверенным пользователям
- Рассмотрите возможность запуска на выделенной сети или с дополнительными ограничениями доступа
