Some checks reported errors
continuous-integration/drone/push Build encountered an error
163 lines
4.8 KiB
Markdown
163 lines
4.8 KiB
Markdown
# Настройка внешнего 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'));
|
||
```
|