9.6 KiB
9.6 KiB
🐳 Docker - Руководство по развертыванию
Содержание
- Быстрый старт
- Подробная настройка
- Управление контейнером
- Мониторинг и отладка
- Производственное развертывание
Быстрый старт
1. Установка Docker
Ubuntu/Debian:
# Установка 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:
# Установка через Homebrew
brew install --cask docker
Windows: Скачайте Docker Desktop for Windows
2. Настройка проекта
# Клонирование репозитория
git clone https://github.com/EDeev/mospoly-helper.git
cd mospoly-helper
# Создание файла .env
cp .env.example .env
# Редактирование .env (добавьте ваш BOT_TOKEN)
nano .env
3. Запуск
# Сборка и запуск в фоновом режиме
docker-compose up -d
# Проверка статуса
docker-compose ps
# Просмотр логов
docker-compose logs -f
Подробная настройка
Структура Docker-файлов
mospoly-helper/
├── Dockerfile # Описание образа контейнера
├── docker-compose.yml # Конфигурация сервисов
├── .dockerignore # Исключения при сборке
├── .env # Переменные окружения (не в Git!)
└── .env.example # Шаблон переменных окружения
Переменные окружения (.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 |
Журналы работы бота |
Управление контейнером
Основные команды
# Запуск
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 # Пересборка и запуск
Работа с контейнером
# Выполнение команд внутри контейнера
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 ./
Мониторинг и отладка
Просмотр логов
# Все логи
docker-compose logs
# Последние 100 строк с обновлением
docker-compose logs --tail=100 -f
# Логи за последний час
docker-compose logs --since 1h
# Логи конкретного сервиса
docker-compose logs mospoly-helper-bot
Проверка состояния
# Статус контейнеров
docker-compose ps
# Использование ресурсов
docker stats mospoly-helper-bot
# Проверка health check
docker inspect --format='{{.State.Health.Status}}' mospoly-helper-bot
Отладка проблем
# Проверка сети
docker network inspect mospoly-helper_default
# Инспектирование контейнера
docker inspect mospoly-helper-bot
# События Docker
docker events --filter container=mospoly-helper-bot
Производственное развертывание
1. Подготовка сервера
# Обновление системы
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.
Проверка:
# Перезагрузка сервера
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 для мониторинга:
# Создайте файл /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
# Активация сервиса
sudo systemctl daemon-reload
sudo systemctl enable mospoly-bot.service
sudo systemctl start mospoly-bot.service
sudo systemctl status mospoly-bot.service
5. Резервное копирование
# Скрипт резервного копирования (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:
# Резервное копирование каждый день в 3:00
0 3 * * * /path/to/backup.sh
Обновление бота
# 1. Получение обновлений
git pull
# 2. Остановка контейнера
docker-compose down
# 3. Пересборка образа
docker-compose build
# 4. Запуск обновленной версии
docker-compose up -d
# 5. Проверка логов
docker-compose logs -f
Очистка ресурсов
# Удаление неиспользуемых образов
docker image prune -a
# Удаление неиспользуемых volumes
docker volume prune
# Полная очистка системы Docker
docker system prune -a --volumes
Решение типичных проблем
Проблема: Контейнер не запускается
# Проверка логов
docker-compose logs
# Проверка переменных окружения
docker-compose config
# Пересборка образа
docker-compose build --no-cache
docker-compose up -d
Проблема: Недостаточно места на диске
# Проверка использования места
docker system df
# Очистка
docker system prune -a
Проблема: Контейнер постоянно перезапускается
# Проверка статуса health check
docker inspect --format='{{.State.Health}}' mospoly-helper-bot
# Запуск без автоперезапуска для отладки
docker-compose run --rm mospoly-helper-bot python bot.py
Полезные ссылки
Создано с ❤️ для удобства развертывания МосПолиХелпер