from sqlalchemy import create_engine, Column, String, Integer, Text, Boolean, DateTime from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from datetime import datetime Base = declarative_base() class Container(Base): __tablename__ = "containers" id = Column(Integer, primary_key=True, index=True) container_id = Column(String, unique=True, index=True) # Docker container ID name = Column(String, unique=True, index=True) image = Column(String) status = Column(String) # running, stopped, etc. config_json = Column(Text) # Full config as JSON string created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) import os # Create engine at module level # Use /app/data for database storage (mounted volume) data_dir = '/app/data' os.makedirs(data_dir, exist_ok=True) db_path = os.path.join(data_dir, 'stronghold.db') engine = create_engine(f"sqlite:///{db_path}") Base.metadata.create_all(bind=engine) def get_db(): SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) db = SessionLocal() try: yield db finally: db.close()