diff --git a/.gitignore b/.gitignore index 3d383a0..84b392f 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ wheels/ # Virtual environments .venv -.env +.env* .ruff_cache *.sqlite diff --git a/Dockerfile b/Dockerfile index 535da61..a766795 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,6 +5,7 @@ WORKDIR /app ENV UV_COMPILE_BYTECODE=1 ADD pyproject.toml uv.lock . +RUN mkdir -p /app/data RUN uv sync --frozen --no-dev ADD /src . diff --git a/docker-compose.yml b/docker-compose.yml index 0d87cb3..8b731fb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,6 +6,18 @@ services: dockerfile: Dockerfile image: pjl-backend:1.0rc1 + env_file: + - .env.prod + + Environment: + DB_URL: /app/data/pjl.duckdb + DEFAULT_AVATAR_URL: https://api.dicebear.com/9.x/adventurer-neutral/svg?seed=Kingston + OMDB_API_KEY: ${OMDB_API_KEY} + STAGE: prod + + volumes: + - ./data:/app/data + # Host the FastAPI application on port 8000 ports: - "8000:8000" diff --git a/src/lib/database/database.py b/src/lib/database/database.py index c3bb514..fdfff7f 100644 --- a/src/lib/database/database.py +++ b/src/lib/database/database.py @@ -3,12 +3,14 @@ import duckdb import bcrypt from lib import settings +from lib.logger import logger @contextmanager def get_db(): try: - conn = duckdb.connect(database=settings.db_url) + logger.debug(f"Connecting to database {settings.db_url.absolute()}") + conn = duckdb.connect(database=settings.db_url.absolute()) yield conn finally: conn.close() @@ -22,10 +24,11 @@ def db_run(sql, values: tuple = None): def init_db(): if settings.db_url.exists(): + pass # TODO: Development feature. Remove this in production - from os import unlink + # from os import unlink - unlink(settings.db_url) + # unlink(settings.db_url) sql = "" with open("lib/database/database.sql") as f: sql = f.read() diff --git a/src/lib/settings.py b/src/lib/settings.py index e51c617..e84a6d3 100644 --- a/src/lib/settings.py +++ b/src/lib/settings.py @@ -4,15 +4,12 @@ from pathlib import Path class Settings(BaseSettings): - db_url: Path = Field(Path("pjl.duckdb"), env="DB_URL") + db_url: Path = Field(Path("pjl_default.duckdb"), env="DB_URL") default_avatar_url: str = Field( "https://api.dicebear.com/9.x/adventurer-neutral/svg?seed=Kingston", env="DEFAULT_AVATAR_URL", ) OMDB_API_KEY: str = Field(env="OMDB_API_KEY") - class Config: - env_file = ".env" - settings = Settings()