Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.grigori.in/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The Document Converter is configured using environment variables, making it easy to deploy across different environments without code changes.

Required Variables

Application Settings

Storage Configuration

OCR Provider Settings

Sample Configuration

# Application
APP_NAME=doc-converter-dev
APP_ENV=development
DEBUG=true
API_HOST=127.0.0.1
API_PORT=8000

# Redis
REDIS_URL=redis://localhost:6379/0

# Storage
UPLOAD_DIR=./uploads
OUTPUT_DIR=./outputs
MAX_FILE_SIZE=104857600
FILE_TTL_HOURS=24

# OCR - PaddleOCR
PADDLE_OCR_USE_GPU=false
PADDLE_OCR_LANG=en

# OCR - EasyOCR
EASY_OCR_USE_GPU=false
EASY_OCR_LANG=en

# OCR - Mistral AI (optional)
MISTRAL_API_KEY=your_api_key_here

Validation

import os

def validate_environment():
    required_vars = [
        'REDIS_URL',
    ]
    
    missing_vars = []
    for var in required_vars:
        if not os.getenv(var):
            missing_vars.append(var)
    
    if missing_vars:
        raise ValueError(f"Missing required environment variables: {', '.join(missing_vars)}")
    
    print("Environment validation passed")

# Run validation
validate_environment()
import redis
import os

def test_redis_connection():
    try:
        redis_url = os.getenv('REDIS_URL', 'redis://localhost:6379/0')
        client = redis.from_url(redis_url)
        client.ping()
        print("Redis connection successful")
        return True
    except Exception as e:
        print(f"Redis connection failed: {e}")
        return False

test_redis_connection()
import os
from pathlib import Path

def validate_storage_dirs():
    dirs = [
        os.getenv('UPLOAD_DIR', './uploads'),
        os.getenv('OUTPUT_DIR', './outputs'),
    ]
    
    for dir_path in dirs:
        path = Path(dir_path)
        try:
            path.mkdir(parents=True, exist_ok=True)
            # Test write permissions
            test_file = path / 'test.txt'
            test_file.write_text('test')
            test_file.unlink()
            print(f"Storage directory OK: {dir_path}")
        except Exception as e:
            print(f"Storage directory error: {dir_path} - {e}")

validate_storage_dirs()

Loading Configuration

Create a .env file in your project root:
# Copy from example
cp .env.example .env

# Edit with your values
nano .env
The application will automatically load variables from .env file.

Security Considerations

Never commit sensitive environment variables to version control. Use secure secret management systems in production.

Secret Management

  • Use proper secret management systems
  • Rotate secrets regularly
  • Limit access to sensitive variables
  • Monitor secret usage

Environment Isolation

  • Separate configs for each environment
  • Use different Redis instances
  • Implement proper access controls
  • Monitor environment changes

Best Practices

1

Use Environment-Specific Files

# Development
.env.development

# Staging
.env.staging

# Production
.env.production
2

Validate on Startup

# Add to your application startup
from src.core.config import settings

def validate_config():
    # Check required settings
    if not settings.redis_url:
        raise ValueError("REDIS_URL is required")
    
    # Test connections
    test_redis_connection()
    
    print("Configuration validated successfully")

validate_config()
3

Monitor Configuration

# Log configuration (without secrets)
import logging

def log_config():
    logging.info(f"App: {settings.app_name}")
    logging.info(f"Environment: {settings.app_env}")
    logging.info(f"Debug: {settings.debug}")
    logging.info(f"API Host: {settings.api_host}")
    logging.info(f"API Port: {settings.api_port}")
    # Don't log secrets!

log_config()

Troubleshooting

Symptoms: Default values being used instead of environment variablesSolutions:
  • Check file path and permissions
  • Verify variable names (case-sensitive)
  • Ensure no spaces around = in .env files
  • Check for UTF-8 encoding issues
Symptoms: redis.exceptions.ConnectionErrorSolutions:
  • Verify Redis URL format
  • Check if Redis server is running
  • Test network connectivity
  • Verify credentials and permissions
Symptoms: File upload/download errorsSolutions:
  • Check directory permissions
  • Verify disk space availability
  • Ensure directories exist
  • Test write permissions

Next Steps

OCR Configuration

Configure OCR providers for text extraction

Storage Setup

Configure file storage and persistence

Production Deployment

Deploy with proper configuration management

Monitoring

Monitor configuration and performance