Add support for serving static files from DATA_FILES_DIR
All checks were successful
Build and Push Docker Images / changes (push) Successful in 4s
Build and Push Docker Images / build-backend (push) Successful in 53s
Build and Push Docker Images / build-frontend (push) Has been skipped

Introduce a new environment variable, `DATA_FILES_DIR`, for configuring static file storage. Updated `docker-compose` files to mount the host directory and propagate the variable. Implemented FastAPI `StaticFiles` to serve files from this directory under the `/files` route.
This commit is contained in:
2025-03-12 18:23:42 +01:00
parent 63dadb9429
commit 5ad886a53e
4 changed files with 14 additions and 1 deletions

View File

@@ -1,3 +1,5 @@
import os
from pydantic_settings import BaseSettings
from typing import Optional, List
@@ -6,6 +8,7 @@ class Settings(BaseSettings):
PROJECT_NAME: str = "EventSpace"
VERSION: str = "1.0.0"
API_V1_STR: str = "/api/v1"
DATA_FILES_DIR: str = os.getenv('DATA_FILES_DIR', 'data/')
# Database configuration
POSTGRES_USER: str = "postgres"
@@ -14,7 +17,6 @@ class Settings(BaseSettings):
POSTGRES_PORT: str = "5432"
POSTGRES_DB: str = "eventspace"
DATABASE_URL: Optional[str] = None
REFRESH_TOKEN_EXPIRE_DAYS: int = 60
db_pool_size: int = 20 # Default connection pool size
db_max_overflow: int = 50 # Maximum overflow connections
db_pool_timeout: int = 30 # Seconds to wait for a connection
@@ -26,6 +28,8 @@ class Settings(BaseSettings):
sql_echo_timing: bool = False # Log query execution times
slow_query_threshold: float = 0.5 # Log queries taking longer than this
REFRESH_TOKEN_EXPIRE_DAYS: int = 60
@property
def database_url(self) -> str:
"""

View File

@@ -4,6 +4,7 @@ from apscheduler.schedulers.asyncio import AsyncIOScheduler
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from app.api.router import api_router
from app.core.config import settings
@@ -46,3 +47,4 @@ async def root():
app.include_router(api_router, prefix=settings.API_V1_STR)
app.mount("/files", StaticFiles(directory=settings.DATA_FILES_DIR), name="static")

View File

@@ -26,6 +26,7 @@ services:
- ./backend:/app
- ./uploads:/app/uploads
- backend_dev_modules:/app/.venv
- ${HOST_DATA_FILES_DIR}:${DATA_FILES_DIR}
ports:
- "8000:8000"
env_file:
@@ -34,6 +35,8 @@ services:
- DATABASE_URL=${DATABASE_URL}
- SECRET_KEY=${SECRET_KEY}
- ENVIRONMENT=development
- DATA_FILES_DIR=${DATA_FILES_DIR}
- HOST_DATA_FILES_DIR=${HOST_DATA_FILES_DIR}
- DEBUG=true
- BACKEND_CORS_ORIGINS=${BACKEND_CORS_ORIGINS}
depends_on:

View File

@@ -26,6 +26,8 @@ services:
environment:
- DATABASE_URL=${DATABASE_URL}
- SECRET_KEY=${SECRET_KEY}
- DATA_FILES_DIR=${DATA_FILES_DIR}
- HOST_DATA_FILES_DIR=${HOST_DATA_FILES_DIR}
- ENVIRONMENT=production
- DEBUG=false
- BACKEND_CORS_ORIGINS=${BACKEND_CORS_ORIGINS}
@@ -35,6 +37,8 @@ services:
networks:
- app-network
restart: unless-stopped
volumes:
- ${HOST_DATA_FILES_DIR}:${DATA_FILES_DIR}
frontend:
build: