معرفی فندق

فندق یک پلتفرم برای تسهیل در ساده‌سازی Deployment سرویس‌هاست که به شما کمک می‌کنه هر docker image رو به یک نسخه در حال اجرا تبدیل و مدیریت کنید.
تلاش شده که زحمت Deployment و Operation Management برای کاربران فندق به حداقل برسه تا کاربران بتونند وقت بیشتری رو صرف بهبود خود سرویس‌هاشون کنند و کمتر و کمتر نگران مشکلات نگهداری سرویس‌ها باشند.

ویژگی ها

  • انعطا‌ف‌پذیری برای System Administrators
  • سادگی در استفاده برای برنامه‌نویسان
  • شفافیت در مدیریت هزینه‌ها

مفاهیم و تعاریف

قبل از اینکه بیشتر وارد جزئیات فندق و استفاده از فندق بشیم لازم هست تا چند مفهوم مرتبط با فندق رو با هم مرور کنیم:

  • کلاینت فندق
    کلاینت فندق یک نرم‌افزار تحت کامندلاین است که به کاربران کمک می‌کنه از فندق استفاده کنند.

  • Image
    در فندق به هر سرویس یک Image می‌گوییم و شما میتونید هر Image رو معادل یک Image در داکر تصور کنید، به ازای هر Image یک یا چند سرویس در فندق اجرا می‌شوند.

  • Image Version
    برای مدیریت روی نسخه‌های مختلف از سرویستون شما باید به هر Image که در فندق منتشر می‌کنید یک شماره ورژن نسبت دهید.

  • Service
    وقتی یک نسخه از یک Image را روی فندق منتشر می‌کنید برای تبدیل آن به یک نسخه در حال اجرا باید یک service به اصطلاح deploy کنید.از جهاتی می‌توان یک سرویس روی فندق را معادل یک Container در نظر گرفت.

  • Workspace
    برای انتشار یک Image روی فندق شما به یک Workspace نیاز دارید، منظور از Workspace یک دایرکتوری(folder) روی سیستم خودتان است که حاوی سورس کد پروژه به همراه یک Dockerfile است.کلاینت فندق کل محتویات Workspace را بعد فشرده کرده و روی سرور آپلود می‌کند تا یک Image برای سرویس شما ساخته شود.

  • Namespace
    Namespace یک فضای اختصاص داده شده به سرویسهای شماست، سرویس‌های یک namespace از طریق شبکه داخلی قادر به دسترسی به یک‌دیگر هستند و فضای ذخیره‌سازی اشتراکی دارند. در حال حاضر برای هر کاربر پس از عضویت به طور خودکار یک Namespace ایجاد می‌شود.

  • shared-storage یا فضای ذخیره‌سازی اشتراکی
    هر namespace یک فضای ذخیره‌سازی اختصاصی دارد که تمام سرویس‌های داخل namespace به آن دسترسی دارند. این فضا به طور خودکار به مسیر mnt/shared-volume/ هر سرویس mount می‌شود.

What is in your namespaces

جمع‌بندی مفاهیم

پس به طور خلاصه شما یک پروژه دارید داخل دایرکتوری پروژه یک Dockerfile می‌سازید که به آن دایرکتوری یک workspace می‌گوییم.از روی هر Workspace میتوانید یک Image بسازید و با هر بار publish یک ورژن جدید از آن یک Image به سرور ارسال شود.از روی هر ورژن از Image هم می‌توانید یک یا چند Service ایجاد کنید، ساده است نه؟

کلاینت فندق

سرویس اصلی فندق روی سرور‌های فندق در حال سرویس‌دهی است و کاربران از طریق کلاینت فندق fandogh-cli‍ از API های سرور استفاده می‌کنند. کلاینت فندق این امکان رو به شما می‌دهد که تمام نیاز‌های خود را برای مدیریت سرویس‌هاتون رفع کنید.

نصب کلاینت فندق

برای نصب کلاینت فندق شما به python نسخه ۲.۷ به بالا یا ۳.۵ به بالا نیاز دارید و می‌توانید به سادگی از طریق pip کلاینت فندق را نصب کنید.

pip install fandogh_cli

لاگین

بعد از نصب کلاینت فندق برای ورود لازم است از دستور login‍ استفاده کنید:

fandogh login

که برای لاگین به نام‌کاربری و رمز‌عبور نیاز دارید.برای عضویت در فندق اینجا کلیک کنید.

مدیریت تصویر

تمام دستورات لازم برای مدیریت Imageها زیرمجموعه fandogh image قرار دارد. توجه داشته باشید برای فراخوانی دستورات لازم است قبلا لاگین کرده باشید.

دستورات مربوط به مدیریت Image

  • init
    دستور init بعد از لاگین اولین دستور مورد نیاز شماست که workspace شما را مشخص می‌کند.
پارامتر‌های لازم

name
پارامتر name نام Image را مشخص می‌کند و در تنظیمات workspace نگه میدارد.

  • publish
    دستور publish به شما اجازه میده که یک Version جدید از Image رو به سرور فندق ارسال کنید.
پارامتر‌های لازم

version
از طریق پارامتر Version شما مشخص می‌کنید کدوم ورژن از Image رو دارید روی سرور فندق آپلود می‌کنید.
detach
از طریق اجرای این دستور با سویچ -d میتونید به فندق بگید که فرایند آپلود ورژن جدید روی توی بک‌گراند انجام بده و نیازی نیست پیشرفت پروسه آپلود رو نمایش بدی.

  • logs
    از طریق این دستور می‌تونید لاگ مربوط به ساخته شدن Image سمت سرور رو مشاهده کنید.
پارامتر‌های لازم

version
پارامتر version مشخص می‌کند که لاگ کدام یک از versionهای Image باید نمایش داده شود.

  • versions
    از طریق این دستور می‌تونید لیست تمام ورژن‌های Image خود را مشاهده کنید.
پارامتر‌های لازم

این دستور پارامتر خاصی نیاز ندارد، هر چند می‌توانید از طریق سویچ --image اسم یک Image دلخواه را مشخص کنید اما به طور پیشفرض اگر دستور در داخل یک Workspace اجرا شود لیست ورژن‌های همان Image نمایش داده می‌شود.

دستورات مربوط به مدیریت Service

  • deploy
    دستور deploy به شما اجازه می‌دهد یک Version از Image خود را با پارامتر‌های مورد نیاز خود دیپلوی کنید.
پارامتر‌های لازم

image
در صورتی که در داخل workspace باشید نیازی به مشخص کردن Image ندارید اما با مشخص کردن نام یکی از Imageها می‌توانید مشخص کنید کدام Image را مایل هستید دیپلوی کنید.

version
از طریق این پارامتر مشخص می‌کنید که کدام ورژن از Image خود را مایلید روی سرور فندق دیپلوی کنید.ورژن مورد نظر باید یکی از ورژن‌هایی باشد که قبلا publish شده باشد.

name
از طریق این پارامتر مشخص می‌کنید که نام سرویسی که قصد دارید ایجاد کنید چیست، توجه داشته باشید که این نام با نام Image متفاوت است، از طریق این نام شما بین سرویس‌های در حال اجرای خود تفکیک ایجاد می‌کنید.به عنوان مثال شما می‌توانید یک Image به نام OrderHandling داشته باشید و از روی آن سه سرویس مختلف با نام‌های oh1, oh2 و oh3 روی فندی دیپلوی کنید. توجه داشته باشید که نام سرویس قرار است به عنوان یک subdomain مورد استفاده قرار بگیرد بنابراین باید حین نامگذاری محدودیت‌های زیر را رعایت کنید:

  • فقط می‌تواند شامل حروف کوچک، اعداد و خط تیره باشد.
  • نمی‌تواند با اعداد آغاز شود.
  • نمی‌تواند با خط تیره آغاز یا پایان یابد.
  • نمی‌تواند حاوی دو خط تیره متوالی باشد.

--env یا -e
از طریق این پارامتر مشخص می‌کنید می‌توانید environment variable های مختلف مورد نیاز سرویس برای اجرا را مشخص کنید.توجه داشته باشید که هیچ محدودیتی در تعداد --env وجود ندارد .به عنوان مثال فرض کنید سرویس برای کار به پارامتر‌های api_token و secret_key نیاز دارد، در این صورت از این طریق پارامتر‌ها را مشخص می‌کنید:

fandogh service deploy --env api_token="some token" --env api_secret_key="some secret key"

--port یا -p
از طریق این پارامتر مشخص می‌کنید می‌توانید کدام یک از پورت‌های سرویس مورد نظر خود را می‌خواهید در دسترس قرار دهید.در صورت عدم مشخص کردن پورت بخصوصی، پورت 80 در دسترس قرار می‌گیرد.

--internal
در حالت عادی پورت مورد نظر هر سرویس به صورت public قابل دسترس است، با اضافه کردن سویچ --internal‍ می‌توانید پورت مورد نظر را فقط در شبکه داخلی خودتان قابل دسترس نگهدارید.

--hosts یا -h از طریق این سویچ می‌توانید از بین دامنه‌هایی که قبلا ثبت و تایید کرده‌اید یک یا چند موررد را انتخاب کنید که به این سرویس متصل شوند، می‌توانید بیش از یکبار این سویچ را استفاده کنید مثلا:

fandogh service deploy -h site.com -h www.site.com

دقت داشته باشید باید از طریق CNAME دامنه مورد نظر به آدرس‌های این سرویس متصل شده باشد.

  • list
    دستور list لیست تمام سرویس‌های شما را نمایش می‌دهد.

  • destroy
    دستور destroy برای حذف کردن یک سرویس بخصوص استفاده می‌شود.

پارامتر‌های لازم

name
از طریق پارامتر name می‌توانید نام serviceای که قصد دارید حذف کنید را مشخص کنید.

  • logs
    دستور logs ( با دستور fandogh image logs‍ اشتباه نشود، این دستور زیرمجموعه service است) برای نمایش لاگ یک سرویس استفاده می‌شود.
پارامتر‌های لازم

name
از طریق پارامتر name می‌توانید نام serviceای که قصد دارید لاگ آن را مشاهده کنید مشخص کنید.

دستورات مربوط به مدیریت Domain

این دستورات برای اضافه کردن دامنه به اکانت فندق مورد استفاده قرار می‌گیرند، بعد از اضافه کردن دامنه‌ می‌توانید از این دامنه‌ها برای سرویس‌های خود استفاده کنید.

  • add به کمک دستور Add می‌تونید یک دامنه جدید به فندق اضافه کنید، توجه داشته باشید باید دسترسی کافی برای افزودن TXT رکورد به دامنه داشته باشید در غیر این صورت نمی‌توانید دامنه را Verify کنید.

پارامتر‌های لازم

name نام دامنه‌ای که مایل هستید به فندق اضافه کنید، مثلا ‍‍some.api.domain.com

  • list دستور list لیست تمام دامنه‌های شما را نمایش می‌دهد.

پارامتر‌های لازم

name نام دامنه‌ای که مایل هستید به فندق اضافه کنید، مثلا ‍‍some.api.domain.com

  • verify در صورتی که قبلا دامنه‌ای افزوده باشید اما verify ‌نکرده باشید این دستور به شما کمک می‌کند دامنه خود را تایید کنید.

پارامتر‌های لازم

name از طریق پارامتر name می‌توانید نام serviceای که قصد دارید حذف کنید را مشخص کنید.

دیباگ

شما می‌توانید با ست کردن ‍‍export FANDOGH_DEBUG=1 حالت debug را فعال کنید تا جزئیات بیشتری از خطا‌ها مشاهده کنید تا در صورت لزوم هنگام ثبت issue در گیت‌هاب پروژه اطلاعات دقیق‌تری فراهم کنید.