- گیت ورود Traefik (Basic Auth) روی همه مسیرها: سایت، API، تصاویر و چت — بدون رمز فقط ۴۰۱ - لایه دوم noindex: هدر X-Robots-Tag روی همه پاسخها + robots.txt مسدودکننده + نقشه سایت خالی - اسکریپت scripts/preview-mode.sh on|off|status — ساخت خودکار نام کاربری/رمز و هماهنگکردن .env - دو دامنه (DOMAIN + DOMAIN_ALIAS) با گواهی TLS و ریدایرکت ۳۰۱ دامنه دوم به اصلی در زمان انتشار - اسکیمای FAQPage در پوسته سئوی سمت سرور (فارسی و انگلیسی) برای خزندههای بدون جاوااسکریپت - مستندسازی جریان پیشنمایش و چکلیست انتشار در README و .env.example
42 lines
1.9 KiB
Python
42 lines
1.9 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"
|
|
media_max_upload_mb: int = 10
|
|
|
|
# نشانی کامل سایت (مثل 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()
|