43 lines
2.1 KiB
Python
43 lines
2.1 KiB
Python
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
"""تنظیمات برنامه — از متغیرهای محیطی یا فایل .env خوانده میشود."""
|
|
|
|
model_config = SettingsConfigDict(
|
|
env_file=".env",
|
|
env_file_encoding="utf-8",
|
|
extra="ignore",
|
|
)
|
|
|
|
database_url: str = "postgresql+psycopg://postgres:postgres@localhost:5432/arameshplaza_api"
|
|
secret_key: str = "dev-secret-change-me-in-production"
|
|
algorithm: str = "HS256"
|
|
# ۸ ساعت — توکن stateless است و امکان ابطال ندارد؛ عمر کوتاهتر ریسک نشت را کم میکند
|
|
access_token_expire_minutes: int = 480
|
|
cors_origins: list[str] = ["*"]
|
|
admin_username: str = "admin"
|
|
admin_password: str = "aramesh123"
|
|
|
|
# Object Storage (MinIO / هر S3 سازگار) برای آپلود تصاویر
|
|
s3_endpoint: str = "http://localhost:9000"
|
|
s3_access_key: str = "aramesh"
|
|
s3_secret_key: str = "aramesh-minio-secret"
|
|
s3_bucket: str = "aramesh-media"
|
|
# پیشوند عمومی مسیر تصاویر — Traefik آن را به باکت پروکسی میکند
|
|
media_public_base: str = "/media"
|
|
# رندرهای معماری حجیماند — لبه (Traefik api-bodylimit) باید همیشه بزرگتر از این باشد
|
|
media_max_upload_mb: int = 25
|
|
|
|
# نشانی کامل سایت (مثل https://aramesh.example) — برای sitemap و آدرس مطلق OG
|
|
site_url: str = ""
|
|
# مسیر بیلد فرانتاند (شامل index.html) — برای سرو HTML با متای سئو در صفحات جزئیات
|
|
frontend_dist: str = "../frontend/dist"
|
|
# پیشنمایش خصوصی: سایت روی اینترنت است اما نه عمومی و نه ایندکسشدنی.
|
|
# گیت اصلی ورود در Traefik است (Basic Auth)؛ این پرچم لایه دوم است:
|
|
# هدر noindex روی همه پاسخها + robots.txt مسدودکننده.
|
|
preview_mode: bool = False
|
|
|
|
|
|
settings = Settings()
|