Some checks reported errors
continuous-integration/drone/push Build encountered an error
- Удален зависимость от встроенного PostgreSQL контейнера в docker-compose.yml - Добавлена полная документация по настройке внешней БД (EXTERNAL_DB_SETUP.md) - Обновлен .env.prod с комментариями для внешнего сервера - Добавлены Makefile команды для проверки и настройки внешней БД - Обновлен README.md с инструкциями по деплою Теперь бот использует внешний PostgreSQL сервер: - Убран depends_on для db сервиса - DATABASE_URL настраивается через .env.prod - Поддержка локальных и удаленных БД серверов - Гибкая конфигурация через переменные окружения
4.8 KiB
4.8 KiB
Настройка внешнего PostgreSQL
Этот гайд описывает как настроить бота для работы с внешним PostgreSQL сервером.
Предварительные требования
- Запущенный PostgreSQL сервер (версия 13+)
- Доступ к серверу по сети (если сервер на другой машине)
- Созданная база данных для бота
Шаг 1: Подготовка PostgreSQL
Создание базы данных и пользователя
-- Подключитесь к PostgreSQL
psql -U postgres
-- Создайте пользователя
CREATE USER bot_user WITH PASSWORD 'your_secure_password';
-- Создайте базу данных
CREATE DATABASE lottery_bot OWNER bot_user;
-- Выдайте права
GRANT ALL PRIVILEGES ON DATABASE lottery_bot TO bot_user;
Настройка доступа (если PostgreSQL на другом сервере)
Отредактируйте postgresql.conf:
listen_addresses = '*' # или конкретный IP
Отредактируйте pg_hba.conf:
# Разрешить подключение с определенного IP
host lottery_bot bot_user 192.168.1.0/24 md5
Перезапустите PostgreSQL:
sudo systemctl restart postgresql
Шаг 2: Настройка .env.prod
Отредактируйте .env.prod:
# PostgreSQL настройки
POSTGRES_HOST=your_db_server_ip_or_domain
POSTGRES_PORT=5432
POSTGRES_DB=lottery_bot
POSTGRES_USER=bot_user
POSTGRES_PASSWORD=your_secure_password
# Database URL
DATABASE_URL=postgresql+asyncpg://bot_user:your_secure_password@your_db_server_ip_or_domain:5432/lottery_bot
Примеры DATABASE_URL
Локальная БД:
DATABASE_URL=postgresql+asyncpg://bot_user:password@localhost:5432/lottery_bot
Удаленная БД:
DATABASE_URL=postgresql+asyncpg://bot_user:password@192.168.1.100:5432/lottery_bot
С доменом:
DATABASE_URL=postgresql+asyncpg://bot_user:password@db.example.com:5432/lottery_bot
Через Docker network (если БД в другом контейнере):
DATABASE_URL=postgresql+asyncpg://bot_user:password@postgres_container:5432/lottery_bot
Шаг 3: Применение миграций
После настройки подключения примените миграции:
# Активируйте виртуальное окружение
source .venv/bin/activate
# Примените миграции
alembic upgrade head
Шаг 4: Запуск бота
С Docker Compose:
docker-compose up -d
Локально:
make bot-start
Проверка подключения
Проверьте подключение к БД:
# Из контейнера
docker exec -it lottery_bot python -c "from src.core.database import engine; import asyncio; asyncio.run(engine.dispose())"
# Локально
python -c "from src.core.database import engine; import asyncio; asyncio.run(engine.dispose())"
Troubleshooting
Ошибка: "FATAL: password authentication failed"
- Проверьте правильность пароля в DATABASE_URL
- Убедитесь что пользователь создан в PostgreSQL
- Проверьте настройки pg_hba.conf
Ошибка: "could not connect to server"
- Проверьте что PostgreSQL запущен
- Убедитесь что порт 5432 открыт (firewall)
- Проверьте listen_addresses в postgresql.conf
Ошибка: "database does not exist"
- Создайте базу данных (см. Шаг 1)
- Проверьте имя БД в DATABASE_URL
Ошибка: "SSL connection has been closed unexpectedly"
- Добавьте
?ssl=requireили?ssl=preferв конец DATABASE_URL - Или отключите SSL:
?ssl=false
Рекомендации по безопасности
- Используйте сильные пароли для пользователя БД
- Ограничьте доступ только с нужных IP (pg_hba.conf)
- Используйте SSL для подключения к удаленной БД
- Регулярно делайте бэкапы:
pg_dump -U bot_user lottery_bot > backup_$(date +%Y%m%d).sql - Не коммитьте .env.prod в git (добавлен в .gitignore)
Мониторинг
Проверка состояния подключений:
SELECT * FROM pg_stat_activity WHERE datname = 'lottery_bot';
Размер базы данных:
SELECT pg_size_pretty(pg_database_size('lottery_bot'));