تا وقتی کسی کلون/بیلد تازه میگیرد، همان تصاویر را داشته باشد:
- seed-media شامل هر ۱۹ فایل تصویری است که در دیتابیس با پیشوند /media ثبتاند
- minio-setup بعد از ساخت باکت، محتوای seed-media را با mc mirror در bucket
میگذارد — روی حجم موجود idempotent است و داده تازه را نمیخورد
- vite.config.ts دوباره /api و /media را به Traefik (پورت 5173) پروکسی میکند
- compose: بدون پورت مستقیم 8000/9000 — بکاند لوکال اینجا روی 8001 است و پورت 8000 متعلق به استک دیگر
- docker-compose.yml همه مقادیر محرمانه را با ${VAR:?} از .env میخواند — بدون .env استک بالا نمیآید
- docker-compose.prod.yml: ورودی 443 + ریدایرکت HTTP به HTTPS + گواهی Let's Encrypt و قواعد Host برای همه روترها
- healthcheck بکاند (api/health) و فرانت (wget) + سوار کردن frontend/dist در بکاند برای تزریق متا + روتر سئو (robots/sitemap/blog/projects) با اولویت 50
- سرویس mc با پروفایل tools + scripts/backup.sh (pg_dump + آینه MinIO با نگهداری ۱۴ روزه)
- .env.example ریشه + بروزرسانی READMEها
- 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، مهاجرت
خودکار مقالات قدیمی) + یادداشت بیلد هاست برای فرانتاند
- سرویس traefik:v3 روی پورت ۵۱۷۳ (پورت هاست) — تنها نقطه ورود استک:
/ → frontend (فایلهای استاتیک SPA)
/api → backend:8000
/media → MinIO:9000 با rewrite به باکت aramesh-media
مسیریابی با Docker labels در docker-compose.yml
- حذف کامل nginx: Caddy فقط فایلهای استاتیک را سرو میکند
(fallback به index.html برای SPA، کش یکساله immutable برای assets/)
- سرویس minio + minio-setup (ساخت خودکار باکت و دسترسی عمومی خواندن —
یکبار در اولین اجرا)؛ کنسول MinIO روی پورت ۹۰۰۱
- وابستگی backend به سلامت db و minio
- vite dev: پروکسی /api و /media به Traefik برای هممبدأ بودن در توسعه
- اتصال کامل فرانت به API: همه محتوای سایت (پروژهها، مقالات، خدمات، برند و...) از بکاند خوانده میشود (SiteProvider + useSite)
- فرم تماس و خبرنامه متصل به بکاند و تستشده در مرورگر
- ساختار مونوریپو: frontend/ + backend/
- Dockerfile برای هر دو بخش + docker-compose (PostgreSQL + FastAPI + nginx)
- nginx با پروکسی /api — بدون نیاز به CORS در حالت داکر
- README کامل فارسی