Local changes: Updated model training, removed debug instrumentation, and configuration improvements
This commit is contained in:
315
docs/developer/setup.md
Normal file
315
docs/developer/setup.md
Normal file
@@ -0,0 +1,315 @@
|
||||
# Development Environment Setup
|
||||
|
||||
This guide will help you set up a development environment for Crypto Trader.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Python 3.11 or higher
|
||||
- Node.js 18 or higher
|
||||
- Git
|
||||
- Virtual environment tool (venv or virtualenv)
|
||||
- Code editor (VS Code, PyCharm, etc.)
|
||||
- PostgreSQL 14 or higher
|
||||
- Redis 5.0 or higher
|
||||
|
||||
## Initial Setup
|
||||
|
||||
### 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd crypto_trader
|
||||
```
|
||||
|
||||
### 2. Create Virtual Environment
|
||||
|
||||
```bash
|
||||
python -m venv venv
|
||||
source venv/bin/activate # On Windows: venv\Scripts\activate
|
||||
```
|
||||
|
||||
### 3. Install Python Dependencies
|
||||
|
||||
```bash
|
||||
# Install main dependencies
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Install development dependencies
|
||||
pip install -r tests/requirements.txt
|
||||
|
||||
# Install documentation dependencies
|
||||
pip install -r docs/requirements.txt
|
||||
```
|
||||
|
||||
### 4. Install Frontend Dependencies
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
cd ..
|
||||
```
|
||||
|
||||
### 5. Install Pre-commit Hooks (Optional)
|
||||
|
||||
```bash
|
||||
pip install pre-commit
|
||||
pre-commit install
|
||||
```
|
||||
|
||||
## Development Tools
|
||||
|
||||
### Recommended IDE Setup
|
||||
|
||||
**VS Code**:
|
||||
- Python extension
|
||||
- Pylance for type checking
|
||||
- Python Test Explorer
|
||||
- ESLint and Prettier for frontend
|
||||
- YAML extension
|
||||
|
||||
**PyCharm**:
|
||||
- Configure Python interpreter
|
||||
- Set up test runner
|
||||
- Configure code style
|
||||
- Enable JavaScript/TypeScript support
|
||||
|
||||
### Code Quality Tools
|
||||
|
||||
```bash
|
||||
# Install linting and formatting tools
|
||||
pip install black flake8 mypy pylint
|
||||
|
||||
# Format code
|
||||
black src/ tests/
|
||||
|
||||
# Lint code
|
||||
flake8 src/ tests/
|
||||
|
||||
# Type checking
|
||||
mypy src/
|
||||
```
|
||||
|
||||
## Database Setup
|
||||
|
||||
### PostgreSQL (Required)
|
||||
|
||||
You must have a PostgreSQL instance running for development.
|
||||
|
||||
```bash
|
||||
# Install PostgreSQL
|
||||
# Create development database
|
||||
createdb crypto_trader_dev
|
||||
|
||||
# Update config.yaml or set env var
|
||||
# DATABASE_URL=postgresql+asyncpg://user:password@localhost/crypto_trader_dev
|
||||
```
|
||||
|
||||
### SQLite (Internal)
|
||||
|
||||
Used internally for unit tests (in-memory) only. No setup required.
|
||||
|
||||
## Redis Setup
|
||||
|
||||
Redis is required for distributed state management and Celery background tasks (e.g., ML model retraining).
|
||||
|
||||
```bash
|
||||
# Install Redis (Ubuntu/Debian)
|
||||
sudo apt-get install redis-server
|
||||
```
|
||||
|
||||
**Starting Redis**:
|
||||
|
||||
```bash
|
||||
# Option 1: Using system service (requires sudo)
|
||||
sudo service redis-server start
|
||||
|
||||
# Option 2: Direct daemon mode (for containers/restricted environments)
|
||||
redis-server --daemonize yes
|
||||
|
||||
# Verify
|
||||
redis-cli ping # Should return PONG
|
||||
```
|
||||
|
||||
> **Note**: In containerized environments (Toolbox, Distrobox, Docker, etc.) where `sudo` is not available, use the direct daemon mode option. If you see "Connection refused" errors when using features like "Retrain Model", Redis is likely not running.
|
||||
|
||||
### Default Configuration
|
||||
|
||||
Redis defaults to `localhost:6379`. Override in `config.yaml`:
|
||||
|
||||
```yaml
|
||||
redis:
|
||||
host: "127.0.0.1"
|
||||
port: 6379
|
||||
db: 0
|
||||
```
|
||||
|
||||
## Running the Application
|
||||
|
||||
### Start All Services (Recommended)
|
||||
|
||||
Use the helper script to start all services:
|
||||
|
||||
```bash
|
||||
./scripts/start_all.sh
|
||||
```
|
||||
|
||||
### Start Services Manually
|
||||
|
||||
```bash
|
||||
# 1. Start Redis
|
||||
# Use sudo if available, otherwise direct daemon mode
|
||||
sudo service redis-server start # OR: redis-server --daemonize yes
|
||||
|
||||
# 2. Start Celery Worker (background tasks)
|
||||
celery -A src.worker.app worker --loglevel=info &
|
||||
|
||||
# 3. Start Backend API
|
||||
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000 &
|
||||
|
||||
# 4. Start Frontend
|
||||
cd frontend && npm run dev
|
||||
```
|
||||
|
||||
### Access Points
|
||||
|
||||
- **Frontend**: http://localhost:3000
|
||||
- **Backend API**: http://localhost:8000
|
||||
- **API Docs**: http://localhost:8000/docs
|
||||
|
||||
### Verify Redis/Celery Integration
|
||||
|
||||
```bash
|
||||
python scripts/verify_redis.py
|
||||
```
|
||||
|
||||
## Running Tests
|
||||
|
||||
```bash
|
||||
# Run all tests
|
||||
pytest
|
||||
|
||||
# Run with coverage
|
||||
pytest --cov=src --cov-report=html
|
||||
|
||||
# Run specific test file
|
||||
pytest tests/unit/core/test_redis.py
|
||||
|
||||
# Run Redis/Celery tests
|
||||
pytest tests/unit/core/test_redis.py tests/unit/worker/test_tasks.py -v
|
||||
|
||||
# Run with verbose output
|
||||
pytest -v
|
||||
```
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
crypto_trader/
|
||||
├── src/ # Backend source code
|
||||
│ ├── autopilot/ # Intelligent autopilot
|
||||
│ ├── core/ # Core utilities (config, redis, logging)
|
||||
│ ├── strategies/ # Trading strategies
|
||||
│ ├── trading/ # Trading engine
|
||||
│ └── worker/ # Celery tasks
|
||||
├── backend/ # FastAPI application
|
||||
│ ├── api/ # API endpoints
|
||||
│ └── main.py # Application entry point
|
||||
├── frontend/ # React frontend
|
||||
│ ├── src/ # React source
|
||||
│ └── package.json # Frontend dependencies
|
||||
├── tests/ # Test suite
|
||||
├── scripts/ # Utility scripts
|
||||
│ ├── start_all.sh # Start all services
|
||||
│ └── verify_redis.py # Verify Redis/Celery
|
||||
├── docs/ # Documentation
|
||||
└── requirements.txt # Python dependencies
|
||||
```
|
||||
|
||||
## Common Development Tasks
|
||||
|
||||
### Adding a New Celery Task
|
||||
|
||||
1. Add task function in `src/worker/tasks.py`
|
||||
2. Configure task routing in `src/worker/app.py` (optional)
|
||||
3. Create API endpoint in `backend/api/`
|
||||
4. Write unit tests in `tests/unit/worker/`
|
||||
|
||||
### Adding a New API Endpoint
|
||||
|
||||
1. Create/update router in `backend/api/`
|
||||
2. Register router in `backend/main.py`
|
||||
3. Add frontend API client in `frontend/src/api/`
|
||||
4. Write tests
|
||||
|
||||
### Running Documentation
|
||||
|
||||
```bash
|
||||
cd docs/api
|
||||
make html
|
||||
# Open build/html/index.html
|
||||
```
|
||||
|
||||
### Building AppImage
|
||||
|
||||
```bash
|
||||
./packaging/build_appimage.sh
|
||||
```
|
||||
|
||||
## Debugging
|
||||
|
||||
### Enable Debug Logging
|
||||
|
||||
Set in `config.yaml`:
|
||||
```yaml
|
||||
logging:
|
||||
level: DEBUG
|
||||
```
|
||||
|
||||
### Using Debugger
|
||||
|
||||
```bash
|
||||
# VS Code: Set breakpoints and use debugger
|
||||
# PyCharm: Configure debug configuration
|
||||
# Command line: Use pdb
|
||||
python -m pdb -c continue backend/main.py
|
||||
```
|
||||
|
||||
### Checking Celery Tasks
|
||||
|
||||
```bash
|
||||
# Monitor tasks
|
||||
celery -A src.worker.app events
|
||||
|
||||
# Inspect active tasks
|
||||
celery -A src.worker.app inspect active
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Import errors?**
|
||||
- Verify virtual environment is activated
|
||||
- Check PYTHONPATH
|
||||
- Reinstall dependencies
|
||||
|
||||
**Redis connection failed / "Connection refused" error?**
|
||||
- Ensure Redis is running: `redis-cli ping` (should return `PONG`)
|
||||
- Start Redis if not running:
|
||||
- With sudo: `sudo service redis-server start`
|
||||
- Without sudo: `redis-server --daemonize yes`
|
||||
- Check host/port configuration in `config.yaml`
|
||||
- Verify firewall rules
|
||||
|
||||
**Celery tasks not executing?**
|
||||
- Ensure worker is running: `ps aux | grep celery`
|
||||
- Check worker logs: `tail -f celery.log`
|
||||
- Verify Redis is accessible
|
||||
|
||||
**Tests failing?**
|
||||
- Check test database setup
|
||||
- Verify test fixtures
|
||||
- Review test logs
|
||||
|
||||
**Frontend not connecting?**
|
||||
- Check API is running on port 8000
|
||||
- Verify CORS settings in backend
|
||||
- Check browser console for errors
|
||||
Reference in New Issue
Block a user