4.1 KiB
4.1 KiB
گروه ساختمانی آرامش — پروژه کامل (فرانتاند + بکاند)
مونوریپوی سایت گروه ساختمانی آرامش شامل:
frontend/— سایت React + Vite + Tailwind (همه محتوا از API خوانده میشود)backend/— بکاند FastAPI + SQLAlchemy 2 + PostgreSQL + JWT
ساختار
├── frontend/ # سایت React
│ ├── src/ # کد منبع (api.tsx = لایه اتصال به بکاند)
│ ├── Dockerfile # بیلد Node + سرو با nginx
│ └── nginx.conf # پروکسی /api به بکاند
├── backend/ # بکاند FastAPI
│ ├── app/ # کد منبع
│ ├── requirements.txt
│ ├── Dockerfile
│ └── .env.example
└── docker-compose.yml # اجرای کامل با یک دستور
اجرا با Docker (سادهترین راه)
docker compose up --build
- سایت: http://localhost:5173
- مستندات API: http://localhost:8000/docs
- دیتابیس PostgreSQL در کانتینر جدا (دادهها در volume ذخیره میشوند)
- بکاند هنگام شروع، خودش جداول و دادههای اولیه سایت را seed میکند
- nginx درخواستهای
/apiرا خودش به بکاند پروکسی میکند — نیازی به تنظیم CORS نیست
اجرای محلی (توسعه)
بکاند
cd backend
python -m venv .venv
.venv\Scripts\activate # ویندوز — در لینوکس: source .venv/bin/activate
pip install -r requirements.txt
# فایل .env از روی .env.example بسازید و DATABASE_URL را تنظیم کنید
python -m app.seed # ساخت جداول + محتوای اولیه
uvicorn app.main:app --reload
فرانتاند
cd frontend
npm install
npm run dev # http://localhost:5173
آدرس بکاند در frontend/src/config.ts از VITE_API_URL خوانده میشود؛
اگر تنظیم نشود پیشفرض http://localhost:8000 است.
امکانات بکاند
- API عمومی: برند، خدمات، پروژهها، مقالات، نظرات، سوالات متداول، تیم، تایملاین، آمار و...
- فرم تماس
POST /api/contactو خبرنامهPOST /api/newsletter - پنل مدیریت با JWT: ورود
POST /api/auth/login(پیشفرض:admin/aramesh123) و سپس CRUD کامل همه محتواها در/api/admin/... - همه محتوا در یک درخواست:
GET /api/site
در محیط واقعی حتماً
SECRET_KEYوADMIN_PASSWORDرا تغییر دهید.
نکات امنیتی
- فایل
.envهرگز commit نمیشود (در.gitignoreاست) - رمز عبور ادمین با bcrypt هش میشود
- توکنهای JWT امضا دارند و مدت اعتبارشان قابل تنظیم است
تغییرات اخیر
بهبود سرعت (کامیت e0ebae4)
- حذف کامل وابستگیهای خارجی: همه عکسهای سایت بهصورت محلی در
frontend/public/images/قرار گرفتند (بدون وابستگی به سرورهای خارجی مثل postimg و housedesign) - حذف فونتهای خارجی (Google Fonts و fontcdn که رندر صفحه را قفل میکردند) — استفاده از فونت سیستمی سریع
- favicon واقعی اضافه شد (قبلاً خراب بود)
- کش ۳۰ روزه برای تصاویر و فایلهای استاتیک در nginx
- نتیجه: صفحهها در چند میلیثانیه لود میشوند و سایت هیچ درخواست خارجی ندارد
اگر نسخه قبلی سایت را اجرا کردهاید، برای دریافت نسخه جدید یک بار
docker compose down -vو سپسdocker compose up --build -dرا اجرا کنید.