Для запуска телеграмм-бота на основе aiogram с использованием Docker и PostgreSQL можно использовать следующие шаги:
Шаг 1: Установка Docker и docker-compose
Сначала вам нужно установить Docker и docker-compose на вашу машину. Инструкции по установке вы можете найти на официальном сайте Docker.
Шаг 2: Настройка Docker-контейнера с PostgreSQL
Создайте файл docker-compose.yml и добавьте следующий код:
version: "3" services: db: image: postgres:latest container_name: postgresql environment: POSTGRES_USER: your_username # замените на имя пользователя базы данных POSTGRES_PASSWORD: your_password # замените на пароль базы данных POSTGRES_DB: your_database # замените на имя базы данных ports: - "5432:5432" volumes: - ./data:/var/lib/postgresql/data
Шаг 3: Установка зависимостей и создание бота
Создайте файл requirements.txt и добавьте следующие зависимости:
aiogram==2.15 asyncpg==0.24.0
Установите зависимости, выполните следующую команду в терминале:
pip install -r requirements.txt
Создайте файл main.py и добавьте следующий код, чтобы создать экземпляр телеграмм-бота с подключением к базе данных PostgreSQL:
import asyncio from aiogram import Bot, Dispatcher, types from aiogram.contrib.fsm_storage.memory import MemoryStorage from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters import Command, Text from aiogram.dispatcher.middlewares import BaseMiddleware import asyncpg # Здесь вам нужно заменить значения на ваши собственные POSTGRES_HOST = 'localhost' POSTGRES_USER = 'your_username' POSTGRES_PASSWORD = 'your_password' POSTGRES_DB = 'your_database' # Инициализация бота и диспетчера bot = Bot(token="YOUR_BOT_TOKEN") storage = MemoryStorage() dp = Dispatcher(bot, storage=storage) # Подключение к базе данных async def connect_to_db(): conn = await asyncpg.connect( host=POSTGRES_HOST, user=POSTGRES_USER, password=POSTGRES_PASSWORD, database=POSTGRES_DB ) await conn.set_type_codec( 'jsonb', encoder=lambda v: json.dumps(v, default=str), decoder=json.loads, schema='pg_catalog' ) return conn # Middleware для подключения к базе данных class DatabaseMiddleware(BaseMiddleware): async def on_pre_process_message(self, message: types.Message, data: dict) -> None: data['db'] = await connect_to_db() async def on_post_process_message(self, message: types.Message, data: dict) -> None: await data['db'].close() dp.middleware.setup(DatabaseMiddleware()) # Обработчик команды /start @dp.message_handler(Command("start")) async def cmd_start(message: types.Message, state: FSMContext): # Ваш код обработки команды pass # Главная функция async def main(): await dp.start_polling() if __name__ == '__main__': asyncio.run(main())
Шаг 4: Запуск контейнера с PostgreSQL и бота через docker-compose
Выполните следующую команду в терминале, чтобы запустить контейнер с PostgreSQL и бота:
docker-compose up
Теперь телеграмм-бот должен быть запущен и готов к работе с базой данных PostgreSQL.
Важно: не забудьте выполнить необходимые настройки в файле main.py, указав свои значения для переменных POSTGRES_HOST, POSTGRES_USER, POSTGRES_PASSWORD и POSTGRES_DB. Также замените YOUR_BOT_TOKEN на токен вашего бота Telegram.