# Installation Guide

This guide will help you set up the Orion Platform for development or production use.

## Prerequisites

Before you begin, ensure you have the following installed:

- **Python 3.11 or higher**
- **Docker and Docker Compose** (required for database and Redis)
- **Git**
- **PostgreSQL client tools** (optional, for debugging)

!!! note "PostgreSQL Only"
    This project uses PostgreSQL exclusively. SQLite is not supported.
    Docker provides the easiest way to run PostgreSQL locally.

## Development Setup

### 1. Clone the Repository

```bash
    git clone <orion-repo>
    cd orion-repo
```

### 2. Create Virtual Environment

=== "Windows"
    ```bash
    python -m venv venv
    venv\Scripts\activate
    ```

=== "macOS/Linux"
    ```bash
    python -m venv venv
    source venv/bin/activate
    ```

### 3. Install Dependencies

```bash
# Install main application dependencies
pip install -r requirements.txt # or make install

# Install development dependencies
pip install -r requirements-dev.txt # or make install-dev

# Install test dependencies
pip install -r tests/requirements-test.txt # or make install-test

# Install documentation dependencies (optional)
pip install -r requirements-docs.txt # or make install-docs

# All dependencies can be installed with make install-all
```

### 4. Database Setup

#### Option A: Local PostgreSQL

1. **Create Database**:
   ```sql
   CREATE DATABASE orion_db;
   CREATE USER orion_user WITH PASSWORD 'your_password';
   GRANT ALL PRIVILEGES ON DATABASE orion_db TO orion_user;
   ```

2. **Create Environment File**:
   ```bash
   cp .env.example .env
   ```

3. **Configure `.env` file**:
   ```env
   # Database
   DATABASE_URL=postgresql://orion_user:your_password@localhost/orion

   # Security
   SECRET_KEY=your-super-secret-key-here
   JWT_SECRET_KEY=your-jwt-secret-key-here

   # Environment
   ENVIRONMENT=development
   DEBUG=True
   ```

#### Option B: Docker PostgreSQL

```bash
docker run --name orion-postgres \
  -e POSTGRES_DB=orion_import \
  -e POSTGRES_USER=orion_user \
  -e POSTGRES_PASSWORD=your_password \
  -p 5432:5432 \
  -d postgres:15
```

### 5. Initialize Platform

```bash
# Option A: Full installation wizard (recommended)
make platform-install

# Option B: Manual steps
make migrate-up      # Run database migrations
make init-prod       # Initialize admin, CMS, email templates
```

### 6. Start Background Task Queue (Optional)

For production or to test background tasks:

```bash
# Start Redis (required for Celery)
docker compose up -d redis

# Start Celery worker (in separate terminal)
make celery-worker

# Start Celery beat scheduler (in separate terminal, for scheduled tasks)
make celery-beat

# Or start both together for development
make celery-dev
```

!!! tip "Development without Celery"
    Set `USE_CELERY=false` in `.env` to use FastAPI BackgroundTasks instead.
    This is the default and doesn't require Redis.

### 7. Run the Application

```bash
# Start development server
make dev
```

The application will be available at:

- **API**: http://localhost:8000
- **Interactive API Docs**: http://localhost:8000/docs
- **Alternative API Docs**: http://localhost:8000/redoc
- **Admin Panel**: http://localhost:8000/admin
- **Flower** (if Celery enabled): http://localhost:5555

## Docker Setup

### Quick Start with Docker Compose

1. **Clone and navigate to project**:
   ```bash
    git clone <orion-repo>
    cd orion-repo
   ```

2. **Start all services**:
   ```bash
   docker-compose up -d
   ```

3. **Initialize database**:
   ```bash
   docker-compose exec api python -m alembic upgrade head
   ```

### Manual Docker Setup

1. **Build the image**:
   ```bash
   docker build -t letzshop-import .
   ```

2. **Run with environment variables**:
   ```bash
   docker run -d \
     --name orion-api \
     -p 8000:8000 \
     -e DATABASE_URL="postgresql://user:pass@host/db" \
     -e SECRET_KEY="your-secret-key" \
     orion-import
   ```

## Verification

### 1. Check Application Health

```bash
curl http://localhost:8000/health
```

Expected response:
```json
{
  "status": "healthy",
  "database": "connected",
  "version": "1.0.0"
}
```

### 2. Run Tests

```bash
# Run all tests
pytest

# Run specific test types
pytest -m unit
pytest -m integration
```

### 3. Access Documentation

- **Swagger UI**: http://localhost:8000/docs
- **ReDoc**: http://localhost:8000/redoc
- **This Documentation** (if running MkDocs): http://localhost:8001

## Environment Variables

### Core Settings

| Variable | Description | Default | Required |
|----------|-------------|---------|----------|
| `DATABASE_URL` | PostgreSQL connection string | - | ✅ |
| `JWT_SECRET_KEY` | JWT token secret | - | ✅ |
| `DEBUG` | Enable debug mode | `False` | ❌ |
| `LOG_LEVEL` | Logging level | `INFO` | ❌ |

### Celery / Redis

| Variable | Description | Default | Required |
|----------|-------------|---------|----------|
| `REDIS_URL` | Redis connection string | `redis://localhost:6379/0` | ❌ |
| `USE_CELERY` | Enable Celery task queue | `false` | ❌ |
| `FLOWER_URL` | Flower dashboard URL | `http://localhost:5555` | ❌ |
| `FLOWER_PASSWORD` | Flower authentication password | `changeme` | ❌ |

### Sentry Error Tracking

| Variable | Description | Default | Required |
|----------|-------------|---------|----------|
| `SENTRY_DSN` | Sentry DSN (leave empty to disable) | - | ❌ |
| `SENTRY_ENVIRONMENT` | Environment name | `development` | ❌ |
| `SENTRY_TRACES_SAMPLE_RATE` | Performance tracing rate (0.0-1.0) | `0.1` | ❌ |

### Cloudflare R2 Storage

| Variable | Description | Default | Required |
|----------|-------------|---------|----------|
| `STORAGE_BACKEND` | Storage backend (`local` or `r2`) | `local` | ❌ |
| `R2_ACCOUNT_ID` | Cloudflare account ID | - | ❌ (if r2) |
| `R2_ACCESS_KEY_ID` | R2 access key | - | ❌ (if r2) |
| `R2_SECRET_ACCESS_KEY` | R2 secret key | - | ❌ (if r2) |
| `R2_BUCKET_NAME` | R2 bucket name | `orion-media` | ❌ |
| `R2_PUBLIC_URL` | Custom public URL for R2 | - | ❌ |

### CloudFlare CDN

| Variable | Description | Default | Required |
|----------|-------------|---------|----------|
| `CLOUDFLARE_ENABLED` | Enable CloudFlare header handling | `false` | ❌ |

### Stripe Billing

| Variable | Description | Default | Required |
|----------|-------------|---------|----------|
| `STRIPE_SECRET_KEY` | Stripe secret key | - | ❌ |
| `STRIPE_PUBLISHABLE_KEY` | Stripe publishable key | - | ❌ |
| `STRIPE_WEBHOOK_SECRET` | Stripe webhook secret | - | ❌ |

## Troubleshooting

### Common Issues

#### Database Connection Issues
```bash
# Check if PostgreSQL is running
pg_isready -h localhost -p 5432

# Check database connectivity
python -c "from app.core.database import engine; engine.connect()"
```

#### Port Already in Use
```bash
# Find process using port 8000
lsof -i :8000

# Kill the process
kill -9 <PID>
```

#### Permission Issues
```bash
# Fix file permissions
chmod +x scripts/*.py

# Fix virtual environment permissions
chmod -R 755 venv/
```

### Getting Help

If you encounter issues:

1. Check the [Troubleshooting Guide](../development/troubleshooting.md)
2. Review application logs: `docker-compose logs api`
3. Open an [issue on GitHub](https://github.com/yourusername/letzshop-import/issues)

## Next Steps

- **[Quick Start Guide](quickstart.md)** - Get familiar with basic operations
- **[Configuration Guide](configuration.md)** - Detailed configuration options
- **[API Documentation](../api/index.md)** - Explore the API endpoints
