اولین نسخه بکاند آرامش پلازا
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
# بکاند آرامش پلازا (FastAPI + PostgreSQL)
|
||||
|
||||
این بکاند برای سایت **آرامش پلازا** ساخته شده و شامل:
|
||||
- API کامل برای مدیریت محتوا: پروژهها، مقالات، خدمات، تیم، نظرات مشتریان، تایملاین، آمار، سوالات متداول، اطلاعات برند
|
||||
- فرم تماس (ذخیره در دیتابیس)
|
||||
- فرم خبرنامه (ذخیره در دیتابیس)
|
||||
- ورود ادمین با JWT برای مدیریت محتوا (ایجاد/ویرایش/حذف)
|
||||
- مستندات خودکار API (Swagger) روی آدرس `/docs`
|
||||
|
||||
قبلاً همهی این محتوا داخل فایل `src/data/site.ts` توی فرانتاند بهصورت ثابت نوشته شده بود. با این بکاند، همون محتوا از دیتابیس میاد و میتونی بدون نیاز به دیپلوی دوبارهی فرانت، محتوا رو تغییر بدی.
|
||||
|
||||
---
|
||||
|
||||
## پیشنیازها
|
||||
|
||||
روی سیستم خودت باید این دو تا نصب باشن:
|
||||
1. **Python 3.11 یا بالاتر** — از [python.org](https://www.python.org/downloads/) دانلود کن
|
||||
2. **PostgreSQL** — از [postgresql.org](https://www.postgresql.org/download/) دانلود کن (موقع نصب، یک رمز عبور برای کاربر `postgres` ازت میپرسه؛ یادت بمونه)
|
||||
|
||||
برای چک کردن نصب بودنشون:
|
||||
```bash
|
||||
python --version
|
||||
psql --version
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## قدم ۱: ساخت دیتابیس
|
||||
|
||||
بعد از نصب PostgreSQL، یک ترمینال باز کن و وارد psql شو:
|
||||
|
||||
```bash
|
||||
psql -U postgres
|
||||
```
|
||||
|
||||
(رمزی که موقع نصب گذاشتی رو وارد کن). حالا داخل psql این دستورها رو بزن:
|
||||
|
||||
```sql
|
||||
CREATE USER aramesh_user WITH PASSWORD 'یک-رمز-قوی-انتخاب-کن';
|
||||
CREATE DATABASE aramesh_db OWNER aramesh_user;
|
||||
\q
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## قدم ۲: نصب پروژه
|
||||
|
||||
توی پوشهی این پروژه (همونجایی که این فایل `README.md` هست) یک ترمینال باز کن:
|
||||
|
||||
```bash
|
||||
# ساخت محیط مجازی پایتون (اختیاری ولی توصیهشده)
|
||||
python -m venv venv
|
||||
|
||||
# فعالسازی محیط مجازی
|
||||
# ویندوز:
|
||||
venv\Scripts\activate
|
||||
# مک/لینوکس:
|
||||
source venv/bin/activate
|
||||
|
||||
# نصب کتابخانهها
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## قدم ۳: تنظیم فایل `.env`
|
||||
|
||||
فایل `.env.example` رو کپی کن و اسمش رو بذار `.env`:
|
||||
|
||||
```bash
|
||||
# ویندوز (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)
|
||||
|
||||
```bash
|
||||
alembic upgrade head
|
||||
```
|
||||
|
||||
این دستور همهی جدولهای لازم (پروژهها، مقالات، تماسها و...) رو توی دیتابیست میسازه.
|
||||
|
||||
---
|
||||
|
||||
## قدم ۵: پر کردن دیتابیس با محتوای فعلی سایت
|
||||
|
||||
```bash
|
||||
python scripts/seed_data.py
|
||||
```
|
||||
|
||||
این اسکریپت همون محتوایی که الان توی `site.ts` هست (پروژهها، مقالات، تیم و...) رو توی دیتابیس میریزه تا سایت خالی نمونه.
|
||||
|
||||
---
|
||||
|
||||
## قدم ۶: ساخت اکانت ادمین
|
||||
|
||||
```bash
|
||||
python scripts/create_admin.py
|
||||
```
|
||||
|
||||
یک نام کاربری و رمز عبور وارد کن. با همین اکانت وارد پنل مدیریت میشی (بعداً وقتی پنل ادمین رو هم بسازیم).
|
||||
|
||||
---
|
||||
|
||||
## قدم ۷: اجرای سرور
|
||||
|
||||
```bash
|
||||
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`) دادهها رو بهصورت ثابت داره. برای اتصال به این بکاند باید:
|
||||
1. بهجای import کردن از `site.ts`، هر کامپوننت دادههاش رو با `fetch` یا `axios` از این آدرسها بگیره (مثلاً `fetch('http://localhost:8000/api/projects')`)
|
||||
2. فرم `ContactSection.tsx` و `Newsletter.tsx` بهجای فقط تغییر state داخلی، باید یک درخواست `POST` به `/api/contact` و `/api/newsletter` بفرستن
|
||||
|
||||
اگه بخوای، توی یک مرحلهی بعدی میتونم دقیقاً همین تغییرات رو توی کدهای فرانتاندت اعمال کنم تا کامل به این بکاند وصل بشه.
|
||||
|
||||
---
|
||||
|
||||
## دیپلوی (وقتی آمادهی انتشار شدی)
|
||||
|
||||
گزینههای ساده برای هاست این بکاند:
|
||||
- **Railway** یا **Render**: خیلی راحت از روی گیتهاب دیپلوی میکنن و PostgreSQL هم بهت میدن
|
||||
- سرور شخصی با Docker یا مستقیم با `uvicorn`/`gunicorn`
|
||||
|
||||
نکته مهم امنیتی: قبل از دیپلوی روی سرور واقعی، حتماً:
|
||||
1. یک `SECRET_KEY` رندوم و قوی بذار (نه همون مقدار پیشفرض)
|
||||
2. آدرس دقیق دامنهی فرانتاندت (مثلاً `https://aramesh-six.vercel.app`) رو توی `CORS_ORIGINS` بذار
|
||||
3. رمز عبور دیتابیس رو قوی انتخاب کن
|
||||
Reference in New Issue
Block a user