215 lines
6.9 KiB
Markdown
215 lines
6.9 KiB
Markdown
# 🚀 Настройка PostgreSQL + Backend в Coolify
|
||
|
||
## 📋 Шаг 1: Создать PostgreSQL в Coolify
|
||
|
||
1. Зайти в Coolify Dashboard
|
||
2. Выбрать **Resources** → **+ New**
|
||
3. Выбрать **Database** → **PostgreSQL**
|
||
4. Настроить:
|
||
- **Name:** `mnemo-postgres`
|
||
- **Version:** `16` (рекомендуется)
|
||
- **Database Name:** `mnemo_cards`
|
||
- **Username:** `mnemo_user`
|
||
- **Password:** (автогенерируется или задать свой)
|
||
|
||
5. **Нажать Create**
|
||
|
||
Coolify автоматически создаст:
|
||
- PostgreSQL контейнер
|
||
- Internal hostname (например: `mnemo-postgres`)
|
||
- Connection string
|
||
|
||
## 📋 Шаг 2: Получить connection string
|
||
|
||
После создания PostgreSQL в Coolify:
|
||
|
||
1. Открыть созданную базу данных
|
||
2. Найти вкладку **Connection Details**
|
||
3. Скопировать:
|
||
- **Internal URL** (для связи между сервисами в Coolify)
|
||
- **Database Name**
|
||
- **Username**
|
||
- **Password**
|
||
|
||
Пример Internal URL:
|
||
```
|
||
postgresql://mnemo_user:password@mnemo-postgres:5432/mnemo_cards
|
||
```
|
||
|
||
## 📋 Шаг 3: Настроить Backend приложение в Coolify
|
||
|
||
### 3.1 Создать новый сервис
|
||
|
||
1. В Coolify: **Resources** → **+ New**
|
||
2. Выбрать **Application** → **Docker Compose** (или **Dockerfile**)
|
||
3. Настроить:
|
||
- **Name:** `mnemo-backend`
|
||
- **Git Repository:** ваш репозиторий
|
||
- **Branch:** `master` (или `main`)
|
||
- **Base Directory:** `/mnemo_cards_backend`
|
||
- **Dockerfile Location:** `/mnemo_cards_backend/Dockerfile`
|
||
|
||
### 3.2 Настроить переменные окружения
|
||
|
||
В разделе **Environment Variables** добавить:
|
||
|
||
```bash
|
||
# PostgreSQL (используем internal hostname от Coolify)
|
||
DB_HOST=mnemo-postgres # или internal hostname из Coolify
|
||
DB_PORT=5432
|
||
DB_NAME=mnemo_cards
|
||
DB_USER=mnemo_user
|
||
DB_PASSWORD=<пароль из Coolify>
|
||
DB_SSL_MODE=disable # или 'require' для продакшена
|
||
|
||
# Backend settings
|
||
PORT=3000
|
||
SERVER_ADDRESS=0.0.0.0
|
||
WORK_DIR=/app
|
||
DEBUG=false
|
||
|
||
# Admin IDs (через запятую)
|
||
ADMIN_IDS=1,2,3
|
||
|
||
# JWT secrets (ОБЯЗАТЕЛЬНО изменить на случайные!)
|
||
JWT_SECRET=<сгенерировать случайную строку>
|
||
JWT_REFRESH_SECRET=<сгенерировать другую случайную строку>
|
||
|
||
# YooKassa (если используется)
|
||
YOOKASSA_SHOP_ID=<ваш shop id>
|
||
YOOKASSA_SECRET_KEY=<ваш secret key>
|
||
|
||
# Backup (опционально)
|
||
BACKUP_DIR=/app/backups
|
||
```
|
||
|
||
**Генерация секретов:**
|
||
```bash
|
||
# Сгенерировать случайные секреты (выполнить локально)
|
||
openssl rand -base64 32 # для JWT_SECRET
|
||
openssl rand -base64 32 # для JWT_REFRESH_SECRET
|
||
```
|
||
|
||
### 3.3 Настроить порты
|
||
|
||
В разделе **Ports**:
|
||
- **Container Port:** `3000`
|
||
- **Public Port:** `3000` (или другой)
|
||
|
||
### 3.4 Настроить health check (опционально)
|
||
|
||
В Coolify можно настроить health check:
|
||
- **Path:** `/health`
|
||
- **Port:** `3000`
|
||
- **Interval:** `30s`
|
||
|
||
## 📋 Шаг 4: Deploy
|
||
|
||
1. Нажать **Deploy** в Coolify
|
||
2. Следить за логами деплоя
|
||
3. Дождаться успешного запуска
|
||
|
||
## 🔍 Шаг 5: Проверка подключения
|
||
|
||
### 5.1 Проверить логи Backend
|
||
|
||
В Coolify открыть **Logs** и найти:
|
||
|
||
```
|
||
✅ Successfully connected to PostgreSQL
|
||
🌐 Starting API server...
|
||
✅ Backend started successfully!
|
||
```
|
||
|
||
Если есть ошибки подключения:
|
||
```
|
||
❌ Error connecting to PostgreSQL: ...
|
||
```
|
||
|
||
### 5.2 Проверить через API
|
||
|
||
```bash
|
||
# Health check
|
||
curl https://your-backend-url.com/health
|
||
|
||
# Должен вернуть 200 OK
|
||
```
|
||
|
||
### 5.3 Проверить подключение к PostgreSQL напрямую
|
||
|
||
В Coolify можно открыть **Terminal** для PostgreSQL контейнера:
|
||
|
||
```bash
|
||
psql -U mnemo_user -d mnemo_cards
|
||
```
|
||
|
||
Проверить таблицы:
|
||
```sql
|
||
\dt -- список таблиц
|
||
SELECT * FROM users LIMIT 1;
|
||
```
|
||
|
||
## 🔧 Troubleshooting
|
||
|
||
### Проблема: Backend не может подключиться к PostgreSQL
|
||
|
||
**Решение:**
|
||
1. Проверить что PostgreSQL запущен в Coolify
|
||
2. Проверить что используется **internal hostname** (не external URL)
|
||
3. Проверить переменные окружения `DB_HOST`, `DB_PORT`
|
||
4. Проверить что оба сервиса в одной сети Coolify
|
||
|
||
### Проблема: "Connection refused"
|
||
|
||
**Решение:**
|
||
1. Убедиться что PostgreSQL health check зелёный
|
||
2. Проверить что порт `5432` правильный
|
||
3. Попробовать переподключить сервисы в Coolify
|
||
|
||
### Проблема: "Authentication failed"
|
||
|
||
**Решение:**
|
||
1. Проверить `DB_USER` и `DB_PASSWORD`
|
||
2. Проверить что пароль не содержит спецсимволов (или экранировать)
|
||
|
||
### Проблема: "Database does not exist"
|
||
|
||
**Решение:**
|
||
1. Проверить `DB_NAME=mnemo_cards`
|
||
2. Создать БД вручную в PostgreSQL terminal
|
||
|
||
## 📊 Мониторинг
|
||
|
||
После запуска проверить:
|
||
- ✅ Backend логи - нет ошибок
|
||
- ✅ PostgreSQL логи - нет ошибок
|
||
- ✅ API endpoints работают
|
||
- ✅ Таблицы созданы автоматически (Drift миграции)
|
||
|
||
## 🎯 Следующие шаги
|
||
|
||
После успешного запуска:
|
||
|
||
1. **Создать первого пользователя** (через API или напрямую в БД)
|
||
2. **Настроить бэкапы** БД в Coolify (опция в настройках PostgreSQL)
|
||
3. **Настроить мониторинг** (Coolify имеет встроенный)
|
||
4. **Настроить домен и SSL** (Coolify делает автоматически)
|
||
|
||
## 📝 Примечания
|
||
|
||
- Coolify автоматически управляет Docker сетями
|
||
- Coolify автоматически создаёт volumes для PostgreSQL
|
||
- Coolify автоматически настраивает Traefik для SSL/HTTPS
|
||
- Все переменные окружения безопасно хранятся в Coolify
|
||
|
||
## 🆘 Помощь
|
||
|
||
Если что-то не работает:
|
||
1. Проверить логи Backend в Coolify
|
||
2. Проверить логи PostgreSQL в Coolify
|
||
3. Проверить переменные окружения
|
||
4. Проверить что сервисы в одной сети
|
||
|
||
---
|
||
|
||
**Готово!** После этих шагов Backend будет работать с PostgreSQL в Coolify! 🎉
|