# Deployment Guide

This guide covers deploying Crypto Trader in various environments.

## Table of Contents

1. [AppImage Deployment](appimage.md) - Building and distributing AppImage
2. [Bluefin Linux](bluefin.md) - Bluefin Linux specific instructions
3. [PostgreSQL Setup](postgresql.md) - PostgreSQL configuration
4. [Updates](updates.md) - Update mechanism and versioning

## Deployment Options

### AppImage (Recommended)

- Single executable file
- No installation required
- Portable across Linux distributions
- Includes all dependencies

### From Source

- Full control over installation
- Customizable configuration
- Development and production use

## System Requirements

- **OS**: Linux (Bluefin recommended), macOS, Windows
- **Python**: 3.11+ (for source installation)
- **Node.js**: 18+ (for frontend)
- **Memory**: 4GB minimum, 8GB recommended
- **Storage**: 1GB+ for application and data
- **Network**: Internet connection required
- **Redis**: Version 5.0+ (for state management)
- **PostgreSQL**: Version 14+ (for database)

## Quick Deployment

### AppImage

1. Download AppImage
2. Make executable: `chmod +x crypto_trader-*.AppImage`
3. Run: `./crypto_trader-*.AppImage`

### From Source

1. Clone repository
2. Install dependencies: `pip install -r requirements.txt`
3. Install frontend dependencies: `cd frontend && npm install`
4. Start Redis (see Redis section below for options)
5. Start Celery worker: `celery -A src.worker.app worker --loglevel=info &`
6. Start backend: `uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000 &`
7. Start frontend: `cd frontend && npm run dev`

Or use the helper script:
```bash
./scripts/start_all.sh
```

## Required Services

### Redis

Redis is required for distributed state management and Celery background tasks (e.g., ML model training).

```bash
# Install (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, etc.) where `sudo` is not available, use the direct daemon mode option.

### Celery Worker

Celery handles background tasks like ML training:

```bash
# Start worker
celery -A src.worker.app worker --loglevel=info

# Start with specific queues
celery -A src.worker.app worker -Q ml_training,celery --loglevel=info
```

## Post-Deployment

After deployment:

1. Configure exchanges
2. Set up risk management
3. Verify Redis connection: `python scripts/verify_redis.py`
4. Test with paper trading
5. Review configuration
6. Start with small positions

## Production Considerations

- Use a process manager (systemd, supervisor) for services
- Configure Redis persistence (AOF or RDB)
- Set up monitoring and alerting
- Enable HTTPS for the API
- Configure proper firewall rules
