Files
global_it24_landing/DATABASE.md
DeepAgent c5f3377a62 Add PostgreSQL configuration and database management tools
- Added PostgreSQL service to docker-compose.yml
- Updated .env.example with complete database settings
- Created DATABASE.md with comprehensive PostgreSQL guide
- Added backup-db.sh script for automatic database backups
- Configured health checks for both PostgreSQL and app containers
- Added Docker network for secure container communication
2025-10-27 11:45:42 +00:00

353 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🗄 Руководство по работе с PostgreSQL
## 📋 Обзор
Проект использует PostgreSQL 16 в Docker контейнере. База данных автоматически запускается вместе с приложением через Docker Compose.
---
## ⚙️ Конфигурация
### Переменные окружения (.env)
```env
# Настройки PostgreSQL
POSTGRES_USER=globalit24
POSTGRES_PASSWORD=changeme123 # ОБЯЗАТЕЛЬНО ИЗМЕНИТЕ!
POSTGRES_DB=globalit24_db
# URL для подключения
DATABASE_URL=postgresql://globalit24:changeme123@postgres:5432/globalit24_db
```
**⚠️ ВАЖНО:** Обязательно измените `POSTGRES_PASSWORD` на сильный пароль перед развертыванием!
---
## 🚀 Автоматический запуск
PostgreSQL запускается автоматически при выполнении:
```bash
./deploy.sh
# или
docker compose up -d
```
---
## 📊 Структура базы данных
### Таблица: contact_submissions
Хранит все заявки с формы обратной связи.
```sql
CREATE TABLE contact_submissions (
id VARCHAR PRIMARY KEY, -- Уникальный идентификатор (cuid)
name VARCHAR NOT NULL, -- Имя клиента
phone VARCHAR NOT NULL, -- Телефон
email VARCHAR, -- Email (опционально)
service_type VARCHAR, -- Тип услуги (опционально)
message TEXT, -- Сообщение (опционально)
created_at TIMESTAMP DEFAULT NOW() -- Дата создания
);
```
---
## 🔧 Управление базой данных
### 1. Подключение к PostgreSQL контейнеру
```bash
# Войти в контейнер PostgreSQL
docker exec -it global-it24-postgres psql -U globalit24 -d globalit24_db
```
### 2. Основные SQL команды
```sql
-- Посмотреть все таблицы
\dt
-- Описание таблицы
\d contact_submissions
-- Посмотреть все заявки
SELECT * FROM contact_submissions ORDER BY created_at DESC;
-- Посмотреть последние 10 заявок
SELECT * FROM contact_submissions ORDER BY created_at DESC LIMIT 10;
-- Посмотреть заявки за сегодня
SELECT * FROM contact_submissions
WHERE created_at::date = CURRENT_DATE
ORDER BY created_at DESC;
-- Статистика по типам услуг
SELECT service_type, COUNT(*) as count
FROM contact_submissions
GROUP BY service_type
ORDER BY count DESC;
-- Выход
\q
```
### 3. Резервное копирование базы данных
```bash
# Создать бэкап
docker exec -t global-it24-postgres pg_dump -U globalit24 globalit24_db > backup_$(date +%Y%m%d_%H%M%S).sql
# Или автоматический скрипт
./backup-db.sh
```
### 4. Восстановление из бэкапа
```bash
# Восстановить из файла
docker exec -i global-it24-postgres psql -U globalit24 -d globalit24_db < backup_YYYYMMDD_HHMMSS.sql
```
### 5. Очистка старых данных (опционально)
```bash
# Удалить заявки старше 1 года
docker exec -it global-it24-postgres psql -U globalit24 -d globalit24_db -c "DELETE FROM contact_submissions WHERE created_at < NOW() - INTERVAL '1 year';"
```
---
## 🔍 Проверка состояния
### Статус контейнера
```bash
# Проверка работы PostgreSQL
docker ps | grep postgres
# Логи PostgreSQL
docker logs global-it24-postgres
# Последние 50 строк логов
docker logs global-it24-postgres --tail 50 -f
```
### Health Check
```bash
# Проверка готовности базы данных
docker exec global-it24-postgres pg_isready -U globalit24
# Должно вывести:
# /var/run/postgresql:5432 - accepting connections
```
### Подключение к базе из приложения
```bash
# Проверка переменных окружения в контейнере приложения
docker exec global-it24-landing env | grep DATABASE_URL
```
---
## 📦 Prisma миграции
### Применить миграции (после изменений в schema.prisma)
```bash
# Внутри контейнера приложения
docker exec -it global-it24-landing sh -c "cd /app && npx prisma migrate deploy"
```
### Создать новую миграцию (в разработке)
```bash
cd nextjs_space
yarn prisma migrate dev --name название_миграции
```
### Сгенерировать Prisma Client
```bash
cd nextjs_space
yarn prisma generate
```
### Просмотр данных через Prisma Studio (только для разработки)
```bash
cd nextjs_space
yarn prisma studio
# Откроется на http://localhost:5555
```
---
## 🔐 Безопасность
### Рекомендации:
1. **Измените пароль по умолчанию**
```bash
# В .env файле установите сильный пароль
POSTGRES_PASSWORD=your_strong_password_here_123!@#
```
2. **Ограничьте доступ к порту PostgreSQL**
PostgreSQL работает внутри Docker сети и не доступен извне по умолчанию. Это правильно!
Если нужен внешний доступ (не рекомендуется), добавьте:
```yaml
ports:
- "127.0.0.1:5432:5432" # Только localhost
```
3. **Регулярные бэкапы**
Настройте автоматический бэкап через cron:
```bash
crontab -e
# Добавьте:
0 3 * * * cd /path/to/global_it24_landing && ./backup-db.sh
```
4. **Мониторинг места на диске**
```bash
# Проверка размера данных PostgreSQL
docker exec global-it24-postgres du -sh /var/lib/postgresql/data
```
---
## 🛠 Устранение неполадок
### Проблема: Не могу подключиться к базе данных
```bash
# 1. Проверьте что контейнер запущен
docker ps | grep postgres
# 2. Проверьте логи
docker logs global-it24-postgres
# 3. Проверьте health check
docker inspect global-it24-postgres | grep -A 5 Health
# 4. Попробуйте перезапустить
docker compose restart postgres
```
### Проблема: База данных не инициализируется
```bash
# 1. Остановите контейнеры
docker compose down
# 2. Удалите volume (ВНИМАНИЕ: потеря данных!)
docker volume rm global_it24_landing_postgres_data
# 3. Запустите снова
./deploy.sh
```
### Проблема: Ошибка миграции Prisma
```bash
# 1. Проверьте DATABASE_URL
docker exec global-it24-landing env | grep DATABASE_URL
# 2. Сбросьте Prisma и примените миграции заново
docker exec -it global-it24-landing sh -c "cd /app && npx prisma migrate reset --skip-seed"
```
### Проблема: Медленные запросы
```sql
-- Проверьте размер таблицы
SELECT
schemaname,
tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
FROM pg_tables
WHERE schemaname = 'public';
-- Создайте индексы для часто используемых полей
CREATE INDEX idx_created_at ON contact_submissions(created_at DESC);
CREATE INDEX idx_phone ON contact_submissions(phone);
```
---
## 📈 Мониторинг
### Использование ресурсов
```bash
# Статистика контейнера PostgreSQL
docker stats global-it24-postgres --no-stream
# Размер базы данных
docker exec global-it24-postgres psql -U globalit24 -d globalit24_db -c "SELECT pg_size_pretty(pg_database_size('globalit24_db'));"
```
### Количество записей
```bash
# Общее количество заявок
docker exec global-it24-postgres psql -U globalit24 -d globalit24_db -c "SELECT COUNT(*) FROM contact_submissions;"
```
---
## 🔄 Миграция данных
### Экспорт данных в CSV
```bash
docker exec -t global-it24-postgres psql -U globalit24 -d globalit24_db -c "COPY contact_submissions TO STDOUT WITH CSV HEADER" > submissions_export.csv
```
### Импорт данных из CSV
```bash
cat submissions_import.csv | docker exec -i global-it24-postgres psql -U globalit24 -d globalit24_db -c "COPY contact_submissions FROM STDIN WITH CSV HEADER"
```
---
## 📞 Полезные ссылки
- [Документация PostgreSQL](https://www.postgresql.org/docs/)
- [Документация Prisma](https://www.prisma.io/docs/)
- [Docker PostgreSQL Image](https://hub.docker.com/_/postgres)
---
## 💡 Советы по производительности
1. **Регулярная очистка логов**
```bash
docker compose logs --tail 100 > logs.txt
```
2. **VACUUM таблицы** (освобождение места после удаления данных)
```sql
VACUUM ANALYZE contact_submissions;
```
3. **Мониторинг активных подключений**
```sql
SELECT count(*) FROM pg_stat_activity WHERE datname = 'globalit24_db';
```
---
**Готово! База данных PostgreSQL полностью настроена и готова к использованию! 🚀**