فرض کنید میخوایم برای Backend پروژه برنامهریزی کنیم که به چه صورت انجام بشه. خب معمولا اینطوریه که:
هر کدوم از این حالتها چالشهای خاص مخصوص به خودشون رو دارن.
اینکه کدوم حالت رو انتخاب کنیم و کدوم بهتره، طبیعتا بستگی به فاکتورهای زیادی از پروژه داره، ولی خب از اونجایی که هدف از این پست آشنا شدن با یکی از BaaSها به اسم PocketBaseه، در ادامه میخوایم در مورد خوبیهای استفاده از BasSها بدونیم.
همونطور که از اسمش (Backend as a service) مشخصه، BaaS خیلی ساده که بخوایم بگیم یعنی جای اینکه Backend رو خودمون بزنیم، از ارائه دهندههای سرویس Backend استفاده کنیم! شاید سوال پیش بیاد که مگه میشه!؟ بله میشه. ولی قطعا نه همیشه.
اگه برای پروژتون به یک API نیاز دارین که عمده اصلی کارش فرایند CRUD هست، حالا این وسط احراز هویت و کنترل دسترسی نسبتا پایه ای رو هم براش در نظر دارین، به احتمال خیلی زیاد استفاده از BaaSها انتخاب مناسبی برای شماست.
اما بعضی وقتا هست که Backend قرار نیست فقط یه CRUD باشه، یه وقتی هست سمت سرور قراره پردازش AI یا به فرض Machine Learning یا اصلا یه وقتی هست که ما بر حسب پروژمون نیاز به دیتابیس خاصی مثل Neo4j داریم که خب طبیعیتا توی یه همچین حالتهایی نمیتونیم از BaaSها استفاده کنیم. (البته نه که کلا نتونیم، میشه بخشی از کار رو با BaaSها انجام بدیم و بخش دیگه رو خودمون پیادهسازی کنیم، ولی در کل امکاناتی که BaaSها دارن یکسری امکانات عمومیه و نباید از یه BaaS انتظار داشته باشیم هر چی تو ذهنمون هست رو داشته باشه!)
حالا اگه یه سرچ ساده انجام بدیم، میبینیم که کلی ارائه دهندهی BaaS داریم، چند تا از محبوبهاشون:
حالا ما تو این پست میخوایم با یکی از این BaaSها به اسم PocketBase آشنا بشیم، اینکه چجوری باید ازش استفاده کرد، چه امکاناتی داره و چجوری میتونه به عنوان Backend پروژه ازش استفاده بشه که در نهایت باعث شه هم کلی تو وقتمون صرفهجویی بشه و هم اینکه از نتیجه کار هم راضی باشیم...
راستی اینم بگم که من از BaaSها با Firebase (GCP), Amplify (AWS) و Supabase کار کردم، ولی از کار کردن با PocketBase حس خیلی بهتری داشتم و از اون جایی که PocketBase هنوز اونقدری محبوب نشده، گفتم این پست رو بذارم شاید برای کسی مفید بود. ?
یه مثال از نحوه کار با PocketBase ببینیم...
بیایم فرض کنیم میخوایم User Management رو با PocketBase پیادهسازی کنیم.
(این مثالی که میزنیم یه مثال خیلی سادست که فقط با نحوه کار با PocketBase آشنا بشیم.)
خب برای user management تو سادهترین حالت هر کاربر یک username و یک password داره (حالا برای اینکه یکم مثالمون قشنگتر بشه یه فیلد دیگه هم در نظر میگیریم که کاربر admin هست یا نه، اسمشم میذاریم is_admin)
پس بریم تو پنل PocketBase و یک کالکشن به اسم users ایجاد کنیم:
انتخاب type هر فیلد هم به سادگی انجام میشه:
کالکشنی که ایجاد کردیم میشه به این صورت: (یه رکورد هم بهش دستی اضافه شده اینجا)
خب کار تمومه... الان CRUD روی این کالکشن آماده استفادست.
برای نمونه Post و Deleteش به این صورت میشه :
کلی هم حالتهای مختلف برای user management در اختیارمون میذاره:
دسترسی به هر Route رو هم میتونین خیلی راحت محدود کنین:
از این بخش هم میتونین log هاتون رو چک کنین:
و کلی امکانات دیگه که باید خودتون باهاش کار کنین...
اگه بخوایم از PocketBase برای فرایند تست و در کل development استفاده کنیم، میتونیم local بیاریمش بالا که تو این حالت نصبش خیلی سادست و نیاز به توضیحی نداره، کافیه از اینجا نسبت به سیستم عامل دانلودش کنیم و تموم.
حالا یه موقع هست که میخوایم برای production ازش استفاده کنیم، یا در کل به هر دلیل میخوایم آنلاین بهش دسترسی داشته باشیم که این خودش میشه دو حالت:
- میایم یه سرور اجاره میکنیم، PocketBase رو روش نصب میکنیم و ازش استفاده میکنیم.
- حالت دوم اینکه حالو حوصله Server رو نداریم (اینطوری نباشیم ?) ، تو این حالت میتونیم از سرویس دهندههایی مثل آروان، لیارا و چابکان استفاده کنیم که کل فرایند رو انجام میدن.
(البته آروان فعلا تو لیست Appهای پیشفرض ندارش ولی میتونین داکرش رو خیلی راحت تو پنل کانتینر ابریش اضافه کنید)
همونطور که صحبتش شد، یه راه استفاده از PocketBase اینه که بیایم رو سرور خودمون بیاریمش بالا.
قبلش بگم که مستندات کامل Deploy کردنش رو از اینجا میتونین مطالعه کنین و از اینجا هم میتونین با نسخه Demoش کار کنین.
خب از اونجایی که معمولا سرور رو لینوکسی میگیریم، توضیحات رو با لینوکس میریم جلو:
اول از اینجا نسخه لینوکسیش رو دانلود میکنیم، به سرور انتقالش میدیم و unzipش میکنیم.
حالا کامند زیر رو اجرا میکنیم و تموم! همین
./pocketbase serve
بعد از اجرا شدن، بهمون 2 تا مسیر میده:
الان فقط از داخل سرور بهش دسترسی داریم، پس باید به بیرون هم exposeش کنیم که بتونیم خارج از سرور هم بهش دسترسی داشته باشیم.
اینجا هم PocketBase کارو برامون راحت کرده و فقط کافیه به جای کامند بالا از این یکی استفاده کنیم:
./pocketbase serve --http= [SERVER_IP/DOMAIN : PORT]
الان دیگه میتونیم با IP سرور و از اینترنت هم بهش دسترسی داشته باشیم، ولی مشکلی که داره اگه ارتباطمون با سرور قطع شه (مثلا ssh زدیم و ببندیمش) و یا سرور ریستارت شه، دیگه بهش (PocketBase) دسترسی نداریم، برای حل این مشکل میتونیم یه سرویس اضافه کنیم، به این صورت:
تو مسیر زیر یک فایل ایجاد میکنیم:
/lib/systemd/system/pocketbase.service
و محتواش رو به صورت زیر قرار میدیم:
و بعد میایم سرویسی که تعریف کردیم رو start میکنیم:
systemctl enable pocketbase.service
و آخرین مرحله اینکه PocketBase رو هم start میکنیم:
systemctl start pocketbase
با این سرویسی که تعریف کردیم با بسته شدن ssh و یا ریستارت شدن سرور، PocketBase خودش دوباره start میشه.
تو این پست سعی کردم به شما یک دید کلی از BaaSها و PocketBase بدم. اینکه خیلی وقتا به جای صرف زمان و هزینه برای توسعه Backend میتونیم از BaaSهایی مثل PocketBase استفاده کنیم.
راستی:
در حال حاضر آخرین نسخه PocketBase ، نسخه 0.19.3 هست و بهتره تا قبل منتشر شدن نسخه 1.0.0 برای پروژههای تجاری ازش استفاده نکنید. (کلا برای پروژههای تجاری سطح متوسط به بالا، استفاده از BaaS رو پیشنهاد نمیکنم.)
همونطور که بالاتر هم توضیح دادم، استفاده از BaaSها خیلی وقتا انتخاب درستی نیست. (بستگی به پروژه داره)
سرویسهایی مشابه با PocketBase زیاد هستن، این PocketBase هم به قول یکی از دوستان خیلی چیز WOW ای نیست، ولی نسبت به بقیه BaaSها احتمالا شما هم حس بهتری ازش میگیرین.
امیدوارم از این پست خوشتون اومده باشه و براتون مفید بوده باشه. اگه دوست داشتید میتونید از طریق لینکدین باهام در ارتباط باشید.?
موفق باشید...