From c8003a2e67fb0ca22e7a9f195b6c559ba8979752 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 30 Jul 2025 14:46:02 +0800 Subject: [PATCH] perf: Enviroment config --- .env.example | 15 ---------- backend/common/core/config.py | 55 +---------------------------------- backend/main.py | 4 --- 3 files changed, 1 insertion(+), 73 deletions(-) diff --git a/.env.example b/.env.example index aa73850c..894c3538 100644 --- a/.env.example +++ b/.env.example @@ -1,16 +1,7 @@ - -# Before running, please copy .env.example to .env -DOMAIN=localhost -FRONTEND_HOST=http://localhost:5173 -ENVIRONMENT=local PROJECT_NAME="SQLBot" -STACK_NAME=SQLBot - # Backend BACKEND_CORS_ORIGINS="http://localhost,http://localhost:5173,https://localhost,https://localhost:5173" SECRET_KEY=y5txe1mRmS_JpOrUzFzHEu-kIQn3lf7ll0AOv9DQh0s -FIRST_SUPERUSER=admin@example.com -FIRST_SUPERUSER_PASSWORD=123456 # Change this to your pwd TOKEN_KEY="X-SQLBOT-TOKEN" DEFAULT_PWD="SQLBot@123456" @@ -31,12 +22,6 @@ POSTGRES_DB=sqlbot POSTGRES_USER=root POSTGRES_PASSWORD=132456 # Change this to your pwd -SENTRY_DSN= - -# Configure these with your own Docker registry images -DOCKER_IMAGE_BACKEND=backend -DOCKER_IMAGE_FRONTEND=frontend - MCP_IMAGE_PATH=/opt/sqlbot/images MCP_IMAGE_HOST=http://localhost:3000 SERVER_IMAGE_HOST=https://sqlbot.fit2cloud.cn/images/ diff --git a/backend/common/core/config.py b/backend/common/core/config.py index 482f4d61..5d16c61a 100644 --- a/backend/common/core/config.py +++ b/backend/common/core/config.py @@ -1,15 +1,11 @@ import secrets -import warnings from typing import Annotated, Any, Literal from pydantic import ( AnyUrl, BeforeValidator, - EmailStr, - HttpUrl, PostgresDsn, computed_field, - model_validator, ) from pydantic_core import MultiHostUrl from pydantic_settings import BaseSettings, SettingsConfigDict @@ -31,12 +27,12 @@ class Settings(BaseSettings): env_ignore_empty=True, extra="ignore", ) + PROJECT_NAME: str = "SQLBot" API_V1_STR: str = "/api/v1" SECRET_KEY: str = secrets.token_urlsafe(32) # 60 minutes * 24 hours * 8 days = 8 days ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8 FRONTEND_HOST: str = "http://localhost:5173" - ENVIRONMENT: Literal["local", "staging", "production"] = "local" BACKEND_CORS_ORIGINS: Annotated[ list[AnyUrl] | str, BeforeValidator(parse_cors) @@ -49,8 +45,6 @@ class Settings(BaseSettings): self.FRONTEND_HOST ] - PROJECT_NAME: str - SENTRY_DSN: HttpUrl | None = None POSTGRES_SERVER: str POSTGRES_PORT: int = 5432 POSTGRES_USER: str @@ -81,55 +75,8 @@ class Settings(BaseSettings): path=self.POSTGRES_DB, ) - SMTP_TLS: bool = True - SMTP_SSL: bool = False - SMTP_PORT: int = 587 - SMTP_HOST: str | None = None - SMTP_USER: str | None = None - SMTP_PASSWORD: str | None = None - EMAILS_FROM_EMAIL: EmailStr | None = None - EMAILS_FROM_NAME: EmailStr | None = None MCP_IMAGE_PATH: str MCP_IMAGE_HOST: str SERVER_IMAGE_HOST: str - @model_validator(mode="after") - def _set_default_emails_from(self) -> Self: - if not self.EMAILS_FROM_NAME: - self.EMAILS_FROM_NAME = self.PROJECT_NAME - return self - - EMAIL_RESET_TOKEN_EXPIRE_HOURS: int = 48 - - @computed_field # type: ignore[prop-decorator] - @property - def emails_enabled(self) -> bool: - return bool(self.SMTP_HOST and self.EMAILS_FROM_EMAIL) - - EMAIL_TEST_USER: EmailStr = "test@example.com" - FIRST_SUPERUSER: EmailStr - FIRST_SUPERUSER_PASSWORD: str - - def _check_default_secret(self, var_name: str, value: str | None) -> None: - if value == "changethis": - message = ( - f'The value of {var_name} is "changethis", ' - "for security, please change it, at least for deployments." - ) - if self.ENVIRONMENT == "local": - warnings.warn(message, stacklevel=1) - else: - raise ValueError(message) - - @model_validator(mode="after") - def _enforce_non_default_secrets(self) -> Self: - self._check_default_secret("SECRET_KEY", self.SECRET_KEY) - self._check_default_secret("POSTGRES_PASSWORD", self.POSTGRES_PASSWORD) - self._check_default_secret( - "FIRST_SUPERUSER_PASSWORD", self.FIRST_SUPERUSER_PASSWORD - ) - - return self - - settings = Settings() # type: ignore diff --git a/backend/main.py b/backend/main.py index 9024658c..2a41133e 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,5 +1,4 @@ from fastapi.concurrency import asynccontextmanager -import sentry_sdk from fastapi import FastAPI from fastapi.routing import APIRoute from starlette.middleware.cors import CORSMiddleware @@ -38,9 +37,6 @@ def custom_generate_unique_id(route: APIRoute) -> str: return f"{tag}-{route.name}" -if settings.SENTRY_DSN and settings.ENVIRONMENT != "local": - sentry_sdk.init(dsn=str(settings.SENTRY_DSN), enable_tracing=True) - app = FastAPI( title=settings.PROJECT_NAME, openapi_url=f"{settings.API_V1_STR}/openapi.json",