بکاند آرامش پلازا (FastAPI + PostgreSQL)
این بکاند برای سایت آرامش پلازا ساخته شده و شامل:
- API کامل برای مدیریت محتوا: پروژهها، مقالات، خدمات، تیم، نظرات مشتریان، تایملاین، آمار، سوالات متداول، اطلاعات برند
- فرم تماس (ذخیره در دیتابیس)
- فرم خبرنامه (ذخیره در دیتابیس)
- ورود ادمین با JWT برای مدیریت محتوا (ایجاد/ویرایش/حذف)
- مستندات خودکار API (Swagger) روی آدرس
/docs
قبلاً همهی این محتوا داخل فایل src/data/site.ts توی فرانتاند بهصورت ثابت نوشته شده بود. با این بکاند، همون محتوا از دیتابیس میاد و میتونی بدون نیاز به دیپلوی دوبارهی فرانت، محتوا رو تغییر بدی.
پیشنیازها
روی سیستم خودت باید این دو تا نصب باشن:
- Python 3.11 یا بالاتر — از python.org دانلود کن
- PostgreSQL — از postgresql.org دانلود کن (موقع نصب، یک رمز عبور برای کاربر
postgresازت میپرسه؛ یادت بمونه)
برای چک کردن نصب بودنشون:
python --version
psql --version
قدم ۱: ساخت دیتابیس
بعد از نصب PostgreSQL، یک ترمینال باز کن و وارد psql شو:
psql -U postgres
(رمزی که موقع نصب گذاشتی رو وارد کن). حالا داخل psql این دستورها رو بزن:
CREATE USER aramesh_user WITH PASSWORD 'یک-رمز-قوی-انتخاب-کن';
CREATE DATABASE aramesh_db OWNER aramesh_user;
\q
قدم ۲: نصب پروژه
توی پوشهی این پروژه (همونجایی که این فایل README.md هست) یک ترمینال باز کن:
# ساخت محیط مجازی پایتون (اختیاری ولی توصیهشده)
python -m venv venv
# فعالسازی محیط مجازی
# ویندوز:
venv\Scripts\activate
# مک/لینوکس:
source venv/bin/activate
# نصب کتابخانهها
pip install -r requirements.txt
قدم ۳: تنظیم فایل .env
فایل .env.example رو کپی کن و اسمش رو بذار .env:
# ویندوز (Command Prompt):
copy .env.example .env
# مک/لینوکس:
cp .env.example .env
حالا فایل .env رو با یک ادیتور متنی (مثل Notepad یا VS Code) باز کن و این خط رو با اطلاعات واقعی خودت پر کن:
DATABASE_URL=postgresql://aramesh_user:همون-رمزی-که-انتخاب-کردی@localhost:5432/aramesh_db
خط SECRET_KEY رو هم به یک رشتهی رندوم و طولانی تغییر بده (هر متن دلخواه طولانی کافیه، برای پروداکشن بهتره واقعاً رندوم باشه).
قدم ۴: ساخت جدولهای دیتابیس (Migration)
alembic upgrade head
این دستور همهی جدولهای لازم (پروژهها، مقالات، تماسها و...) رو توی دیتابیست میسازه.
قدم ۵: پر کردن دیتابیس با محتوای فعلی سایت
python scripts/seed_data.py
این اسکریپت همون محتوایی که الان توی site.ts هست (پروژهها، مقالات، تیم و...) رو توی دیتابیس میریزه تا سایت خالی نمونه.
قدم ۶: ساخت اکانت ادمین
python scripts/create_admin.py
یک نام کاربری و رمز عبور وارد کن. با همین اکانت وارد پنل مدیریت میشی (بعداً وقتی پنل ادمین رو هم بسازیم).
قدم ۷: اجرای سرور
uvicorn app.main:app --reload
اگه همه چیز درست باشه، پیام Application startup complete رو میبینی. حالا:
- API روی آدرس http://localhost:8000 در دسترسه
- مستندات تعاملی (میتونی همونجا API رو تست کنی) روی http://localhost:8000/docs
لیست اندپوینتهای اصلی
| بخش | آدرس | توضیح |
|---|---|---|
| پروژهها | GET /api/projects |
لیست همه پروژهها |
| پروژهها | GET /api/projects/{slug} |
جزئیات یک پروژه |
| مقالات | GET /api/articles |
لیست همه مقالات |
| مقالات | GET /api/articles/{slug} |
جزئیات یک مقاله |
| خدمات | GET /api/services |
لیست خدمات |
| تیم | GET /api/team |
اعضای تیم |
| نظرات مشتریان | GET /api/testimonials |
نظرات |
| تایملاین | GET /api/timeline |
تاریخچه شرکت |
| چرا ما | GET /api/why-us |
نکات "چرا آرامش پلازا" |
| آمار | GET /api/stats |
آمار صفحه اصلی |
| سوالات متداول | GET /api/faqs |
لیست FAQ |
| برند | GET /api/brand |
اطلاعات تماس/لوگو/آدرس |
| تماس | POST /api/contact |
ثبت فرم تماس (عمومی) |
| خبرنامه | POST /api/newsletter |
عضویت در خبرنامه (عمومی) |
| ورود ادمین | POST /api/auth/login |
گرفتن توکن JWT |
تمام درخواستهای GET روی این منابع عمومی هستن (فرانتاند بدون نیاز به ورود میتونه بخونتشون).
تمام درخواستهای POST / PUT / DELETE (بهجز فرم تماس و خبرنامه) نیاز به توکن ادمین دارن — یعنی باید هدر زیر رو بفرستی:
Authorization: Bearer <توکنی-که-از-لاگین-گرفتی>
اتصال فرانتاند به این بکاند
فرانتاند فعلی (src/data/site.ts) دادهها رو بهصورت ثابت داره. برای اتصال به این بکاند باید:
- بهجای import کردن از
site.ts، هر کامپوننت دادههاش رو باfetchیاaxiosاز این آدرسها بگیره (مثلاًfetch('http://localhost:8000/api/projects')) - فرم
ContactSection.tsxوNewsletter.tsxبهجای فقط تغییر state داخلی، باید یک درخواستPOSTبه/api/contactو/api/newsletterبفرستن
اگه بخوای، توی یک مرحلهی بعدی میتونم دقیقاً همین تغییرات رو توی کدهای فرانتاندت اعمال کنم تا کامل به این بکاند وصل بشه.
دیپلوی (وقتی آمادهی انتشار شدی)
گزینههای ساده برای هاست این بکاند:
- Railway یا Render: خیلی راحت از روی گیتهاب دیپلوی میکنن و PostgreSQL هم بهت میدن
- سرور شخصی با Docker یا مستقیم با
uvicorn/gunicorn
نکته مهم امنیتی: قبل از دیپلوی روی سرور واقعی، حتماً:
- یک
SECRET_KEYرندوم و قوی بذار (نه همون مقدار پیشفرض) - آدرس دقیق دامنهی فرانتاندت (مثلاً
https://aramesh-six.vercel.app) رو تویCORS_ORIGINSبذار - رمز عبور دیتابیس رو قوی انتخاب کن