From 71b91bf9bb39acc93341f5ddcd6db413e88ed613 Mon Sep 17 00:00:00 2001 From: "Andrew K. Choi" Date: Mon, 17 Nov 2025 09:42:23 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20Docker=20=D0=B8=D0=BD=D1=84=D1=80=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B0=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D0=BA=D1=88=D0=BD?= =?UTF-8?q?-=D1=80=D0=B0=D0=B7=D0=B2=D0=B5=D1=80=D1=82=D1=8B=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлено: - Обновлен docker-compose.yml для production (упрощен, удален Redis/pgAdmin) - .env.prod.example - шаблон конфигурации для продакшн - deploy.sh - скрипт автоматического развертывания - DOCKER_DEPLOY.md - полная документация по развертыванию Makefile команды: - docker-setup - первоначальная настройка - docker-build/up/down - управление контейнерами - docker-logs/logs-db - просмотр логов - docker-db-migrate/backup/restore - работа с БД - docker-deploy - полное автоматическое развертывание Использование: 1. make docker-setup (создаст .env.prod) 2. Отредактировать .env.prod 3. make docker-deploy (автоматическое развертывание) Или: ./deploy.sh --- .bot.pid | 2 +- .env.prod.example | 19 +++ DOCKER_DEPLOY.md | 281 +++++++++++++++++++++++++++++++++++++++++++++ Makefile | 217 +++++++++++++++++++++++++++++++++- deploy.sh | 101 ++++++++++++++++ docker-compose.yml | 138 ++++++---------------- test_accounts.txt | 21 ++++ 7 files changed, 672 insertions(+), 107 deletions(-) create mode 100644 .env.prod.example create mode 100644 DOCKER_DEPLOY.md create mode 100755 deploy.sh create mode 100644 test_accounts.txt diff --git a/.bot.pid b/.bot.pid index 9e425f3..dccb56f 100644 --- a/.bot.pid +++ b/.bot.pid @@ -1 +1 @@ -866736 +897827 diff --git a/.env.prod.example b/.env.prod.example new file mode 100644 index 0000000..2b06b3f --- /dev/null +++ b/.env.prod.example @@ -0,0 +1,19 @@ +# Пример конфигурации для продакшн-окружения +# Скопируйте этот файл в .env.prod и заполните реальными значениями + +# Telegram Bot Token +BOT_TOKEN=your_bot_token_here + +# PostgreSQL настройки +POSTGRES_DB=lottery_bot_db +POSTGRES_USER=lottery_user +POSTGRES_PASSWORD=your_strong_password_here + +# Database URL для бота (используется внутри контейнера) +DATABASE_URL=postgresql+asyncpg://lottery_user:your_strong_password_here@db:5432/lottery_bot_db + +# ID администраторов (через запятую) +ADMIN_IDS=123456789,987654321 + +# Настройки логирования +LOG_LEVEL=INFO diff --git a/DOCKER_DEPLOY.md b/DOCKER_DEPLOY.md new file mode 100644 index 0000000..5480593 --- /dev/null +++ b/DOCKER_DEPLOY.md @@ -0,0 +1,281 @@ +# 🐳 Docker Deployment Guide + +## Быстрый старт + +### 1. Настройка окружения +```bash +make docker-setup +``` + +Отредактируйте `.env.prod` и укажите: +- `BOT_TOKEN` - токен от @BotFather +- `POSTGRES_PASSWORD` - надежный пароль для БД +- `DATABASE_URL` - обновите пароль в строке подключения +- `ADMIN_IDS` - ваш Telegram ID + +### 2. Развертывание +```bash +# Автоматическое развертывание +make docker-deploy + +# Или вручную: +make docker-build +make docker-up +make docker-db-migrate +``` + +### 3. Проверка +```bash +make docker-status +make docker-logs +``` + +--- + +## Основные команды + +### Управление контейнерами +```bash +make docker-up # Запустить контейнеры +make docker-down # Остановить контейнеры +make docker-restart # Перезапустить контейнеры +make docker-status # Статус контейнеров +``` + +### Просмотр логов +```bash +make docker-logs # Логи бота (с отслеживанием) +make docker-logs-db # Логи базы данных +make docker-logs-all # Все логи +``` + +### База данных +```bash +make docker-db-migrate # Применить миграции +make docker-db-shell # Подключиться к PostgreSQL +make docker-db-backup # Создать бэкап +make docker-db-restore BACKUP=backups/backup_20231115.sql +``` + +### Разработка +```bash +make docker-shell # Открыть shell в контейнере бота +make docker-rebuild # Пересобрать и перезапустить +``` + +### Очистка +```bash +make docker-clean # Удалить контейнеры +make docker-prune # Полная очистка (включая volumes) +``` + +--- + +## Структура проекта + +``` +lottery_bot/ +├── Dockerfile # Образ бота +├── docker-compose.yml # Оркестрация контейнеров +├── .env.prod # Продакшн-конфигурация (НЕ коммитить!) +├── .env.prod.example # Пример конфигурации +├── .dockerignore # Исключения для Docker +├── deploy.sh # Скрипт автоматического развертывания +├── logs/ # Логи (монтируется из контейнера) +├── backups/ # Бэкапы БД +└── data/ # Данные приложения +``` + +--- + +## Архитектура + +### Контейнеры + +**bot** - Telegram бот +- Образ: Собирается из `Dockerfile` +- Restart: unless-stopped +- Зависимости: db +- Health check: Python проверка + +**db** - PostgreSQL база данных +- Образ: postgres:15-alpine +- Restart: unless-stopped +- Порты: 5432:5432 +- Volume: postgres_data +- Health check: pg_isready + +### Volumes +- `postgres_data` - Данные PostgreSQL (персистентные) +- `bot_data` - Данные приложения + +### Networks +- `lottery_network` - Внутренняя сеть для связи контейнеров + +--- + +## Мониторинг + +### Статус контейнеров +```bash +docker-compose ps + +# Ожидаемый вывод: +# lottery_bot running 0.0.0.0:-> +# lottery_db running 0.0.0.0:5432->5432/tcp +``` + +### Логи в реальном времени +```bash +docker-compose logs -f bot +``` + +### Использование ресурсов +```bash +docker stats lottery_bot lottery_db +``` + +--- + +## Бэкапы + +### Автоматический бэкап +```bash +# Создать бэкап с временной меткой +make docker-db-backup + +# Файл будет сохранен в: +# backups/backup_YYYYMMDD_HHMMSS.sql +``` + +### Восстановление +```bash +make docker-db-restore BACKUP=backups/backup_20231115_120000.sql +``` + +### Настройка автоматических бэкапов (cron) +```bash +# Добавьте в crontab: +0 2 * * * cd /path/to/lottery_bot && make docker-db-backup +``` + +--- + +## Обновление + +### Обновление кода +```bash +git pull +make docker-rebuild +``` + +### Применение миграций +```bash +make docker-db-migrate +``` + +--- + +## Troubleshooting + +### Контейнер не запускается +```bash +# Проверьте логи +make docker-logs + +# Проверьте конфигурацию +cat .env.prod + +# Пересоберите образ +make docker-rebuild +``` + +### База данных недоступна +```bash +# Проверьте статус БД +docker-compose ps db + +# Проверьте логи БД +make docker-logs-db + +# Подключитесь к БД напрямую +make docker-db-shell +``` + +### Проблемы с миграциями +```bash +# Проверьте текущую версию +docker-compose exec bot alembic current + +# Откатите миграцию +docker-compose exec bot alembic downgrade -1 + +# Примените снова +make docker-db-migrate +``` + +### Высокое потребление ресурсов +```bash +# Проверьте использование +docker stats + +# Ограничьте ресурсы в docker-compose.yml: +services: + bot: + deploy: + resources: + limits: + cpus: '0.5' + memory: 512M +``` + +--- + +## Безопасность + +### Рекомендации + +1. **Пароли** + - Используйте надежные пароли в `.env.prod` + - Не коммитьте `.env.prod` в Git + +2. **Порты** + - Закройте порт 5432 если БД не нужна извне + - Используйте firewall для ограничения доступа + +3. **Обновления** + - Регулярно обновляйте образы: + ```bash + docker-compose pull + make docker-rebuild + ``` + +4. **Логи** + - Ротация логов в production + - Настройте logrotate для `/home/trevor/new_lottery_bot/logs/` + +5. **Бэкапы** + - Автоматические ежедневные бэкапы + - Храните бэкапы в безопасном месте + +--- + +## Production Checklist + +- [ ] Отредактирован `.env.prod` с реальными значениями +- [ ] Установлены надежные пароли +- [ ] Настроены автоматические бэкапы +- [ ] Настроен мониторинг и алерты +- [ ] Настроена ротация логов +- [ ] Закрыты неиспользуемые порты +- [ ] Протестирован процесс восстановления из бэкапа +- [ ] Документированы учетные данные администраторов + +--- + +## Полезные ссылки + +- [Docker Documentation](https://docs.docker.com/) +- [Docker Compose Documentation](https://docs.docker.com/compose/) +- [PostgreSQL Docker Hub](https://hub.docker.com/_/postgres) +- [Alembic Documentation](https://alembic.sqlalchemy.org/) diff --git a/Makefile b/Makefile index 3167fd9..94469f3 100644 --- a/Makefile +++ b/Makefile @@ -149,4 +149,219 @@ reset: clean @echo "🔄 Полная переустановка..." rm -f *.db *.sqlite *.sqlite3 rm -rf migrations/versions/*.py - make setup \ No newline at end of file + make setup + +# ============================================ +# 🐳 Docker команды для продакшн +# ============================================ + +# Показать справку по Docker командам +docker-help: + @echo "🐳 Docker команды для продакшн-развертывания" + @echo "==============================================" + @echo "" + @echo "Настройка:" + @echo " make docker-setup - Первоначальная настройка (создать .env.prod)" + @echo "" + @echo "Сборка и запуск:" + @echo " make docker-build - Собрать Docker образ" + @echo " make docker-up - Запустить контейнеры (фоновый режим)" + @echo " make docker-up-fg - Запустить контейнеры (с логами)" + @echo " make docker-down - Остановить контейнеры" + @echo " make docker-restart - Перезапустить контейнеры" + @echo "" + @echo "Управление:" + @echo " make docker-logs - Показать логи бота" + @echo " make docker-logs-db - Показать логи БД" + @echo " make docker-logs-all - Показать все логи" + @echo " make docker-status - Статус контейнеров" + @echo " make docker-ps - Список запущенных контейнеров" + @echo "" + @echo "База данных:" + @echo " make docker-db-migrate - Применить миграции в контейнере" + @echo " make docker-db-shell - Подключиться к PostgreSQL" + @echo " make docker-db-backup - Создать бэкап базы данных" + @echo " make docker-db-restore - Восстановить из бэкапа" + @echo "" + @echo "Очистка:" + @echo " make docker-clean - Остановить и удалить контейнеры" + @echo " make docker-prune - Полная очистка (включая volumes)" + @echo "" + @echo "Разработка:" + @echo " make docker-shell - Открыть shell в контейнере бота" + @echo " make docker-rebuild - Пересобрать и перезапустить" + +# Первоначальная настройка Docker окружения +docker-setup: + @echo "🔧 Настройка Docker окружения..." + @if [ ! -f .env.prod ]; then \ + if [ -f .env.prod.example ]; then \ + echo "📄 Создание .env.prod из примера..."; \ + cp .env.prod.example .env.prod; \ + echo "⚠️ ВНИМАНИЕ: Отредактируйте .env.prod и укажите реальные значения!"; \ + echo " - BOT_TOKEN"; \ + echo " - POSTGRES_PASSWORD"; \ + echo " - DATABASE_URL"; \ + echo " - ADMIN_IDS"; \ + else \ + echo "❌ Файл .env.prod.example не найден!"; \ + exit 1; \ + fi \ + else \ + echo "✅ Файл .env.prod уже существует"; \ + fi + @mkdir -p logs backups + @echo "✅ Настройка завершена!" + +# Сборка Docker образа +docker-build: + @echo "🔨 Сборка Docker образа..." + docker-compose build --no-cache + +# Запуск контейнеров в фоновом режиме +docker-up: + @echo "🚀 Запуск контейнеров..." + @if [ ! -f .env.prod ]; then \ + echo "❌ Файл .env.prod не найден! Запустите 'make docker-setup'"; \ + exit 1; \ + fi + docker-compose --env-file .env.prod up -d + @echo "✅ Контейнеры запущены!" + @echo "📊 Проверьте статус: make docker-status" + @echo "📋 Просмотр логов: make docker-logs" + +# Запуск контейнеров с выводом логов +docker-up-fg: + @echo "🚀 Запуск контейнеров с логами..." + @if [ ! -f .env.prod ]; then \ + echo "❌ Файл .env.prod не найден! Запустите 'make docker-setup'"; \ + exit 1; \ + fi + docker-compose --env-file .env.prod up + +# Остановка контейнеров +docker-down: + @echo "🛑 Остановка контейнеров..." + docker-compose down + @echo "✅ Контейнеры остановлены!" + +# Перезапуск контейнеров +docker-restart: + @echo "🔄 Перезапуск контейнеров..." + docker-compose restart + @echo "✅ Контейнеры перезапущены!" + +# Просмотр логов бота +docker-logs: + @echo "📋 Логи бота..." + docker-compose logs -f bot + +# Просмотр логов базы данных +docker-logs-db: + @echo "📋 Логи базы данных..." + docker-compose logs -f db + +# Просмотр всех логов +docker-logs-all: + @echo "📋 Все логи..." + docker-compose logs -f + +# Статус контейнеров +docker-status: + @echo "📊 Статус контейнеров..." + @docker-compose ps + @echo "" + @echo "💾 Использование volumes:" + @docker volume ls | grep lottery || echo "Нет volumes" + +# Список запущенных контейнеров +docker-ps: + @docker ps --filter "name=lottery" + +# Применение миграций в контейнере +docker-db-migrate: + @echo "⬆️ Применение миграций в контейнере..." + docker-compose exec bot alembic upgrade head + @echo "✅ Миграции применены!" + +# Подключение к PostgreSQL в контейнере +docker-db-shell: + @echo "🐘 Подключение к PostgreSQL..." + @docker-compose exec db psql -U $${POSTGRES_USER:-lottery_user} -d $${POSTGRES_DB:-lottery_bot_db} + +# Создание бэкапа базы данных +docker-db-backup: + @echo "💾 Создание бэкапа базы данных..." + @mkdir -p backups + @BACKUP_FILE=backups/backup_$$(date +%Y%m%d_%H%M%S).sql; \ + docker-compose exec -T db pg_dump -U $${POSTGRES_USER:-lottery_user} $${POSTGRES_DB:-lottery_bot_db} > $$BACKUP_FILE && \ + echo "✅ Бэкап создан: $$BACKUP_FILE" + +# Восстановление из бэкапа +docker-db-restore: + @echo "⚠️ Восстановление базы данных из бэкапа" + @if [ -z "$(BACKUP)" ]; then \ + echo "❌ Укажите файл бэкапа: make docker-db-restore BACKUP=backups/backup_20231115_120000.sql"; \ + exit 1; \ + fi + @echo "Восстановление из: $(BACKUP)" + @read -p "Это удалит текущие данные! Продолжить? [y/N] " confirm; \ + if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \ + cat $(BACKUP) | docker-compose exec -T db psql -U $${POSTGRES_USER:-lottery_user} $${POSTGRES_DB:-lottery_bot_db}; \ + echo "✅ База данных восстановлена!"; \ + else \ + echo "❌ Отменено"; \ + fi + +# Открыть shell в контейнере бота +docker-shell: + @echo "🐚 Открытие shell в контейнере бота..." + docker-compose exec bot /bin/bash + +# Остановка и удаление контейнеров +docker-clean: + @echo "🧹 Очистка контейнеров..." + docker-compose down --remove-orphans + @echo "✅ Контейнеры удалены!" + +# Полная очистка (включая volumes) +docker-prune: + @echo "⚠️ ВНИМАНИЕ! Это удалит ВСЕ данные Docker (включая БД)!" + @read -p "Продолжить? [y/N] " confirm; \ + if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \ + echo "🗑️ Полная очистка..."; \ + docker-compose down -v --remove-orphans; \ + docker system prune -f; \ + echo "✅ Очистка завершена!"; \ + else \ + echo "❌ Отменено"; \ + fi + +# Пересборка и перезапуск +docker-rebuild: + @echo "🔄 Пересборка и перезапуск..." + docker-compose down + docker-compose build --no-cache + docker-compose --env-file .env.prod up -d + @echo "✅ Готово!" + @make docker-logs + +# Быстрое развертывание с нуля +docker-deploy: + @echo "🚀 Полное развертывание в продакшн..." + @make docker-setup + @echo "" + @echo "⚠️ Перед продолжением убедитесь, что отредактировали .env.prod!" + @read -p "Продолжить развертывание? [y/N] " confirm; \ + if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \ + make docker-build; \ + make docker-up; \ + sleep 5; \ + make docker-db-migrate; \ + echo ""; \ + echo "✅ Развертывание завершено!"; \ + echo "📊 Статус:"; \ + make docker-status; \ + else \ + echo "❌ Отменено"; \ + fi \ No newline at end of file diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..4ba8cd7 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +# Скрипт быстрого развертывания бота в продакшн через Docker + +set -e # Остановка при ошибке + +echo "🚀 Быстрое развертывание lottery bot в продакшн" +echo "================================================" +echo "" + +# Проверка наличия Docker +if ! command -v docker &> /dev/null; then + echo "❌ Docker не установлен!" + echo "Установите Docker: https://docs.docker.com/get-docker/" + exit 1 +fi + +# Проверка наличия Docker Compose +if ! command -v docker-compose &> /dev/null; then + echo "❌ Docker Compose не установлен!" + echo "Установите Docker Compose: https://docs.docker.com/compose/install/" + exit 1 +fi + +echo "✅ Docker и Docker Compose установлены" +echo "" + +# Проверка .env.prod +if [ ! -f .env.prod ]; then + echo "⚠️ Файл .env.prod не найден" + + if [ -f .env.prod.example ]; then + echo "📄 Создаю .env.prod из примера..." + cp .env.prod.example .env.prod + echo "" + echo "⚠️ ВНИМАНИЕ!" + echo "Отредактируйте файл .env.prod и укажите:" + echo " - BOT_TOKEN (токен от @BotFather)" + echo " - POSTGRES_PASSWORD (надежный пароль для БД)" + echo " - DATABASE_URL (обновите пароль в строке подключения)" + echo " - ADMIN_IDS (ваш Telegram ID)" + echo "" + read -p "Нажмите Enter после редактирования .env.prod..." + else + echo "❌ Файл .env.prod.example не найден!" + exit 1 + fi +fi + +echo "✅ Конфигурация найдена" +echo "" + +# Создание необходимых директорий +echo "📁 Создание директорий..." +mkdir -p logs backups data +echo "✅ Директории созданы" +echo "" + +# Сборка образа +echo "🔨 Сборка Docker образа..." +docker-compose build --no-cache +echo "✅ Образ собран" +echo "" + +# Запуск контейнеров +echo "🚀 Запуск контейнеров..." +docker-compose --env-file .env.prod up -d +echo "✅ Контейнеры запущены" +echo "" + +# Ожидание запуска БД +echo "⏳ Ожидание запуска базы данных..." +sleep 10 + +# Применение миграций +echo "⬆️ Применение миграций..." +docker-compose exec -T bot alembic upgrade head || { + echo "⚠️ Миграции не применены (возможно БД уже актуальна)" +} +echo "" + +# Статус +echo "📊 Статус контейнеров:" +docker-compose ps +echo "" + +# Проверка логов +echo "📋 Последние логи бота:" +docker-compose logs --tail=20 bot +echo "" + +echo "✅ Развертывание завершено!" +echo "" +echo "📝 Полезные команды:" +echo " make docker-logs - Просмотр логов" +echo " make docker-status - Статус контейнеров" +echo " make docker-restart - Перезапуск" +echo " make docker-down - Остановка" +echo " make docker-db-backup - Бэкап БД" +echo "" +echo "🎉 Бот запущен и готов к работе!" diff --git a/docker-compose.yml b/docker-compose.yml index 399528e..2f172b1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,137 +1,65 @@ -# Docker Compose для локального тестирования +# Docker Compose для продакшн-развертывания version: '3.8' services: - # Основное приложение - lottery-bot: + # Telegram Bot + bot: build: context: . dockerfile: Dockerfile container_name: lottery_bot restart: unless-stopped + env_file: + - .env.prod environment: - - DATABASE_URL=${DATABASE_URL:-postgresql+asyncpg://lottery:password@postgres:5432/lottery_bot} + - DATABASE_URL=${DATABASE_URL} - BOT_TOKEN=${BOT_TOKEN} - ADMIN_IDS=${ADMIN_IDS} - LOG_LEVEL=${LOG_LEVEL:-INFO} volumes: - - ./data:/app/data - ./logs:/app/logs - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy + - bot_data:/app/data networks: - lottery_network + depends_on: + db: + condition: service_healthy + healthcheck: + test: ["CMD", "python", "-c", "import sys; sys.exit(0)"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s - # PostgreSQL база данных - postgres: + # PostgreSQL Database + db: image: postgres:15-alpine - container_name: lottery_postgres + container_name: lottery_db restart: unless-stopped environment: - - POSTGRES_DB=lottery_bot - - POSTGRES_USER=lottery - - POSTGRES_PASSWORD=password - ports: - - "5432:5432" + POSTGRES_DB: ${POSTGRES_DB:-lottery_bot_db} + POSTGRES_USER: ${POSTGRES_USER:-lottery_user} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + PGDATA: /var/lib/postgresql/data/pgdata volumes: - postgres_data:/var/lib/postgresql/data - - ./scripts/init_postgres.sql:/docker-entrypoint-initdb.d/init.sql + ports: + - "5432:5432" + networks: + - lottery_network healthcheck: - test: ["CMD-SHELL", "pg_isready -U lottery -d lottery_bot"] + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-lottery_user} -d ${POSTGRES_DB:-lottery_bot_db}"] interval: 10s timeout: 5s retries: 5 - networks: - - lottery_network - - # Redis для кэширования - redis: - image: redis:7-alpine - container_name: lottery_redis - restart: unless-stopped - command: redis-server --appendonly yes - ports: - - "6379:6379" - volumes: - - redis_data:/data - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 10s - timeout: 5s - retries: 3 - networks: - - lottery_network - - # pgAdmin для управления БД (опционально) - pgadmin: - image: dpage/pgadmin4:latest - container_name: lottery_pgadmin - restart: unless-stopped - environment: - - PGADMIN_DEFAULT_EMAIL=admin@lottery.local - - PGADMIN_DEFAULT_PASSWORD=admin - ports: - - "8080:80" - depends_on: - - postgres - networks: - - lottery_network - profiles: - - admin - - # Prometheus для мониторинга (опционально) - prometheus: - image: prom/prometheus:latest - container_name: lottery_prometheus - restart: unless-stopped - command: - - '--config.file=/etc/prometheus/prometheus.yml' - - '--storage.tsdb.path=/prometheus' - - '--web.console.libraries=/etc/prometheus/console_libraries' - - '--web.console.templates=/etc/prometheus/consoles' - ports: - - "9090:9090" - volumes: - - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml - - prometheus_data:/prometheus - networks: - - lottery_network - profiles: - - monitoring - - # Grafana для визуализации (опционально) - grafana: - image: grafana/grafana:latest - container_name: lottery_grafana - restart: unless-stopped - environment: - - GF_SECURITY_ADMIN_PASSWORD=admin - ports: - - "3000:3000" - volumes: - - grafana_data:/var/lib/grafana - - ./monitoring/grafana/provisioning:/etc/grafana/provisioning - depends_on: - - prometheus - networks: - - lottery_network - profiles: - - monitoring + start_period: 10s volumes: postgres_data: - name: lottery_postgres_data - redis_data: - name: lottery_redis_data - prometheus_data: - name: lottery_prometheus_data - grafana_data: - name: lottery_grafana_data + driver: local + bot_data: + driver: local networks: lottery_network: - name: lottery_network - driver: bridge \ No newline at end of file + driver: bridge diff --git a/test_accounts.txt b/test_accounts.txt new file mode 100644 index 0000000..17ef10f --- /dev/null +++ b/test_accounts.txt @@ -0,0 +1,21 @@ +2521 11-22-33-44-55-66-77 +2521 12-23-34-45-56-67-78 +2521 13-24-35-46-57-68-79 +2521 14-25-36-47-58-69-80 +2521 15-26-37-48-59-70-81 +2521 16-27-38-49-60-71-82 +2521 17-28-39-50-61-72-83 +2521 18-29-40-51-62-73-84 +2521 19-30-41-52-63-74-85 +2521 20-31-42-53-64-75-86 + +2522 21-32-43-54-65-76-87 +2522 22-33-44-55-66-77-88 +2522 23-34-45-56-67-78-89 +2522 24-35-46-57-68-79-90 +2522 25-36-47-58-69-80-91 +2522 26-37-48-59-70-81-92 +2522 27-38-49-60-71-82-93 +2522 28-39-50-61-72-83-94 +2522 29-40-51-62-73-84-95 +2522 30-41-52-63-74-85-96