From 6e735a2eab2d110831377e460cdf271bff87e76f Mon Sep 17 00:00:00 2001 From: "mamonov.ep" Date: Thu, 4 Dec 2025 11:55:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=91=D0=94=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=80=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Создано: - docker-compose.dev.yml - конфигурация только для PostgreSQL - make docker-db - команда для запуска только БД на порту 15433 - make docker-db-stop - остановка БД Изменено: - Makefile - добавлены команды для работы с БД - README.md - инструкции по запуску БД - .env.example - обновлен порт БД на 15433 Использование: make docker-db - запустить PostgreSQL на localhost:15433 make run - запустить бота локально с подключением к БД Порт 15433 выбран чтобы избежать конфликтов с другими PostgreSQL. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .env.example | 5 ++-- Makefile | 49 ++++++++++++++++++++++++++++++++------- README.md | 52 +++++++++++++++++++++++++++++++++++------- docker-compose.dev.yml | 26 +++++++++++++++++++++ 4 files changed, 114 insertions(+), 18 deletions(-) create mode 100644 docker-compose.dev.yml diff --git a/.env.example b/.env.example index dd56569..47f42d5 100644 --- a/.env.example +++ b/.env.example @@ -4,13 +4,14 @@ BOT_TOKEN=your_telegram_bot_token_here # OpenAI API Key OPENAI_API_KEY=your_openai_api_key_here -# Database (для локального запуска) -DATABASE_URL=postgresql+asyncpg://botuser:botpassword@localhost:5432/language_bot +# Database (для локального запуска с БД в Docker) +DATABASE_URL=postgresql+asyncpg://botuser:botpassword@localhost:15433/language_bot # PostgreSQL настройки (для Docker) POSTGRES_USER=botuser POSTGRES_PASSWORD=botpassword POSTGRES_DB=language_bot +DB_PORT=15433 # Settings DEBUG=True diff --git a/Makefile b/Makefile index 31ac98e..28ec2ed 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,21 @@ -.PHONY: help venv install run clean docker-up docker-down docker-logs +.PHONY: help venv install run clean docker-up docker-down docker-logs docker-db docker-db-stop help: @echo "Доступные команды:" - @echo " make venv - Создать виртуальное окружение" - @echo " make install - Установить зависимости" - @echo " make run - Запустить бота локально" - @echo " make clean - Удалить venv и кэш" - @echo " make docker-up - Запустить через Docker Compose" - @echo " make docker-down - Остановить Docker контейнеры" - @echo " make docker-logs - Показать логи Docker" + @echo " make venv - Создать виртуальное окружение" + @echo " make install - Установить зависимости" + @echo " make run - Запустить бота локально" + @echo " make clean - Удалить venv и кэш" + @echo "" + @echo "Docker команды:" + @echo " make docker-up - Запустить всё (бот + БД)" + @echo " make docker-down - Остановить все контейнеры" + @echo " make docker-logs - Показать логи Docker" + @echo " make docker-rebuild - Пересобрать контейнеры" + @echo "" + @echo "База данных:" + @echo " make docker-db - Запустить только БД (для локальной разработки)" + @echo " make docker-db-stop - Остановить БД" venv: python3 -m venv .venv @@ -50,3 +57,29 @@ docker-logs: docker-rebuild: docker-compose up -d --build + +docker-db: + @echo "🐘 Запуск PostgreSQL для локальной разработки..." + @if [ ! -f .env ]; then \ + cp .env.example .env; \ + echo "⚠️ Создан .env файл из .env.example"; \ + fi + docker-compose -f docker-compose.dev.yml up -d + @echo "✅ База данных запущена на localhost:15433" + @echo "" + @echo "Параметры подключения:" + @echo " Host: localhost" + @echo " Port: 15433" + @echo " User: botuser" + @echo " Password: botpassword" + @echo " Database: language_bot" + @echo "" + @echo "DATABASE_URL для .env:" + @echo " DATABASE_URL=postgresql+asyncpg://botuser:botpassword@localhost:15433/language_bot" + @echo "" + @echo "Подключиться: docker-compose -f docker-compose.dev.yml exec db psql -U botuser -d language_bot" + +docker-db-stop: + @echo "Остановка базы данных..." + docker-compose -f docker-compose.dev.yml stop + docker-compose -f docker-compose.dev.yml down diff --git a/README.md b/README.md index 6b708e6..3f6d3a1 100644 --- a/README.md +++ b/README.md @@ -121,24 +121,60 @@ DEBUG=True - Telegram Bot Token: создайте бота через [@BotFather](https://t.me/BotFather) - OpenAI API Key: получите на [platform.openai.com](https://platform.openai.com/api-keys) -### 4. Настройка базы данных +**5. Настройка базы данных** -Создайте PostgreSQL базу данных: +Запустите PostgreSQL через Docker (рекомендуется): ```bash +# Через Makefile (рекомендуется) +make docker-db + +# Или напрямую через docker-compose +docker-compose up -d db + +# Или через отдельный dev-compose +docker-compose -f docker-compose.dev.yml up -d +``` + +Параметры подключения: +- Host: `localhost` +- Port: `15433` (не конфликтует с другими PostgreSQL) +- User: `botuser` +- Password: `botpassword` +- Database: `language_bot` +- URL: `postgresql+asyncpg://botuser:botpassword@localhost:15433/language_bot` + +Или установите PostgreSQL локально: + +```bash +# macOS +brew install postgresql createdb language_bot + +# Linux +sudo apt install postgresql +sudo -u postgres createdb language_bot ``` -Или используйте Docker: +**6. Запуск бота** ```bash -docker run --name language-bot-db -e POSTGRES_PASSWORD=password -e POSTGRES_DB=language_bot -p 5432:5432 -d postgres:15 -``` +# Активировать venv +source .venv/bin/activate -### 5. Запуск бота - -```bash +# Запустить python main.py + +# Или через Makefile +make run +``` + +**Остановка БД:** + +```bash +make docker-db-stop +# или +docker-compose stop db ``` ## Структура проекта diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..767f51f --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,26 @@ +version: '3.8' + +# Конфигурация только для базы данных (локальная разработка) +# Использование: docker-compose -f docker-compose.dev.yml up -d + +services: + db: + image: postgres:15-alpine + container_name: language_bot_db_dev + restart: unless-stopped + environment: + POSTGRES_USER: ${POSTGRES_USER:-botuser} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-botpassword} + POSTGRES_DB: ${POSTGRES_DB:-language_bot} + volumes: + - postgres_data_dev:/var/lib/postgresql/data + ports: + - "${DB_PORT:-15433}:5432" + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-botuser}"] + interval: 10s + timeout: 5s + retries: 5 + +volumes: + postgres_data_dev: