Skip to main content
Glama
MIGRATION_GUIDE.md14.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*

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheMacroeconomicDao/bybit-ai-trader'

If you have feedback or need assistance with the MCP directory API, please join our Discord server