سلام همه همراهان
از اون موقع ای که اسم زیر ساخت ابری آمازون AWS به گوشم خورد دنبال اینه بودم که بتونم چندتا سرویس بالا بیارم تا از دنیا عقب نباشم اما متاسفانه هر کاری میکردم به در بسته می خوردم. به شکل رسمی این زیر ساخت برای ایرانیان محدوده و من نتونستم حداقل راهی برای دور زدنش پیدا کنم در واقع ارزششو نداشت زیاد برای دور زدنش وقت بگذاری در صورتی که سرویس های خوبی دیگه ای هم هست که جز رقبای AWS آمازون هستند یکی از بهتریناشم سرویس Heroku هست.
من قبلا این مقاله رو توی مدیوم منتشر کردم اما بی انصافیه که این محتوا توی ویرگول برای فارسی زبانا نباشه
دیگه بریم سراغ اصل داستان
توی این مقاله قراره ما با استفاده از زبانی که خودتون بلدین یک وب سرویس بنویسیم و اونو به شکل کانتینر داکر روی هروکو پابلیش کنیم.
چیز هایی قبل از شروع این آموزش شما نیاز دارین:
۱- دانستین یک زبان برنامه نویسی برای انتشار یک سرویس مثل یک وب سرویس REST ( اما اگر در حال حاضر آمادگی نوشتنشو ندارین نگران نباشین فقط کافیه کدی که به زبان پایتون گذاشتمو کپی پیست کنین)
۲- نصب داکر روی سیستم خودتون
۳- ساخت یک اکانت رایگان در سایت Heroku
۴- نصب Heroku CLI با توجه به سیستم عاملتون
خودم سیستمم لینوکسی هست و دستوراتی که اینجا می نویسم بر همین اساسه شما اگر ویندوزیه کافیه معادلشو انجام بدین.
اول یک دایرکتوری به نام پروژه جدیدمون ایجاد و دو فایل به اسامی که می نویسم.
> mkdir my_project > cd my_project > touch main.py && touch Dockerfile
حالا با دستوری مثل nano یا vim برین و فایل main.py رو باز کنین قراره این فایل محتویات وب سرویس ما باشه.
vim main.py
from flask import Flask,jsonify from datetime import datetime import osmy_port = int(os.environ.get(“PORT”, 8030)) app = Flask(__name__)visit_cnt=0 @app.route(‘/’) def hello_world(): global visit_cnt visit_cnt+=1 return jsonify(message=’Congrats! you have deployed your first web service’, time=datetime.now(),totoal_visit_count=visit_cnt) if __name__ == ‘__main__’: app.run(debug=False,host=’0.0.0.0',port=my_port)
میریم سراغ بخش ساخت داکر ایمیجمون
vim Dockerfile
اگر راجع به ساخت داکر ایمیج توی داکر چیزی نمیدونین خلاص این میشه که ما قرار این وب سرویس فلسکی که نوشتیمو بزاریم درون یک ایمیج پایتون که بتونه به شکل یک کانتینر مستقل روی هر سروری ران بشه اصلا فلسفه کانتینر همینه !
خوب حالا کافیه کدی که نوشتمو توی داکر فایلتون کپی پیست کنین و بعد ذخیرش کنین.
FROM python:3.8.0b4-alpine3.10 RUN mkdir webservice WORKDIR /webservice COPY ./ ./ RUN pip install flask EXPOSE 8030 CMD python main.py
خیلی خلاصه این داکر فایل میاد دستور ساخت یک ایمیج میده که بر پایه python:3.8.0b4-alpine3.10 است یعنی یک نسخه از لینوکس خیلی کم حجم آلپاین که یک مفسر پایتونم توش برای ما آماده است. کافیه فایل هامون رو درونش کپی کنیم و بعد دستور اجرای کد رو بهش بدیم. به همین سادگی !
با دستور ذیل ایمیجمون ساخته میشه و اماده میشه یک کانتینر ازش بسازیم.
> docker build -t my_app .
حالا قبل اینکه این سرویس رو ببریم توی heroku قبلش تست کنیم ببینیم این درست کار میکنه یا نه
کافیه پورت 8030 این ایمجتون رو به پورت دلخواهتون مپ کنین تا بتونین خروجیشو ببینین.
> docker container run -d — name my_first_webservice -p 80:8030 my_app
من پورت ۸۰ رو مپ کردم حالا هم میتونین مرورگرتون رو باز کنین و 0.0.0.0 رو بزنین یا اینکه
> curl 0.0.0.0
بزنین و اگر وب سرویس بهتون جواب ذیل رو داد یعنی اماده میشیم بریم برای بردنش روی ابرها !
{ “message”: “Congrats! you have deployed your first web service”, “time”: “Mon, 23 Sep 2019 23:45:36 GMT”, “totoal_visit_count”: 1 }
خوب همینطور که قبلا گفتم پیش نیاز اموزش این است که شما اکانت هروکو رو ساخته باشین و CLI شم نصب کرده شده باشه. حالا اگر اینا امادست میریم سراغ ادامه آموزش و دستورات ذیل رو توی خط فرمانمون می نویسیم
> heroku login
بعد از لاگین باید یک اسم اپلیکیشن بدیم که یونیک هست توی کل سیستم شما براکت رو حذف کنید و به جاش اسم اپلیکیشن دلخواه خودتونو بنویسین
> heroku create [flask-with-heroku]
و بعد لاگین برای پوش کردن کانتینر
> heroku container:login > heroku container:push web --app [flask-with-heroku]
حتما حتما یادتون باشه اگر در این مرحله به ارور خوردین احتمال خیلی زیاد توی مسیر داکر فایلی که ساختیم نیستین یعنی باید مسیر جاریتون همون my_project باشه
دیگه داریم به پایانش نزدیک میشیم با دستور ذیل کانتینر دپلوی شده خودمون رو ریلیز میکنیم.
> heroku container:release web — app [flask-with-heroku]
حالا کافیه روی لینکی که اپلیکیشنتون روی پابلیش شده کلیک کنین
https://[your-application-name].herokuapp.com/
نمونه نهایی پابلیش شده این پروژه رو میتونین از اینجا ببینین.
امیدوارم برای دوستان عزیز مفید واقع شده باشه.
ارتباط با من از طریق لیندکدین