MIGRATION_GUIDE.md•14.3 kB
# 🔄 Руководство по Миграции на Безопасное Хранение Ключей
## 📋 О чем этот документ
Этот документ содержит **пошаговые инструкции** по переходу от хранения API ключей в коде к безопасному хранению через переменные окружения.
**Цель:** Обеспечить работоспособность системы БЕЗ компрометации безопасности.
---
## ✅ Новая Архитектура (Best Practice)
```
┌─────────────────────────────────────────────────┐
│ .env файл (локально, не в Git) │
│ ├── BYBIT_API_KEY=реальный_ключ │
│ ├── BYBIT_API_SECRET=реальный_секрет │
│ └── QWEN_API_KEY=реальный_ключ │
└─────────────────┬───────────────────────────────┘
│
┌─────────▼─────────┐
│ load_env.sh │
│ (загружает .env) │
└─────────┬─────────┘
│
┌─────────▼─────────────────────┐
│ Системные переменные │
│ export BYBIT_API_KEY=... │
└─────────┬─────────────────────┘
│
┌─────────▼─────────────────────┐
│ Приложение читает из ENV │
│ - MCP серверы │
│ - Python скрипты │
│ - Node.js приложения │
└───────────────────────────────┘
```
---
## 🚀 Быстрая Миграция (5 минут)
### Шаг 1: Создайте .env файл
```bash
cd /Users/Gyber/GYBERNATY-ECOSYSTEM/TRADER-AGENT
# Скопируйте example файл
cp .env.example .env
# Откройте в редакторе
nano .env # или code .env, или vim .env
```
### Шаг 2: Заполните реальные ключи
Отредактируйте `.env` файл:
```bash
# Bybit API Credentials
BYBIT_API_KEY=ВАШ_РЕАЛЬНЫЙ_BYBIT_KEY
BYBIT_API_SECRET=ВАШ_РЕАЛЬНЫЙ_BYBIT_SECRET
BYBIT_TESTNET=false
# Qwen/OpenRouter API
QWEN_API_KEY=ВАШ_РЕАЛЬНЫЙ_QWEN_KEY
QWEN_MODEL=qwen-max
# Telegram Bot (опционально)
TELEGRAM_BOT_TOKEN=ВАШ_TELEGRAM_TOKEN
TELEGRAM_CHAT_ID=ваш_chat_id
```
**Сохраните файл** (Ctrl+O, Enter, Ctrl+X в nano)
### Шаг 3: Загрузите переменные
```bash
# Дайте права на выполнение скрипту
chmod +x load_env.sh
# Загрузите переменные (важно: source, а не просто ./load_env.sh)
source load_env.sh
# Должны увидеть:
# ✅ Все переменные загружены успешно!
```
### Шаг 4: Проверьте что работает
```bash
# Проверка переменных
echo $BYBIT_API_KEY
# Должен вывести ваш ключ
# Проверка Python
python -c "import os; print(os.getenv('BYBIT_API_KEY'))"
# Должен вывести ваш ключ
# Проверка Node.js
node -e "console.log(process.env.BYBIT_API_KEY)"
# Должен вывести ваш ключ
```
### Шаг 5: Обновите config/credentials.json
Теперь `config/credentials.json` будет читать из переменных окружения:
```json
{
"bybit": {
"api_key": "${BYBIT_API_KEY}",
"api_secret": "${BYBIT_API_SECRET}",
"testnet": false
},
"settings": {
"max_risk_per_trade": 0.02,
"max_concurrent_positions": 3,
"daily_loss_limit": 0.05,
"default_leverage": 2,
"max_leverage": 5
}
}
```
**ИЛИ** используйте Python скрипт для чтения из ENV:
```python
# Пример: mcp_server/bybit_client.py
import os
from dotenv import load_dotenv
# Загрузка из .env
load_dotenv()
# Чтение ключей
api_key = os.getenv('BYBIT_API_KEY')
api_secret = os.getenv('BYBIT_API_SECRET')
```
---
## 🔧 Обновление Компонентов
### A. MCP Серверы (Cursor Configuration)
**ДО (небезопасно):**
```json
{
"mcpServers": {
"bybit-analysis": {
"env": {
"BYBIT_API_KEY": "V84NJog5v9bM5k6fRn",
"BYBIT_API_SECRET": "RYZ1JeyGsWhtjigF01rKDYzq3lRbvlxvU89L"
}
}
}
}
```
**ПОСЛЕ (безопасно):**
```json
{
"mcpServers": {
"bybit-analysis": {
"env": {
"BYBIT_API_KEY": "${BYBIT_API_KEY}",
"BYBIT_API_SECRET": "${BYBIT_API_SECRET}",
"BYBIT_TESTNET": "false"
}
}
}
}
```
Cursor автоматически подставит значения из системных переменных!
### B. Python Скрипты
Добавьте в начало каждого скрипта:
```python
import os
from dotenv import load_dotenv
# Загрузка переменных из .env
load_dotenv()
# Использование
bybit_key = os.getenv('BYBIT_API_KEY')
bybit_secret = os.getenv('BYBIT_API_SECRET')
qwen_key = os.getenv('QWEN_API_KEY')
```
Установите python-dotenv:
```bash
pip install python-dotenv
```
### C. Node.js/TypeScript Скрипты
```typescript
// bybit-mcp/src/env.ts
import dotenv from 'dotenv';
// Загрузка из .env
dotenv.config();
export const BYBIT_API_KEY = process.env.BYBIT_API_KEY || '';
export const BYBIT_API_SECRET = process.env.BYBIT_API_SECRET || '';
```
Установите dotenv:
```bash
cd bybit-mcp
npm install dotenv
```
---
## 🔄 Workflow После Миграции
### Каждый раз при запуске терминала:
```bash
cd /Users/Gyber/GYBERNATY-ECOSYSTEM/TRADER-AGENT
# Загрузите переменные
source load_env.sh
# Теперь можно запускать что угодно:
python mcp_server/full_server.py
node bybit-mcp/build/index.js
# и т.д.
```
### Автоматическая загрузка (опционально):
Добавьте в `~/.zshrc` (или `~/.bash_profile`):
```bash
# Auto-load TRADER-AGENT environment
if [ -f ~/GYBERNATY-ECOSYSTEM/TRADER-AGENT/.env ]; then
export $(cat ~/GYBERNATY-ECOSYSTEM/TRADER-AGENT/.env | grep -v '^#' | xargs)
fi
```
Затем:
```bash
source ~/.zshrc # или source ~/.bash_profile
```
Теперь переменные загружаются автоматически при каждом открытии терминала!
---
## 🎯 GitHub Secrets (для CI/CD)
Если используете GitHub Actions:
### 1. Добавьте Secrets
```bash
# Установите GitHub CLI
brew install gh
gh auth login
cd /Users/Gyber/GYBERNATY-ECOSYSTEM/TRADER-AGENT
# Добавьте каждый секрет
gh secret set BYBIT_API_KEY
# Введите ключ когда попросит
gh secret set BYBIT_API_SECRET
gh secret set QWEN_API_KEY
gh secret set TELEGRAM_BOT_TOKEN
```
### 2. Используйте в Workflows
```yaml
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup environment
run: |
echo "BYBIT_API_KEY=${{ secrets.BYBIT_API_KEY }}" >> .env
echo "BYBIT_API_SECRET=${{ secrets.BYBIT_API_SECRET }}" >> .env
echo "QWEN_API_KEY=${{ secrets.QWEN_API_KEY }}" >> .env
- name: Run tests
run: |
source load_env.sh
python -m pytest
```
---
## ✅ Проверка Миграции
### Чеклист:
- [ ] ✅ `.env` файл создан и заполнен реальными ключами
- [ ] ✅ `.env` файл в `.gitignore` (проверить: `git status` не показывает .env)
- [ ] ✅ `load_env.sh` работает (выполнили `source load_env.sh`)
- [ ] ✅ Переменные доступны (проверили `echo $BYBIT_API_KEY`)
- [ ] ✅ Python скрипты читают из ENV (добавлен `python-dotenv`)
- [ ] ✅ Node.js скрипты читают из ENV (добавлен `dotenv`)
- [ ] ✅ Cursor MCP config обновлен (использует `${ПЕРЕМЕННЫЕ}`)
- [ ] ✅ config/credentials.json обновлен или использует ENV
- [ ] ✅ Все старые hardcoded ключи удалены из кода
- [ ] ✅ GitHub Secrets настроены (если используете CI/CD)
### Команды для проверки:
```bash
# 1. Проверка .env в gitignore
git status | grep .env
# Не должно быть вывода!
# 2. Поиск hardcoded ключей в проекте
grep -r "V84NJog5v9bM5k6fRn" . --exclude-dir=.git
# Не должно быть вывода!
# 3. Проверка загрузки переменных
source load_env.sh && echo $BYBIT_API_KEY
# Должен вывести ваш ключ
# 4. Тест Python
python -c "from dotenv import load_dotenv; import os; load_dotenv(); print('✅ Python OK' if os.getenv('BYBIT_API_KEY') else '❌ Failed')"
# 5. Тест Node.js
node -e "require('dotenv').config(); console.log(process.env.BYBIT_API_KEY ? '✅ Node OK' : '❌ Failed')"
```
---
## 🐛 Troubleshooting
### Проблема: "command not found: source"
**Решение:**
```bash
# Используйте . вместо source
. load_env.sh
```
### Проблема: Переменные не загружаются
**Решение:**
```bash
# Проверьте формат .env (без пробелов вокруг =)
cat .env
# Правильно: BYBIT_API_KEY=value
# Неправильно: BYBIT_API_KEY = value
# Перезагрузите
source load_env.sh
```
### Проблема: Python не видит переменные
**Решение:**
```bash
# Установите python-dotenv
pip install python-dotenv
# В коде добавьте:
from dotenv import load_dotenv
load_dotenv()
```
### Проблема: Cursor не подставляет переменные
**Решение:**
1. Убедитесь что переменные загружены в системе
2. Перезапустите Cursor **полностью**
3. Проверьте что используете `${ПЕРЕМЕННАЯ}` а не `$ПЕРЕМЕННАЯ`
---
## 📊 Преимущества Новой Системы
### ✅ Безопасность
- ❌ Ключи НЕ в Git
- ❌ Ключи НЕ в коде
- ✅ Ключи в .env (локально)
- ✅ .env в .gitignore
### ✅ Гибкость
- Легко менять ключи (просто отредактируйте .env)
- Разные ключи для разных окружений (testnet/mainnet)
- Один .env для всех компонентов
### ✅ Совместимость
- Работает с Python (dotenv)
- Работает с Node.js (dotenv)
- Работает с Cursor MCP
- Работает с GitHub Actions
### ✅ Простота
- Один файл .env для всего
- Один скрипт load_env.sh
- Четкая документация
---
## 📝 Файлы в Проекте
### Файлы для коммита (безопасны):
- ✅ `.env.example` - шаблон с placeholders
- ✅ `load_env.sh` - скрипт загрузки
- ✅ `.gitignore` - защита .env
- ✅ `MIGRATION_GUIDE.md` - этот документ
- ✅ `SECURITY_AUDIT.md` - отчет безопасности
### Файлы НЕ для коммита (секретные):
- ❌ `.env` - **НИКОГДА не коммитить!**
- ❌ `config/credentials.json` - если содержит реальные ключи
- ❌ `config/autonomous_agent.json` - если содержит реальные ключи
---
## 🎓 Best Practices
### 1. Регулярная ротация ключей
```bash
# Каждые 3-6 месяцев:
# 1. Создайте новые ключи на Bybit
# 2. Обновите .env
# 3. Протестируйте
# 4. Отзовите старые ключи
```
### 2. Разные ключи для разных целей
```bash
# .env.development
BYBIT_TESTNET=true
BYBIT_API_KEY=testnet_key
# .env.production
BYBIT_TESTNET=false
BYBIT_API_KEY=production_key
```
### 3. Мониторинг использования
- Проверяйте API logs на Bybit еженедельно
- Настройте email alerts на подозрительную активность
- Установите лимиты на API ключи
### 4. Backup ключей
- Храните копию .env в **безопасном месте** (1Password, Bitwarden, etc.)
- НЕ храните в облаке без шифрования
- НЕ отправляйте по email/Slack
---
## 🚀 Следующие Шаги
1. ✅ Выполните быструю миграцию (Шаг 1-5)
2. ✅ Проверьте чеклист
3. ✅ Протестируйте все компоненты
4. ✅ Прочитайте SECURITY_AUDIT.md
5. ✅ Отзовите старые ключи на Bybit
6. ✅ Очистите Git историю (если нужно)
---
**После выполнения всех шагов:**
- Система продолжит работать ✅
- Безопасность повысится ✅
- Управление ключами упростится ✅
---
*Миграция подготовлена: 2025-11-19*
*Совместимость: Python 3.x, Node.js 16+, Cursor IDE*