Migrate to Docker Compose with PostgreSQL
- Created docker-compose.yml with 4 services: - postgres: PostgreSQL 16 database with persistent volume - redis: Redis 7 message broker - app: Flask web application (port 5000) - celery: Celery worker for async downloads - Created Dockerfile with Python 3.14, FFmpeg, and uv - Added psycopg2-binary dependency for PostgreSQL driver - Updated database.py to use DATABASE_URL environment variable - Supports PostgreSQL in production - Falls back to SQLite for local development - Updated celery_app.py to use environment variables: - CELERY_BROKER_URL and CELERY_RESULT_BACKEND - Created .env.example with all configuration variables - Created .dockerignore to optimize Docker builds - Updated .gitignore to exclude .env and Docker files - Updated CLAUDE.md with comprehensive Docker documentation: - Quick start with docker-compose commands - Environment variable configuration - Local development setup instructions - Service architecture overview All services have health checks and automatic restart configured. Start entire stack with: docker-compose up 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
22
database.py
22
database.py
@@ -1,5 +1,6 @@
|
||||
"""Database configuration and session management."""
|
||||
|
||||
import os
|
||||
from contextlib import contextmanager
|
||||
from typing import Generator
|
||||
|
||||
@@ -9,15 +10,20 @@ from sqlalchemy.orm import sessionmaker, Session
|
||||
from models import Base
|
||||
|
||||
|
||||
# Database configuration
|
||||
DATABASE_URL = "sqlite:///yottob.db"
|
||||
# Database configuration from environment variable
|
||||
# Falls back to SQLite for local development if DATABASE_URL not set
|
||||
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///yottob.db")
|
||||
|
||||
# Create engine
|
||||
engine = create_engine(
|
||||
DATABASE_URL,
|
||||
echo=False, # Set to True for SQL query logging
|
||||
connect_args={"check_same_thread": False} # Needed for SQLite
|
||||
)
|
||||
# Create engine with appropriate configuration
|
||||
engine_kwargs = {
|
||||
"echo": False, # Set to True for SQL query logging
|
||||
}
|
||||
|
||||
# SQLite-specific configuration
|
||||
if DATABASE_URL.startswith("sqlite"):
|
||||
engine_kwargs["connect_args"] = {"check_same_thread": False}
|
||||
|
||||
engine = create_engine(DATABASE_URL, **engine_kwargs)
|
||||
|
||||
# Session factory
|
||||
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||
|
||||
Reference in New Issue
Block a user