213 lines
5.9 KiB
Markdown
213 lines
5.9 KiB
Markdown
|
|
# 🔧 Переменные окружения для mnemo_cards_backend
|
|||
|
|
|
|||
|
|
## 📋 Обязательные переменные
|
|||
|
|
|
|||
|
|
### PostgreSQL
|
|||
|
|
```bash
|
|||
|
|
DB_HOST=localhost # Hostname PostgreSQL (в Coolify: internal hostname)
|
|||
|
|
DB_PORT=5432 # Порт PostgreSQL
|
|||
|
|
DB_NAME=mnemo_cards # Имя базы данных
|
|||
|
|
DB_USER=mnemo_user # Пользователь БД
|
|||
|
|
DB_PASSWORD=secret_password # Пароль БД (ОБЯЗАТЕЛЬНО изменить!)
|
|||
|
|
DB_SSL_MODE=disable # 'disable' для разработки, 'require' для продакшена
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Backend settings
|
|||
|
|
```bash
|
|||
|
|
PORT=3000 # Порт на котором запускается backend
|
|||
|
|
SERVER_ADDRESS=0.0.0.0 # Адрес для bind (0.0.0.0 = все интерфейсы)
|
|||
|
|
WORK_DIR=/app # Рабочая директория
|
|||
|
|
DEBUG=false # Режим отладки (true для разработки)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### JWT Authentication
|
|||
|
|
```bash
|
|||
|
|
JWT_SECRET=your_jwt_secret_here # Секрет для JWT токенов (min 32 символа)
|
|||
|
|
JWT_REFRESH_SECRET=your_refresh_secret_here # Секрет для refresh токенов
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Admin
|
|||
|
|
```bash
|
|||
|
|
ADMIN_IDS=1,2,3 # ID администраторов через запятую
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 Опциональные переменные
|
|||
|
|
|
|||
|
|
### YooKassa (платежи)
|
|||
|
|
```bash
|
|||
|
|
YOOKASSA_SHOP_ID= # Shop ID от YooKassa (обязательно)
|
|||
|
|
YOOKASSA_SECRET_KEY= # Secret Key от YooKassa (обязательно)
|
|||
|
|
YOOKASSA_RETURN_URL= # Базовый URL для возврата после оплаты (опционально)
|
|||
|
|
# По умолчанию: https://mnemo-cards.online/payment/return
|
|||
|
|
# Формат: https://your-domain.com/payment/return
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Backup
|
|||
|
|
```bash
|
|||
|
|
BACKUP_DIR=/app/backups # Директория для бэкапов (опционально)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔒 Генерация секретов
|
|||
|
|
|
|||
|
|
### Генерация JWT секретов
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Linux/macOS
|
|||
|
|
openssl rand -base64 32
|
|||
|
|
|
|||
|
|
# или
|
|||
|
|
cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Генерация пароля БД
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Linux/macOS
|
|||
|
|
openssl rand -base64 24
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 Примеры конфигураций
|
|||
|
|
|
|||
|
|
### Для разработки (.env.local)
|
|||
|
|
```bash
|
|||
|
|
DB_HOST=localhost
|
|||
|
|
DB_PORT=5432
|
|||
|
|
DB_NAME=mnemo_cards_dev
|
|||
|
|
DB_USER=mnemo_user
|
|||
|
|
DB_PASSWORD=dev_password_change_me
|
|||
|
|
DB_SSL_MODE=disable
|
|||
|
|
|
|||
|
|
PORT=3000
|
|||
|
|
SERVER_ADDRESS=0.0.0.0
|
|||
|
|
WORK_DIR=/root/mnemo_cards_backend
|
|||
|
|
DEBUG=true
|
|||
|
|
|
|||
|
|
ADMIN_IDS=1
|
|||
|
|
|
|||
|
|
JWT_SECRET=dev_jwt_secret_12345678901234567890
|
|||
|
|
JWT_REFRESH_SECRET=dev_refresh_secret_12345678901234567890
|
|||
|
|
|
|||
|
|
BACKUP_DIR=/app/backups
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Для продакшена (Coolify/Docker)
|
|||
|
|
```bash
|
|||
|
|
DB_HOST=mnemo-postgres # Internal hostname в Coolify
|
|||
|
|
DB_PORT=5432
|
|||
|
|
DB_NAME=mnemo_cards
|
|||
|
|
DB_USER=mnemo_user
|
|||
|
|
DB_PASSWORD=<сгенерированный пароль>
|
|||
|
|
DB_SSL_MODE=require # SSL для продакшена!
|
|||
|
|
|
|||
|
|
PORT=3000
|
|||
|
|
SERVER_ADDRESS=0.0.0.0
|
|||
|
|
WORK_DIR=/app
|
|||
|
|
DEBUG=false
|
|||
|
|
|
|||
|
|
ADMIN_IDS=1,2,3
|
|||
|
|
|
|||
|
|
JWT_SECRET=<сгенерированный секрет 32+ символов>
|
|||
|
|
JWT_REFRESH_SECRET=<другой сгенерированный секрет 32+ символов>
|
|||
|
|
|
|||
|
|
YOOKASSA_SHOP_ID=<ваш shop id>
|
|||
|
|
YOOKASSA_SECRET_KEY=<ваш secret key>
|
|||
|
|
|
|||
|
|
BACKUP_DIR=/app/backups
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚠️ Важные замечания
|
|||
|
|
|
|||
|
|
### Безопасность
|
|||
|
|
|
|||
|
|
1. **НИКОГДА** не коммитить `.env` файлы в Git!
|
|||
|
|
2. **ОБЯЗАТЕЛЬНО** изменить все пароли и секреты в продакшене
|
|||
|
|
3. Использовать `DB_SSL_MODE=require` в продакшене
|
|||
|
|
4. JWT секреты должны быть минимум 32 символа
|
|||
|
|
5. Регулярно ротировать секреты
|
|||
|
|
|
|||
|
|
### В Coolify
|
|||
|
|
|
|||
|
|
1. Переменные окружения хранятся безопасно
|
|||
|
|
2. Использовать **Internal hostnames** для связи между сервисами
|
|||
|
|
3. Coolify автоматически управляет SSL/TLS
|
|||
|
|
4. Можно использовать **Secrets** для паролей
|
|||
|
|
|
|||
|
|
### Docker Compose (локально)
|
|||
|
|
|
|||
|
|
При использовании docker-compose.yml переменные читаются из `.env` файла:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Создать .env из примера
|
|||
|
|
cp .env.example .env
|
|||
|
|
|
|||
|
|
# Отредактировать .env
|
|||
|
|
nano .env
|
|||
|
|
|
|||
|
|
# Запустить
|
|||
|
|
docker-compose up -d
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔍 Проверка переменных
|
|||
|
|
|
|||
|
|
### В коде
|
|||
|
|
```dart
|
|||
|
|
// Чтение переменной окружения
|
|||
|
|
final dbHost = Platform.environment['DB_HOST'] ?? 'localhost';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### В терминале (Linux/macOS)
|
|||
|
|
```bash
|
|||
|
|
echo $DB_HOST
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### В Docker контейнере
|
|||
|
|
```bash
|
|||
|
|
docker exec mnemo_backend env | grep DB_
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### В Coolify
|
|||
|
|
Открыть **Environment Variables** в настройках приложения
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🆘 Troubleshooting
|
|||
|
|
|
|||
|
|
### Ошибка: "Environment variable not found"
|
|||
|
|
|
|||
|
|
**Причина:** Переменная не установлена
|
|||
|
|
|
|||
|
|
**Решение:**
|
|||
|
|
1. Проверить `.env` файл
|
|||
|
|
2. Проверить переменные в Coolify
|
|||
|
|
3. Перезапустить приложение
|
|||
|
|
|
|||
|
|
### Ошибка: "Invalid JWT secret"
|
|||
|
|
|
|||
|
|
**Причина:** Секрет слишком короткий
|
|||
|
|
|
|||
|
|
**Решение:**
|
|||
|
|
Использовать секрет минимум 32 символа
|
|||
|
|
|
|||
|
|
### Ошибка: "Cannot connect to database"
|
|||
|
|
|
|||
|
|
**Причина:** Неправильные DB_* переменные
|
|||
|
|
|
|||
|
|
**Решение:**
|
|||
|
|
1. Проверить `DB_HOST`, `DB_PORT`, `DB_NAME`
|
|||
|
|
2. Проверить `DB_USER`, `DB_PASSWORD`
|
|||
|
|
3. Проверить что PostgreSQL запущен
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Все переменные настроены в `.env.example` - используйте его как шаблон!**
|