From 70cf9616c16c28fc934f72b61d7b38a5e79c1c76 Mon Sep 17 00:00:00 2001 From: MMD Date: Sun, 6 Sep 2026 23:33:28 +0330 Subject: [PATCH] =?UTF-8?q?=D8=A8=DB=8C=D9=84=D8=AF:=20=D8=A7=D9=86=D8=AA?= =?UTF-8?q?=D9=82=D8=A7=D9=84=20=D8=A8=DB=8C=D9=84=D8=AF=20=D9=81=D8=B1?= =?UTF-8?q?=D8=A7=D9=86=D8=AA=E2=80=8C=D8=A7=D9=86=D8=AF=20=D8=A8=D9=87=20?= =?UTF-8?q?=D9=87=D8=A7=D8=B3=D8=AA=20+=20=D9=BE=DB=8C=D8=B4=E2=80=8C?= =?UTF-8?q?=D9=81=D8=B1=D8=B6=20=D9=87=D9=85=E2=80=8C=D9=85=D8=A8=D8=AF?= =?UTF-8?q?=D8=A3=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile فرانت‌اند: npm ci داخل کانتینر بیلد به‌دلیل محدودیت شبکه (registry.npmjs.org از داخل VM داکر در دسترس نیست) غیرقابل‌اعتماد بود؛ ایمیج حالا فقط Caddy است و خروجی بیلد هاست (npm run build → dist/) را سرو می‌کند — بیلد ایمیج از چند دقیقه آویزان به چند ثانیه رسید - docker-compose.yml: حذف build args از سرویس frontend - config.ts: پیش‌فرض VITE_API_URL خالی است (درخواست هم‌مبدأ از طریق Traefik) — مقدار قبلی http://localhost:8000 میراث معماری قبل بود و بیلد هاست را خراب می‌کرد - README ریشه: بخش وبلاگ (ویرایشگر WYSIWYG، فرمت سند JSON، مهاجرت خودکار مقالات قدیمی) + یادداشت بیلد هاست برای فرانت‌اند --- README.md | 16 ++++++++++++++++ docker-compose.yml | 7 ++----- frontend/Dockerfile | 22 ++++------------------ frontend/src/config.ts | 6 +++--- 4 files changed, 25 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index c83e635..4dcd4cf 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,22 @@ npm run dev مدیریتی `401` برمی‌گردند) - تمام تغییرها بلافاصله در PostgreSQL ثبت می‌شوند — با Ctrl+F5 هم می‌مانند +## وبلاگ — نوشتن با ویرایشگر WYSIWYG + +مقالات با ویرایشگر غنی **TipTap** نوشته می‌شوند (همان تجربه Medium): + +- در حالت ویرایش، روی هر مقاله در صفحه وبلاگ دکمه ویرایش را بزنید — کشوی نوشتن باز می‌شود +- تیتر (H2/H3)، بولد/ایتالیک/زیرخط، لیست نقطه‌ای و شماره‌ای، نقل‌قول، لینک و واگرد +- **درج تصویر داخل متن**: دکمه تصویر، یا چسباندن/کشیدن تصویر داخل نوشته — فایل مستقیم + در MinIO ذخیره و در متن قرار می‌گیرد +- راست‌به‌چپ کامل با فونت و تم سایت +- ذخیره خودکار: هر مکث کوتاه در تایپ، تغییرها را ذخیره می‌کند؛ بستن کشو هم ذخیره می‌کند + +**فرمت ذخیره**: بدنه مقاله یک سند ساختاریافته TipTap (JSON) در PostgreSQL است — نه HTML خام. +صفحه مقاله آن را با رندر استاتیک TipTap به HTML تبدیل می‌کند، پس فقط تگ‌های شناخته‌شده +(پاراگراف، تیتر، لیست، نقل‌قول، تصویر، لینک) تولید می‌شوند. مقالات قدیمی (لیست پاراگراف) +در اولین اجرا به‌صورت خودکار به این فرمت تبدیل می‌شوند. + ## نکات امنیتی - فایل `.env` هرگز commit نمی‌شود (در `.gitignore` است) diff --git a/docker-compose.yml b/docker-compose.yml index ccec156..5de208b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -98,12 +98,9 @@ services: - traefik.http.routers.api.priority=100 - traefik.http.services.api.loadbalancer.server.port=8000 - # فقط سرو فایل‌های استاتیک SPA — همه مسیریابی‌ها روی Traefik است + # فقط سرو فایل‌های استاتیک SPA — بیلد روی هاست (npm run build) انجام شده است frontend: - build: - context: ./frontend - args: - VITE_API_URL: "" + build: ./frontend restart: unless-stopped depends_on: - backend diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 38973e8..496113a 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,24 +1,10 @@ -# ---------- مرحله ساخت ---------- -FROM node:22-alpine AS build +# ---------- فرانت‌اند فقط سرو می‌کند ---------- +# بیلد روی هاست انجام می‌شود (npm install && npm run build) و خروجی dist/ +# داخل ایمیج کپی می‌شود — شبکه کانتینر بیلد برای npm قابل‌اعتماد نیست. -WORKDIR /app - -COPY package.json package-lock.json ./ -RUN npm ci - -COPY . . - -# آدرس API در زمان بیلد؛ پیش‌فرض خالی یعنی درخواست‌های نسبی (/api) که Traefik مسیریابی می‌کند -ARG VITE_API_URL="" -ENV VITE_API_URL=$VITE_API_URL - -RUN npm run build - -# ---------- مرحله سرو ---------- -# Caddy فقط فایل‌های استاتیک SPA را سرو می‌کند؛ مسیریابی /api و /media روی Traefik است FROM caddy:2-alpine COPY Caddyfile /etc/caddy/Caddyfile -COPY --from=build /app/dist /srv +COPY dist /srv EXPOSE 80 diff --git a/frontend/src/config.ts b/frontend/src/config.ts index f6ba382..528d239 100644 --- a/frontend/src/config.ts +++ b/frontend/src/config.ts @@ -1,3 +1,3 @@ -// آدرس بک‌اند FastAPI — در محیط تولید مقدار VITE_API_URL را در فایل .env تنظیم کنید. -export const API_URL: string = - (import.meta.env.VITE_API_URL as string | undefined) ?? 'http://localhost:8000' +// آدرس بک‌اند — پیش‌فرض خالی یعنی درخواست‌های هم‌مبدأ (/api از طریق Traefik). +// فقط اگر بک‌اند روی مبدأ دیگری سرو می‌شود VITE_API_URL را تنظیم کنید. +export const API_URL: string = (import.meta.env.VITE_API_URL as string | undefined) ?? ''