نحوه استقرار جنگو بر روی Heroku: A Pydantic Tutorial، قسمت 3
انتشار: آذر 08، 1401
بروزرسانی: 23 تیر 1404

نحوه استقرار جنگو بر روی Heroku: A Pydantic Tutorial، قسمت 3

مانند هر اسکریپت پوسته ای که کاربر ایجاد می کند، باید از قابل اجرا بودن آن اطمینان حاصل کنیم. دستور زیر اسکریپت ما را در توزیع های یونیکس قابل اجرا می کند:

DEBUG

(از مقدار کلید تولید شده استفاده کنید)

خط لوله برنامه Heroku ما اکنون تعریف شده است. مرحله بعدی آماده سازی متغیرهای محیطی است که توسط کد منبع ما استفاده می شود زیرا این به ترتیب از صفحه تعریف برنامه Heroku پیروی می کند. بدون این متغیرهای محیطی، استقرار ما با شکست مواجه خواهد شد زیرا کد منبع ما به آنها متکی است.

متغیرهای محیطی

مرحله انتشار کاملاً پیکربندی شده، قبل از اینکه بتوانیم استقرار آزمایشی را انجام دهیم، فقط تعریف مرحله استقرار را باقی می گذارد.

مرحله استقرار را پیکربندی کنید

همانطور که در قسمت 2 مجموعه ما ذکر شد، برنامه ما به یک پایگاه داده رابطه ای برای پروژه جنگو ما نیاز دارد. ما افزونه های مورد نیاز را از طریق رابط مرورگر Heroku با مراحل زیر پیکربندی می کنیم:

  1. برای پیکربندی افزونه ها، به برگه منابع در داشبورد Heroku بروید.
  2. از Heroku بخواهید که Postgres را به طور خاص نصب کند heroku-postgresql.
    1. طرح افزودنی Mini را انتخاب کنید.
  3. این افزونه را با برنامه با نام منحصر به فرد ما مرتبط کنید.
  4. روی ارسال فرم سفارش کلیک کنید.

استقرار کد منبع – و استقرار مجدد پس از به روزرسانی – می تواند یک فرآیند خسته کننده باشد که شما را شکسته می کند. بعد از این همه روابط بد با دیگر پلتفرم های استقرار، احساس خوشبختی می کنم که با جنگو و هروکو خوشبختی پایدار پیدا کردم. من می خواهم رازهای موفقیت خود را از طریق یک مثال با دقت به اشتراک بگذارم.

کلید

مرحله انتشار Heroku، قبل از استقرار انجام شده، دارای یک فرمان مرتبط است که در برنامه ما مشخص شده است hello-visitor/Procfile. ما با ایجاد یک فرمان پوسته جداگانه که دستورات یا اسکریپت های وابسته ای را که می خواهیم اجرا کنیم فهرست می کند، بهترین شیوه ها را دنبال می کنیم. Heroku همیشه خواهد خواند hello-visitor/Procfile فایل و محتوای آن را اجرا کنید.

ارزش

SECRET_KEY

همانطور که در قسمت های 1 و 2 سری ما توضیح داده شد، قدرت ذاتی در برنامه ما از استفاده ظریف از متغیرهای پیدانتیک و محیطی ناشی می شود. Heroku Config Vars خود را به طور خودکار در محیط برنامه در دسترس قرار می دهد، به این معنی که کد ما برای میزبانی در محیط تولید ما نیازی به تغییر ندارد. ما هر یک از تنظیمات را با جزئیات بررسی نمی کنیم، اما این را به عنوان یک تمرین برای شما باقی می گذاریم.

پیکربندی خط لوله برنامه ما

Heroku یک پلتفرم به عنوان یک سرویس است و برنامه های کاربردی را ارائه می دهد. این برنامه ها که برنامه ها نامیده می شوند، نیازمندی های سیستم و کد منبع ما را با هم ترکیب می کنند. برای قرار دادن برنامه خود روی Heroku، باید یک Heroku Slug ایجاد کنیم - یک تصویر برنامه که پیکربندی، افزونه ها و موارد دیگر را برای ایجاد نسخه قابل استقرار ترکیب می کند. هروکو راب هستند قابل مقایسه با تصاویر داکر.

هنگامی که PostgreSQL ارائه شد و با برنامه ما مرتبط شد، می توانیم رشته اتصال پایگاه داده خود را در متغیرهای پیکربندی برنامه خود مشاهده کنیم. برای نشان دادن این موضوع، به تنظیمات رفته و روی Reveal Config Vars کلیک می کنیم، جایی که یک متغیر را می بینیم. DATABASE_URL:

اکنون می توانیم با رفتن به بخش استقرار دستی و انتخاب مخزن خود، برنامه خود را به صورت دستی اجرا کنیم. main شعبه کنید و روی دکمه Deploy Branch کلیک کنید.

# file: hello-visitor/Procfilerelease: ./heroku-release.shweb: ./heroku-web.sh

یک پانل استقرار مدیریت Heroku، شعبه مخزن برنامه را برای استقرار برنامه جنگو با انتخاب «اصلی» در زیر «نام شعبه برای استقرار را وارد کنید» نشان می دهد.  یک دکمه مشکی با عنوان Deploy Branch در پایین سمت راست وجود دارد.
استقرار هیروکو

اگر همه چیز به خوبی پیش برود، استقرار ما به درستی با استفاده از اسکریپت های ساخت و انتشار تعریف شده ما و استقرار وب سایت کامل می شود.

یک اجرای آزمایشی

ما با تغییر پرچم های سیستم آن با دستور زیر اطمینان حاصل می کنیم که اسکریپت ما قابل اجرا است:

هروکو با این مراحل از یک خط لوله به خوبی سازماندهی شده عبور می کند:

  • مرحله ساخت:
    • Heroku منبع برنامه ما را بررسی می کند و تشخیص می دهد که چه فناوری هایی مورد نیاز است.
    • Heroku تصویر سیستم پایه مورد نیاز را برای برنامه ما با استفاده از a می سازد buildpack، که در این مورد است هرکو/پایتون.
    • تصویر به دست آمده در هروکو راب نامیده می شود.
  • مرحله انتشار:
    • Heroku به ما اجازه می دهد تا کارهای قبل از استقرار را انجام دهیم یا بررسی های مختلفی را روی سیستم، تنظیمات یا داده های خود انجام دهیم.
    • انتقال پایگاه داده در این مرحله رایج است.
  • مرحله زمان اجرا:
    • Heroku تصاویر ما را در ظروف سبک وزنی به نام dyno می چرخاند و آنها را به ما متصل می کند خدمات الحاقیبه عنوان مثال، پایگاه داده
    • یک یا چند داینو زیرساخت سیستم ما را تشکیل می دهند، از جمله مورد نیاز روترها برای فعال کردن ارتباط درون داینو.
    • درخواست های دریافتی HTTP نیز در مسئولیت های روتر قرار می گیرند، جایی که ترافیک به دینو(های) سرور وب مناسب پیوند می خورد.
    • کاهش مقیاس ساده است زیرا Heroku امکان ارائه پویا داینوها را بر اساس بار می دهد.

با نصب Heroku، ایجاد برنامه ما گام اولیه به سمت استقرار کد منبع ما است. این برنامه نه تنها به مخزن کد منبع ما اشاره می کند، بلکه به کدام افزونه ها نیاز داریم.

برگه استقرار مدیریت هروکو نشان داده شده است.  در بالا، GitHub به صورت متصل نشان داده شده است.  در پایین، مخزن GitHub
برگه استقرار Heroku

# file: hello-visitor/heroku-web.shcd srcgunicorn hello_visitor.wsgi --workers 2 --log-file -

["hello-visitor.herokuapp.com"]

False

ما قبلا یک نمونه ساخته ایم hello-visitor در قسمت 2 این مجموعه آموزش جنگو و pydantic استفاده کرد و در مورد اینکه چگونه محیط توسعه ما باید تنظیمات تولید ما را با استفاده از pydantic منعکس کند، بحث کرد. این انعکاس ریسک قابل توجهی را از پروژه ما حذف کرد.

ما هنوز اسکریپتی برای ارجاع در آن فایل نداریم، بنابراین بیایید اسکریپت پوسته انتشار خود را ایجاد کنیم. hello-visitor/heroku-release.shو از Heroku بخواهید استقرار ما را ایمن کند و انتقال پایگاه داده را به صورت خودکار با متن زیر انجام دهد:

ما به رابط خط فرمان Heroku نیاز داریم نصب شده است به صورت محلی استفاده از نصب استاندارد snap این کار را ساده می کند - ما این را در یک ماشین توسعه Ubuntu نشان خواهیم داد. اسناد Heroku مراحل اضافی را برای نصب مجموعه ابزار آن بر روی پلتفرم های دیگر ارائه می دهد.

با پیروی از این رویکرد مدیریت تنظیمات جنگو، در نهایت به نتیجه می رسید یک مجرد settings.py که خود را با استفاده از متغیرهای محیطی پیکربندی می کند.


همانطور که در بخش انتشار خود انجام دادیم، بهترین شیوه ها را دنبال می کنیم و یک پوسته اسکریپت جداگانه حاوی عملیات استقرار ایجاد می کنیم. ما این اسکریپت استقرار را می نامیم heroku-web.sh و آن را در پوشه ریشه پروژه خود با محتوای زیر ایجاد کنید:

به نظر من، این استقرار نمی تواند آسان تر باشد. مراحل پیکربندی دست و پا گیر نیستند و هسته اصلی Heroku که با عشق توسط پلتفرم Heroku قرار گرفته است، تقریباً تمام کارهای سنگین را انجام می دهد. بهتر از آن، هسته بیلد پک Heroku Python منبع باز است و بسیاری از پلتفرم های کاربردی دیگر از آن استفاده می کنند. بنابراین رویکردی که در این آموزش آموخته اید یک مهارت بسیار قابل انتقال است.

اکنون که نحوه کار Heroku و اصطلاحات اولیه آن را می دانیم، نشان می دهیم که نصب برنامه نمونه چقدر ساده است.

Heroku CLI را نصب کنید

# file: hello-visitor/heroku-release.shcd srcpython manage.py check --deploy --fail-level WARNINGpython manage.py migrate
heroku apps:create <UNIQUE-APP-NAME-HERE>

افزونه PostgreSQL

sudo snap install --classic heroku\u200b# check that it worksheroku --version
DATABASE_URL=postgres://{user}:{password}@{hostname}:{port}/{database-name}

می توانیم با کلیک کردن روی دکمه Open App در بالای داشبورد Heroku App، برنامه مستقر شده را امتحان کنیم.

هنگامی که سهولت استقرار را با جادوی محیط آینه ای و مدیریت تنظیمات pydantic همراه می کنیم، استقرار پایدار و مستقل از محیط را داریم که به صورت محلی و تحت وب کار می کند.

ما باید به Heroku بگوییم که از کدام پشته فناوری استفاده کند. برنامه ما از پایتون و مجموعه ای از وابستگی های مورد نیاز، همانطور که در فهرست شده است، استفاده می کند آن requirements.txt فایل. اگر می خواهیم برنامه ما از نسخه اخیر پایتون استفاده کند (در حال حاضر به نسخه 3.10.4 پیش فرض شده است)، Heroku از ما نمی خواهد که صریحاً مشخص کنیم که از کدام نسخه پایتون برای مرحله ساخت استفاده کنیم. بنابراین، فعلاً از پیکربندی ساخت صریح صرفنظر می کنیم.

مرحله انتشار را پیکربندی کنید

این آخرین قسمت از یک مجموعه سه قسمتی در مورد استفاده از pydantic برای پروژه های مبتنی بر جنگو است. بخش 1 بر روی استفاده pydantic از نکات نوع پایتون متمرکز بود مدیریت تنظیمات جنگو را ساده کنید; قسمت 2 یک برنامه بر روی این مفهوم با Docker و conda ساخت تا نشان دهد که چگونه می شود توسعه و تولید را همسو کند محیط ها

پیش از این، ما به رشته اتصال پایگاه داده در پنل مدیریت Config Vars نگاه کردیم. اکنون باید به این پانل مدیریت برویم تا متغیرها و مقادیر خاص را اضافه کنیم:

اکنون که اسکریپت انتشار خود را نوشته ایم، آن را به برنامه خود اضافه می کنیم hello-visitor/Procfile فایل به طوری که در حین انتشار اجرا شود. ما ایجاد می کنیم را Procfile و مطالب زیر را اضافه کنید:

وبلاگ مهندسی تاپتال قدردانی خود را به استیون دیویدسون برای بررسی و آزمایش بتا نمونه کد ارائه شده در این مقاله.

ادامه مطلب در وبلاگ مهندسی تاپتال:



منبع

پس از آن، داشبورد ما باید به شکل زیر باشد:

یک نکته مهم در مورد استقرار Heroku این است که هر برنامه باید یک نام منحصر به فرد برای هر شخصی که از Heroku استفاده می کند داشته باشد. بنابراین، ما نمی توانیم در حین گذراندن این مراحل از یک نام مثال استفاده کنیم. لطفاً نامی را انتخاب کنید که شما را خوشحال کند و آن را در طول این آموزش به بلوک دستورالعمل وصل کنید. اسکرین شات های ما نام برنامه را به صورت فهرست می کنند hello-visitor، اما همانطور که دنبال می کنید، نام منحصر به فرد شما در آن مکان ها ظاهر می شود.

ALLOWED_HOSTS

ما از دستور اصلی Heroku scaffolding برای ایجاد برنامه خود استفاده می کنیم:

جنگو به یک کلید مخفی نیاز دارد، SECRET_KEY، برای عملکرد صحیح این کلید به همراه سایر متغیرها در مجموعه متغیرهای محیط مرتبط برنامه ما ذخیره می شود. قبل از اینکه به طور کامل متغیرهای محیطی خود را پیکربندی کنیم، اجازه دهید کلید مخفی خود را تولید کنیم. ما باید با رمزگذاری آن با base64 (و نه UTF-8) اطمینان حاصل کنیم که هیچ کاراکتر خاصی در این کلید وجود ندارد. base64 شامل کاراکترهای غیرالفبایی (به عنوان مثال، +، @) نیست که ممکن است در صورت ارائه رازها به عنوان متغیرهای محیطی، نتایج غیرمنتظره ای ایجاد کند. ایجاد کنید SECRET_KEY با دستور یونیکس زیر:

ما برنامه خود را برای راه اندازی یک وب سرور با دو گره کارگر پیکربندی می کنیم.

openssl rand -base64 70
chmod +x heroku-web.sh

یک صفحه مدیریت Heroku به نام فرم سفارش آنلاین نشان می دهد که Postgres به عنوان یک افزونه برای برنامه hello-visitor انتخاب شده است.  این پایگاه داده تحت طرح Heroku Mini همانطور که از یک منوی کشویی انتخاب شده است اضافه می شود.  یک دکمه بنفش ارسال فرم سفارش در پایین قرار دارد.
فرم سفارش آنلاین

False

صفحه وب تعداد بازدیدکنندگان سایت را نشان می دهد که هر بار که صفحه را به روز می کنید افزایش می یابد.

استقرار نرم افزار برنامه جنگو

با این کار آدرس ایمیل ما و یک توکن API در آن ذخیره می شود ~/.netrc فایل برای استفاده در آینده

برنامه Heroku را ایجاد کنید

ما می خواهیم برنامه جنگو خود را مستقر کنیم و اطمینان حاصل کنیم که به طور پیش فرض آسان و ایمن است. Heroku با ترکیب کارایی و امنیت یک رابطه بدون استرس با پلتفرم برنامه ما فراهم می کند.

اکنون که اسکریپت استقرار اجرایی خود را ایجاد کرده ایم، برنامه خود را به روز می کنیم Procfile به طوری که مرحله استقرار در مرحله مناسب اجرا شود:

chmod +x heroku-release.sh

هنگامی که Heroku را در بالا معرفی کردیم، مراحل کلیدی در خط لوله آن را که برای ایجاد، پیکربندی و استقرار یک برنامه مورد نیاز است، شرح دادیم. هر یک از این مراحل دارای فایل های مرتبط با تنظیمات و دستورات مناسب است.

مرحله ساخت را پیکربندی کنید

با در دست داشتن این کلید، اکنون ممکن است متغیرهای محیطی خود را به عنوان Vars پیکربندی Heroku پیکربندی کنیم.

حالا ما از هروکو می خواهیم برنامه ما را با مخزن GitHub ما مرتبط کنید با دستورالعمل زیر:

  1. به تب Deploy در داشبورد Heroku بروید.
  2. حساب Heroku ما را با GitHub احراز هویت کنید (فقط یک بار انجام شد).
  3. به پنل مدیریت برنامه Heroku ما بروید.
  4. در منوی Deployment method، GitHub را انتخاب کنید. سپس Heroku لیستی از پروژه های موجود را در حساب GitHub ما نشان می دهد.
  5. ما مخزن GitHub خود را انتخاب می کنیم.
  6. Heroku به مخزن GitHub متصل می شود.
heroku login
# file: hello-visitor/Procfilerelease: ./heroku-release.sh

ما باید ابزارهای Heroku محلی خود را با اعتبار خود از طریق پیکربندی کنیم مرحله احراز هویت:

کار باقی مانده این است که برنامه خود را با استفاده از Heroku در وب در دسترس قرار دهیم. توجه: برای تکمیل این آموزش، باید برای یک حساب Eco plan در Heroku ثبت نام کنید.

مرور کلی Heroku

در این مرحله، برنامه Heroku ما تمام مراحل در خط لوله استقرار را پیکربندی کرده و متغیرهای محیطی ما را تنظیم می کند. آخرین مرحله پیکربندی، نشان دادن Heroku به مخزن کد منبع ما است.

مخزن GitHub

DEBUG_TEMPLATES