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
PaddleOCR
EasyOCR
Mistral AI
Sample Configuration
Development
Production
Docker
# 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
.env File
System Environment
Docker Compose
Kubernetes
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. Set environment variables at the system level: # Linux/macOS
export REDIS_URL = redis :// localhost : 6379 / 0
export DEBUG = false
# Windows
set REDIS_URL=redis://localhost:6379/0
set DEBUG= false
version : '3.8'
services :
doc-converter :
image : doc-converter:latest
environment :
- REDIS_URL=redis://redis:6379/0
- DEBUG=false
- API_HOST=0.0.0.0
- API_PORT=8000
env_file :
- .env
depends_on :
- redis
redis :
image : redis:7-alpine
ports :
- "6379:6379"
apiVersion : v1
kind : ConfigMap
metadata :
name : doc-converter-config
data :
APP_NAME : "doc-converter"
APP_ENV : "production"
DEBUG : "false"
API_HOST : "0.0.0.0"
API_PORT : "8000"
---
apiVersion : v1
kind : Secret
metadata :
name : doc-converter-secrets
type : Opaque
data :
REDIS_URL : cmVkaXM6Ly9yZWRpczotNjM3OS8w # base64 encoded
SECRET_KEY : eW91ci1zZWNyZXQta2V5 # base64 encoded
MISTRAL_API_KEY : eW91ci1hcGkta2V5 # base64 encoded
---
apiVersion : apps/v1
kind : Deployment
metadata :
name : doc-converter
spec :
template :
spec :
containers :
- name : doc-converter
image : doc-converter:latest
envFrom :
- configMapRef :
name : doc-converter-config
- secretRef :
name : doc-converter-secrets
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
Use Environment-Specific Files
# Development
.env.development
# Staging
.env.staging
# Production
.env.production
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()
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
Storage Permission Issues
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