fix: обработка ошибки 'message is not modified' в conduct_lottery_draw_confirm
Some checks reported errors
continuous-integration/drone/push Build encountered an error
Some checks reported errors
continuous-integration/drone/push Build encountered an error
This commit is contained in:
162
docs/EXTERNAL_DB_SETUP.md
Normal file
162
docs/EXTERNAL_DB_SETUP.md
Normal file
@@ -0,0 +1,162 @@
|
||||
# Настройка внешнего PostgreSQL
|
||||
|
||||
Этот гайд описывает как настроить бота для работы с внешним PostgreSQL сервером.
|
||||
|
||||
## Предварительные требования
|
||||
|
||||
1. Запущенный PostgreSQL сервер (версия 13+)
|
||||
2. Доступ к серверу по сети (если сервер на другой машине)
|
||||
3. Созданная база данных для бота
|
||||
|
||||
## Шаг 1: Подготовка PostgreSQL
|
||||
|
||||
### Создание базы данных и пользователя
|
||||
|
||||
```sql
|
||||
-- Подключитесь к 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`:
|
||||
```conf
|
||||
listen_addresses = '*' # или конкретный IP
|
||||
```
|
||||
|
||||
Отредактируйте `pg_hba.conf`:
|
||||
```conf
|
||||
# Разрешить подключение с определенного IP
|
||||
host lottery_bot bot_user 192.168.1.0/24 md5
|
||||
```
|
||||
|
||||
Перезапустите PostgreSQL:
|
||||
```bash
|
||||
sudo systemctl restart postgresql
|
||||
```
|
||||
|
||||
## Шаг 2: Настройка .env.prod
|
||||
|
||||
Отредактируйте `.env.prod`:
|
||||
|
||||
```env
|
||||
# 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: Применение миграций
|
||||
|
||||
После настройки подключения примените миграции:
|
||||
|
||||
```bash
|
||||
# Активируйте виртуальное окружение
|
||||
source .venv/bin/activate
|
||||
|
||||
# Примените миграции
|
||||
alembic upgrade head
|
||||
```
|
||||
|
||||
## Шаг 4: Запуск бота
|
||||
|
||||
### С Docker Compose:
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### Локально:
|
||||
```bash
|
||||
make bot-start
|
||||
```
|
||||
|
||||
## Проверка подключения
|
||||
|
||||
Проверьте подключение к БД:
|
||||
|
||||
```bash
|
||||
# Из контейнера
|
||||
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`
|
||||
|
||||
## Рекомендации по безопасности
|
||||
|
||||
1. **Используйте сильные пароли** для пользователя БД
|
||||
2. **Ограничьте доступ** только с нужных IP (pg_hba.conf)
|
||||
3. **Используйте SSL** для подключения к удаленной БД
|
||||
4. **Регулярно делайте бэкапы**:
|
||||
```bash
|
||||
pg_dump -U bot_user lottery_bot > backup_$(date +%Y%m%d).sql
|
||||
```
|
||||
5. **Не коммитьте .env.prod** в git (добавлен в .gitignore)
|
||||
|
||||
## Мониторинг
|
||||
|
||||
Проверка состояния подключений:
|
||||
```sql
|
||||
SELECT * FROM pg_stat_activity WHERE datname = 'lottery_bot';
|
||||
```
|
||||
|
||||
Размер базы данных:
|
||||
```sql
|
||||
SELECT pg_size_pretty(pg_database_size('lottery_bot'));
|
||||
```
|
||||
Reference in New Issue
Block a user