سرور مجازی برای پروتوتایپ بدون حتی یک ریال هزینه (ستاپ ساده ی Node js با Heroku)

البته هزینه که می تونه داشته باشه مثل...هزینه ی قهوه یا اینترنت یا برق یا زمان یا ... ولی به هر حال دیگه هزینه ی سرور رو نمی دید برای تست کردن و پروتوتایپ محصول تون...!
داستان از این قرار بود که روزی از روز ها ما در چندپر آروم آروم تصمیم گرفتیم که لانچ کنیم. در همین حین هم من توی Backend مون می خواستم یک سری بدهی های فنی رو درست کنم و هم این که فیچر هایی رو که قبلا برنامه ریزی شده رو اضافه کنم (تا بک اند همیشه از دوستان فرانت جلوتر باشه و دوست داشتنی تر) این طوری شد که نیاز به سرور تست پیش اومد.

منم مثل همیشه گوگل رو باز کردم و گفتم که ای گوگل جادویی آیا سرویس دهنده ای هست که سریع و راحت این کارو برام انجام بده!؟ اونم سخاوتمندانه بعد از نشون دادن کلی Ads و اینا ... سرویس Heroku رو بهم معرفی کرد (خب واقعا قبلش سرویسی رو نمی شناختم)

https://www.heroku.com/
https://www.heroku.com/

این کشف من ؛ آموزش ها و نمونه های آماده برای انواع زبان های برنامه نویسی رو داشت و خیلی سریع (تقریبا) تونستم یه Node js اپلیکیشن رو باهاش ران کنم. پنل رایگانش هم به این صورته که اگر نیم ساعت غیر فعال باشه به حالت Idle می ره یعنی تا اولین request بعدی به حالت خواب می ره و بعدش فعال می شه مثل اولش (توی عمل مشکلی ایجاد نکرده به اون صورت) تا حدی هم از سرور اصلی خودمون پرسرعت تر نشون داده! کانفیگ و موارد تکمیلی رو می تونین توی سایتش بخونین

یه مشکلی که بهش برخورده بودم این بود که ما در بک اند مون از تکنولوژی های متنوع و زیادی استفاده می کنیم مثل RabbitMQ برای ارسال پیام از cluster به worker ها (بعدن در موردش براتون می نویسم خیلی شگفت انگیزه برام) و یا Reddis برای کش سرور و رکوئست و یا حتی MongoDB خودمون برای دیتابیس. راستش نصب و راه اندازی این تکنولوژی ها توی این محیط جدید چالش برانگیز و زمان بر بود (برای یه سرور تست که نباید این قدر وقت گذاشت!) به خاطر همین همشو از پنل های رایگان سایت های زیر استفاده کردم و برای سرور تست مون هم واقعا کافی بود (آدرس لینک سایت مربوط جلوی هر کدوم هست)

خیلی راحت و عالی با کار های زیر Node js Backend مون رو همراه با pm2 و یه سری کار های دیگه آماده کردم:

راه اندازی ساده ی Node js با Heroku بدون داکر و این حرفا!

مرحله ی اول: بایستی مطمئن بشید که Node js اپلیکیشن تون کار می کنه یا نه! بعدش کانفیگ pm2 رو با دستور زیر به پروژه تون اضافه کنید:

npm install pm2 -g
pm2 init

بعدش می بینید که یه فایلی در کنار فایل های پروژه تون در مسیر روت اضافه می شه به نام ecosystem.config.js که من اونو برای خودم به شکل زیر کم و زیادش کردم (حالا توضیح می دم براتون)

module.exports = {
apps : [
 // start point application
    {
      name      : 'api',
      script    : 'app.js',
      exec_mode: "cluster_mode",
      instances: "2"
    },

 // cron jobs
    {
 "name": "cronJobs",
 "script": "./cron.js",
 "instances": 1
    },

 // workers
    {
 "name": "smsWorker",
 "script": "./workers/smsWorker.js",
 "instances": 1
    },
    ...
  ]
};

خب کامنت گذاشتم و مشخصه که چه خبره! داکیومنتیشن pm2 خوشبختانه خیلی خوبه و پیشنهاد اکید می کنم که به توضیحات مربوط به این فایل و نحوه ی نوشتنش یه نگاه بندازید. کاربرد های مفید زیادی داره که بایستی ازش بهره ببریم ولی من توی این نوشته فعلا نادیده گرفتم تا بعد.

مرحله ی دوم: در اینجا باید بریم سراغ فایل همیشه در صحنه (و تا قسمتی اعصاب خوردکن) package.json تا یه سری تغییراتی توش بدیم. اول این که اسکریپت استارت رو باید مشخص کنیم.

قبل از بررسی package.json ؛ ما با یک حرکت هکر مانند باید کاری کنیم که خیلی راحت بتونیم توی اسکریپت استارت از pm2 استفاده کنیم. خود pm2 یه داکیومنتیشن مخصوص این کار داره ولی من اونو نتونستم اجرا کنم چون مدام به دردسر افتادم (گفته بودم که نمی خواستم وقت بذارم براش!) یعنی من اول اومدم pm2 رو توی پروژه نصبش کردم به صورت زیر:

npm install pm2

و بعدش با استفاده از همون pm2 که الآن توی پروژه به صورت لوکال نصب شده ؛ package.json رو به صورت زیر ویرایش کردم:

"scripts": {
 "test": "node app.js",
 "start": "node ./node_modules/.bin/pm2 start ecosystem.config.js && node ./node_modules/.bin/pm2 logs"
 }

در واقع توی اسکریپت استارت (که توسط heroku قراره ران بشه) میاد طبق کانفیگ بالا (بالاتر!) Node js اپلیکیشن مون رو ران می کنه و بعدش لاگ می کنه تا ببینیم چه خبره

در آخر هم می تونیم ورژن مورد نظر nodejs و npm مون رو مشخص کنیم که البته اختیاریه (برای من هنوز مهم نیست) این مورد رو از اینجا بخونین و درستش کنین اگر دوست داشتین

مرحله ی سوم: حالا نوبت به کار با heroku می رسه. شما ابتدا باید با توجه به سیستمی که دارید از طریق خود سایت heroku ابزار CLI رو نصبش کنید بعش به صورت خیلی خلاصه و ساده کامند های زیر رو برای پروژه خودتون اجرا کنید (فرض ما بر اینه که توی داشبورد heroku شما پروژه رایگان جدیدی رو با نام my-heroku-node ایجاد کردید و git هم نصبه و آخرین نسخه ی پروژه ی اخیرتون هم توی گیت push شده)

heroku login
heroku git:remote -a my-heroku-node
git push heroku master
heroku logs && heroku open

دستور اول برای لاگین کردن توی heroku هست که ایمیل و رمزتون رو به ترتیب می پرسه. دستور دوم میاد آدرس گیت سرور مخصوص پروژه تون رو به گیت سیستم تون اضافه می کنه تا شما قادر باشید از دستور سوم برای delpoy و راه اندازی پروژتون استفاده کنید. دستور سوم کلی کار می کنه و در مقایسه با ssh کردن و این حرفا خیلی راحت و جالبه! و در نهایت دستور آخر هم logs رو به همراه باز شدن آدرس node js اپیلیکیشن تون می بینید


پس نوشت۱ : با داکر هم می شه node js (و هزاران ترکیب دیگه) رو خیلی راحت و لذت بخش با heroku راه انداخت

پس نوشت۲: اخیرا مطلبی رو توی ویرگول دیدم درباره ی سرویسی ایرانی به نام فندق خب من به شخصه ترجیح می دم توی این گونه موارد از سرویس ایرانی استفاده کنم ولی حیف که دیرتر از heroku متوجه شدم که همچین چیزی ایرانیش هم هست! هر وقت باهاش کار کردم تجربه ی اون رو تقدیمتون می کنم

https://virgool.io/@felfel/%DA%86%D8%B1%D8%A7-%D8%AF%D8%A7%DA%A9%D8%B1-%DA%86%D8%B1%D8%A7-%D9%81%D9%86%D8%AF%D9%82-cgvw3czrxu19