mirror of
https://github.com/EDeev/mospoly-helper.git
synced 2026-06-15 11:01:14 +03:00
359 lines
9.6 KiB
Markdown
359 lines
9.6 KiB
Markdown
# 🐳 Docker - Руководство по развертыванию
|
||
|
||
## Содержание
|
||
- [Быстрый старт](#быстрый-старт)
|
||
- [Подробная настройка](#подробная-настройка)
|
||
- [Управление контейнером](#управление-контейнером)
|
||
- [Мониторинг и отладка](#мониторинг-и-отладка)
|
||
- [Производственное развертывание](#производственное-развертывание)
|
||
|
||
## Быстрый старт
|
||
|
||
### 1. Установка Docker
|
||
|
||
**Ubuntu/Debian:**
|
||
```bash
|
||
# Установка Docker
|
||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||
sudo sh get-docker.sh
|
||
|
||
# Установка Docker Compose
|
||
sudo apt install docker-compose-plugin
|
||
|
||
# Добавление пользователя в группу docker
|
||
sudo usermod -aG docker $USER
|
||
newgrp docker
|
||
```
|
||
|
||
**macOS:**
|
||
```bash
|
||
# Установка через Homebrew
|
||
brew install --cask docker
|
||
```
|
||
|
||
**Windows:**
|
||
Скачайте [Docker Desktop for Windows](https://www.docker.com/products/docker-desktop/)
|
||
|
||
### 2. Настройка проекта
|
||
|
||
```bash
|
||
# Клонирование репозитория
|
||
git clone https://github.com/EDeev/mospoly-helper.git
|
||
cd mospoly-helper
|
||
|
||
# Создание файла .env
|
||
cp .env.example .env
|
||
|
||
# Редактирование .env (добавьте ваш BOT_TOKEN)
|
||
nano .env
|
||
```
|
||
|
||
### 3. Запуск
|
||
|
||
```bash
|
||
# Сборка и запуск в фоновом режиме
|
||
docker-compose up -d
|
||
|
||
# Проверка статуса
|
||
docker-compose ps
|
||
|
||
# Просмотр логов
|
||
docker-compose logs -f
|
||
```
|
||
|
||
## Подробная настройка
|
||
|
||
### Структура Docker-файлов
|
||
|
||
```
|
||
mospoly-helper/
|
||
├── Dockerfile # Описание образа контейнера
|
||
├── docker-compose.yml # Конфигурация сервисов
|
||
├── .dockerignore # Исключения при сборке
|
||
├── .env # Переменные окружения (не в Git!)
|
||
└── .env.example # Шаблон переменных окружения
|
||
```
|
||
|
||
### Переменные окружения (.env)
|
||
|
||
```env
|
||
# Основная конфигурация
|
||
BOT_TOKEN=your_bot_token_here
|
||
```
|
||
|
||
### Volumes (монтируемые директории)
|
||
|
||
Данные сохраняются между перезапусками контейнера благодаря volumes:
|
||
|
||
| Локальная директория | Директория в контейнере | Назначение |
|
||
|----------------------|-------------------------|------------|
|
||
| `./src/videos` | `/app/src/videos` | Исходные видеофрагменты (read-only) |
|
||
| `./src/data/cache` | `/app/src/data/cache` | Кеш сгенерированных маршрутов |
|
||
| `./src/data/users` | `/app/src/data/users` | Данные пользователей |
|
||
| `./logs` | `/app/logs` | Журналы работы бота |
|
||
|
||
## Управление контейнером
|
||
|
||
### Основные команды
|
||
|
||
```bash
|
||
# Запуск
|
||
docker-compose up -d # В фоновом режиме
|
||
docker-compose up # С выводом логов в терминал
|
||
|
||
# Остановка
|
||
docker-compose stop # Остановка без удаления
|
||
docker-compose down # Остановка и удаление контейнера
|
||
|
||
# Перезапуск
|
||
docker-compose restart # Быстрый перезапуск
|
||
docker-compose down && docker-compose up -d # Полный перезапуск
|
||
|
||
# Пересборка
|
||
docker-compose build # Пересборка образа
|
||
docker-compose up -d --build # Пересборка и запуск
|
||
```
|
||
|
||
### Работа с контейнером
|
||
|
||
```bash
|
||
# Выполнение команд внутри контейнера
|
||
docker-compose exec mospoly-helper-bot python combine.py
|
||
|
||
# Интерактивная оболочка
|
||
docker-compose exec mospoly-helper-bot /bin/bash
|
||
|
||
# Копирование файлов
|
||
docker cp local_file.txt mospoly-helper-bot:/app/
|
||
docker cp mospoly-helper-bot:/app/file.txt ./
|
||
```
|
||
|
||
## Мониторинг и отладка
|
||
|
||
### Просмотр логов
|
||
|
||
```bash
|
||
# Все логи
|
||
docker-compose logs
|
||
|
||
# Последние 100 строк с обновлением
|
||
docker-compose logs --tail=100 -f
|
||
|
||
# Логи за последний час
|
||
docker-compose logs --since 1h
|
||
|
||
# Логи конкретного сервиса
|
||
docker-compose logs mospoly-helper-bot
|
||
```
|
||
|
||
### Проверка состояния
|
||
|
||
```bash
|
||
# Статус контейнеров
|
||
docker-compose ps
|
||
|
||
# Использование ресурсов
|
||
docker stats mospoly-helper-bot
|
||
|
||
# Проверка health check
|
||
docker inspect --format='{{.State.Health.Status}}' mospoly-helper-bot
|
||
```
|
||
|
||
### Отладка проблем
|
||
|
||
```bash
|
||
# Проверка сети
|
||
docker network inspect mospoly-helper_default
|
||
|
||
# Инспектирование контейнера
|
||
docker inspect mospoly-helper-bot
|
||
|
||
# События Docker
|
||
docker events --filter container=mospoly-helper-bot
|
||
```
|
||
|
||
## Производственное развертывание
|
||
|
||
### 1. Подготовка сервера
|
||
|
||
```bash
|
||
# Обновление системы
|
||
sudo apt update && sudo apt upgrade -y
|
||
|
||
# Установка Docker и Docker Compose
|
||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||
sudo sh get-docker.sh
|
||
sudo apt install docker-compose-plugin
|
||
|
||
# Создание пользователя для бота
|
||
sudo useradd -m -s /bin/bash botuser
|
||
sudo usermod -aG docker botuser
|
||
```
|
||
|
||
### 2. Настройка автозапуска
|
||
|
||
Docker Compose автоматически настроит перезапуск контейнера благодаря `restart: unless-stopped` в docker-compose.yml.
|
||
|
||
Проверка:
|
||
```bash
|
||
# Перезагрузка сервера
|
||
sudo reboot
|
||
|
||
# После перезагрузки проверка
|
||
docker-compose ps
|
||
```
|
||
|
||
### 3. Настройка logrotate
|
||
|
||
Создайте файл `/etc/logrotate.d/docker-containers`:
|
||
|
||
```
|
||
/var/lib/docker/containers/*/*.log {
|
||
rotate 7
|
||
daily
|
||
compress
|
||
missingok
|
||
delaycompress
|
||
copytruncate
|
||
}
|
||
```
|
||
|
||
### 4. Мониторинг
|
||
|
||
Используйте systemd для мониторинга:
|
||
|
||
```bash
|
||
# Создайте файл /etc/systemd/system/mospoly-bot.service
|
||
[Unit]
|
||
Description=MosPoly Helper Bot
|
||
Requires=docker.service
|
||
After=docker.service
|
||
|
||
[Service]
|
||
Type=oneshot
|
||
RemainAfterExit=yes
|
||
WorkingDirectory=/path/to/mospoly-helper
|
||
ExecStart=/usr/bin/docker-compose up -d
|
||
ExecStop=/usr/bin/docker-compose down
|
||
User=botuser
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
```bash
|
||
# Активация сервиса
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable mospoly-bot.service
|
||
sudo systemctl start mospoly-bot.service
|
||
sudo systemctl status mospoly-bot.service
|
||
```
|
||
|
||
### 5. Резервное копирование
|
||
|
||
```bash
|
||
# Скрипт резервного копирования (backup.sh)
|
||
#!/bin/bash
|
||
DATE=$(date +%Y%m%d_%H%M%S)
|
||
BACKUP_DIR="/backup/mospoly-bot"
|
||
|
||
mkdir -p $BACKUP_DIR
|
||
|
||
# Остановка контейнера
|
||
docker-compose stop
|
||
|
||
# Резервное копирование данных
|
||
tar -czf $BACKUP_DIR/data_$DATE.tar.gz ./src/data
|
||
|
||
# Запуск контейнера
|
||
docker-compose start
|
||
|
||
# Удаление старых резервных копий (старше 30 дней)
|
||
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
|
||
```
|
||
|
||
Добавьте в crontab:
|
||
```bash
|
||
# Резервное копирование каждый день в 3:00
|
||
0 3 * * * /path/to/backup.sh
|
||
```
|
||
|
||
## Обновление бота
|
||
|
||
```bash
|
||
# 1. Получение обновлений
|
||
git pull
|
||
|
||
# 2. Остановка контейнера
|
||
docker-compose down
|
||
|
||
# 3. Пересборка образа
|
||
docker-compose build
|
||
|
||
# 4. Запуск обновленной версии
|
||
docker-compose up -d
|
||
|
||
# 5. Проверка логов
|
||
docker-compose logs -f
|
||
```
|
||
|
||
## Очистка ресурсов
|
||
|
||
```bash
|
||
# Удаление неиспользуемых образов
|
||
docker image prune -a
|
||
|
||
# Удаление неиспользуемых volumes
|
||
docker volume prune
|
||
|
||
# Полная очистка системы Docker
|
||
docker system prune -a --volumes
|
||
```
|
||
|
||
## Решение типичных проблем
|
||
|
||
### Проблема: Контейнер не запускается
|
||
|
||
```bash
|
||
# Проверка логов
|
||
docker-compose logs
|
||
|
||
# Проверка переменных окружения
|
||
docker-compose config
|
||
|
||
# Пересборка образа
|
||
docker-compose build --no-cache
|
||
docker-compose up -d
|
||
```
|
||
|
||
### Проблема: Недостаточно места на диске
|
||
|
||
```bash
|
||
# Проверка использования места
|
||
docker system df
|
||
|
||
# Очистка
|
||
docker system prune -a
|
||
```
|
||
|
||
### Проблема: Контейнер постоянно перезапускается
|
||
|
||
```bash
|
||
# Проверка статуса health check
|
||
docker inspect --format='{{.State.Health}}' mospoly-helper-bot
|
||
|
||
# Запуск без автоперезапуска для отладки
|
||
docker-compose run --rm mospoly-helper-bot python bot.py
|
||
```
|
||
|
||
## Полезные ссылки
|
||
|
||
- [Официальная документация Docker](https://docs.docker.com/)
|
||
- [Docker Compose documentation](https://docs.docker.com/compose/)
|
||
- [Best practices for writing Dockerfiles](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
|
||
|
||
---
|
||
|
||
<div align="center">
|
||
<sub>Создано с ❤️ для удобства развертывания МосПолиХелпер</sub>
|
||
</div>
|