Add database initialization for first superuser setup
All checks were successful
Build and Push Docker Images / changes (push) Successful in 5s
Build and Push Docker Images / build-backend (push) Successful in 51s
Build and Push Docker Images / build-frontend (push) Has been skipped

Introduced a script to create the initial superuser during app startup if none exists. Updated the entrypoint to call this script and added stricter logging for passlib. Adjusted .env.template for a stronger default superuser password.
This commit is contained in:
2025-03-04 18:54:00 +01:00
parent 67f1dfbd9d
commit a88ebd40a7
4 changed files with 59 additions and 2 deletions

View File

@@ -17,7 +17,7 @@ ENVIRONMENT=development
DEBUG=true
BACKEND_CORS_ORIGINS=["http://localhost:3000"]
FIRST_SUPERUSER_EMAIL=admin@example.com
FIRST_SUPERUSER_PASSWORD=admin123
FIRST_SUPERUSER_PASSWORD=Admin123
# Frontend settings
FRONTEND_PORT=3000

View File

@@ -1,4 +1,6 @@
# app/core/auth.py
import logging
logging.getLogger('passlib').setLevel(logging.ERROR)
from datetime import datetime, timedelta, timezone
from typing import Any, Dict, Optional, Union
import uuid

52
backend/app/init_db.py Normal file
View File

@@ -0,0 +1,52 @@
# app/core/init_db.py
import logging
from typing import Optional
from sqlalchemy.orm import Session
from app.core.config import settings
from app.crud.user import user as user_crud
from app.schemas.users import UserCreate
from app.core.database import engine
logger = logging.getLogger(__name__)
def init_db(db: Session) -> Optional[UserCreate]:
"""
Initialize database with first superuser if settings are configured and user doesn't exist.
"""
if not settings.FIRST_SUPERUSER_EMAIL or not settings.FIRST_SUPERUSER_PASSWORD:
logger.warning("First superuser credentials not configured in settings")
return None
try:
# Check if superuser already exists
existing_user = user_crud.get_by_email(
db, email=settings.FIRST_SUPERUSER_EMAIL
)
if existing_user:
logger.info("Superuser already exists, skipping creation")
return None
# Create superuser if doesn't exist
user_in = UserCreate(
email=settings.FIRST_SUPERUSER_EMAIL,
password=settings.FIRST_SUPERUSER_PASSWORD,
first_name="Admin", # Required by your schema
last_name="User", # Required by your schema
is_superuser=True
)
user = user_crud.create(db, obj_in=user_in)
logger.info(f"Created first superuser: {user.email}")
return user
except Exception as e:
logger.error(f"Error creating superuser: {e}")
raise
if __name__ == "__main__":
with Session(engine) as session:
try:
init_db(session)
finally:
session.close()

View File

@@ -4,5 +4,8 @@ echo "Starting Backend"
# Apply database migrations
alembic upgrade head
python app/init_db.py
# Execute the command passed to docker run
exec "$@"