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: