
پیادهسازی SaaS با معماری (داکر) و پایپلاین CI/CD
- توسعه نرمافزار و آیتی
- زمان باقیمانده برای ارسال پیشنهاد
شرح کلی پروژه: من یک نرمافزار نود جیاس (Node.js) شامل بکاند و فرانتاند دارم که سرویس ارسال پیام انبوه و پاسخدهی هوش مصنوعی ارائه میدهد. قصد دارم این نرمافزار را به صورت SaaS ارائه دهم، اما با معماری Single-Tenant. به این معنی که برای هر مشتری جدید، باید یک نمونه (Instance) کاملاً ایزوله (کانتینر جداگانه) روی سرور اجرا شود. نیازمندیهای فنی و وظایف شما: ۱. داکرایز کردن پروژه (Dockerization):
نوشتن Dockerfile بهینه برای بکاند و فرانتاند. اطمینان از اینکه ایمیجها کمحجم و پرفورمنس بالا هستند. ۲. معماری زیرساخت (Infrastructure & Routing): راهاندازی یک Reverse Proxy (ترجیحاً Traefik یا Nginx) برای مدیریت سابدامینها. سیستم باید به گونهای باشد که وقتی کانتینر جدیدی برای کاربر user1 ساخته میشود، به صورت خودکار سابدامین user1.mydomain.com به آن کانتینر متصل شود (بدون نیاز به کانفیگ دستی و ریستارت کردن پروکسی). ۳. سیستم مدیریت چرخه (Provisioning): ایجاد یک اسکریپت یا API ساده (Master Script) که با دریافت اطلاعات مشتری جدید، یک کانتینر جدید با ENVهای اختصاصی (مثل توکن دیتابیس اختصاصی، پورت و...) را بالا بیاورد. ۴. پایپلاین CI/CD و آپدیت خودکار (Critical): این بخش بسیار حیاتی است: من میخواهم به محض اینکه تغییری در کد ایجاد کردم و در Git پوش (Push) کردم: به صورت خودکار ایمیج جدید ساخته شود (مثلاً با GitHub Actions). ایمیج جدید به رجیستری (Docker Hub یا Private Registry) منتقل شود. تمام کانتینرهای فعال مشتریان روی سرور، متوجه تغییر شده و به صورت خودکار (مثلاً با Watchtower یا اسکریپت سفارشی) به آخرین نسخه ایمیج آپدیت شوند. نکته مهم: آپدیت نباید باعث پاک شدن دادههای دیتابیس مشتریان شود (مدیریت صحیح Volumeها). سناریوی مورد انتظار من: من کد را تغییر میدهم و در گیتهاب Push میکنم. چند دقیقه بعد، تمام ۵۰۰ کانتینر مشتریان من روی سرور آپدیت شده و کد جدید را اجرا میکنند. اگر مشتری جدیدی آمد، با اجرای یک دستور ساده، سرویس او روی سابدامین اختصاصیاش بالا میآید. سوالات از فریلنسر: لطفاً در پیشنهاد خود به موارد زیر پاسخ دهید: برای مدیریت آپدیت همزمان تعداد زیادی کانتینر، چه ابزاری را پیشنهاد میکنید (Watchtower، Docker Swarm، Kubernetes یا اسکریپت شخصی)؟ برای مدیریت دیتابیسها (اینکه هر کانتینر دیتابیس خود را داشته باشد یا دیتابیس اشتراکی ایزوله) چه استراتژیای پیشنهاد میکنید
مهارتهای مورد نیاز
Linux
راه اندازی سرور لینوکس