diff --git a/Dockerfile b/Dockerfile index cc0a56e..6964fcb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,4 +18,6 @@ RUN mkdir -p /app/data && chmod 777 /app/data EXPOSE 8000 # Lancer l'API et initialiser la DB au démarrage -CMD ["sh", "-c", "uvicorn api:app --host 0.0.0.0 --port 8000"] +# CMD ["sh", "-c", "uvicorn api:app --host 0.0.0.0 --port 8000"] + +CMD ["sh", "-c", "python init_db.py && uvicorn api:app --host 0.0.0.0 --port 8000"] \ No newline at end of file diff --git a/database/db_config.py b/database/db_config.py index b75826d..0f95ba1 100644 --- a/database/db_config.py +++ b/database/db_config.py @@ -1,6 +1,6 @@ import os from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker -from sqlalchemy.pool import StaticPool +from sqlalchemy.pool import NullPool import logging from database.models.generic_model import Base @@ -13,8 +13,7 @@ engine = create_async_engine( DATABASE_URL, echo=False, future=True, - connect_args={"check_same_thread": False}, - poolclass=StaticPool, + poolclass=NullPool, ) async_session_factory = async_sessionmaker( @@ -26,26 +25,27 @@ async_session_factory = async_sessionmaker( async def init_db(): + logger.info("Debut init_db") try: + logger.info("Tentative de connexion") async with engine.begin() as conn: + logger.info("Connexion etablie") await conn.run_sync(Base.metadata.create_all) + logger.info("create_all execute") - logger.info(" Base de données initialisée avec succès") - logger.info(f" Fichier DB: {DATABASE_URL}") + logger.info("Base de données initialisée avec succès") + logger.info(f"Fichier DB: {DATABASE_URL}") except Exception as e: - logger.error(f" Erreur initialisation DB: {e}") + logger.error(f"Erreur initialisation DB: {e}") raise async def get_session() -> AsyncSession: async with async_session_factory() as session: - try: - yield session - finally: - await session.close() + yield session async def close_db(): await engine.dispose() - logger.info(" Connexions DB fermées") + logger.info("Connexions DB fermées") diff --git a/init_db.py b/init_db.py index 89dd700..f5f7e27 100644 --- a/init_db.py +++ b/init_db.py @@ -7,42 +7,44 @@ sys.path.insert(0, str(Path(__file__).parent)) from database import init_db import logging -logging.basicConfig(level=logging.INFO) +logging.basicConfig( + level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" +) logger = logging.getLogger(__name__) async def main(): - print("\n" + "=" * 60) - print("Initialisation de la base de données Sage Dataven") + print("Initialisation de la base de données délocalisée") print("=" * 60 + "\n") try: - # Créer les tables + logger.info("Debut de l'initialisation") await init_db() + logger.info("Initialisation terminee") - print("\n Base de données créée avec succès!") - print(" Fichier: sage_dataven.db") + print("\nBase de données créée avec succès !") + print("Fichier: sage_dataven.db") print("\nTables créées:") - print(" ├─ email_logs (Journalisation emails)") - print(" ├─ signature_logs (Suivi signatures Universign)") - print(" ├─ workflow_logs (Transformations documents)") - print(" ├─ cache_metadata (Métadonnées cache)") - print(" └─ audit_logs (Journal d'audit)") + print(" |- email_logs (Journalisation emails)") + print(" |- signature_logs (Suivi signatures Universign)") + print(" |- workflow_logs (Transformations documents)") + print(" |- cache_metadata (Métadonnées cache)") + print(" |- audit_logs (Journal d'audit)") print("\nProchaines étapes:") - print(" 1. Configurer le fichier .env avec vos credentials") + print(" 1. Configurer le fichier .env avec les credentials") print(" 2. Lancer la gateway Windows sur la machine Sage") print(" 3. Lancer l'API VPS: uvicorn api:app --host 0.0.0.0 --port 8000") - print(" 4. Ou avec Docker: docker-compose up -d") - print(" 5. Tester: http://0.0.0.0:8000/docs") + print(" 4. Ou avec Docker : docker-compose up -d") + print(" 5. Tester: http://IP_DU_VPS:8000/docs") print("\n" + "=" * 60 + "\n") return True except Exception as e: - print(f"\n Erreur lors de l'initialisation: {e}") + print(f"\nErreur lors de l'initialisation: {e}") logger.exception("Détails de l'erreur:") return False