رپرتاژ

هاست پایتون؛ از requirements.txt تا یک آدرس آنلاین

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

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

برخلاف یک صفحه ساده HTML، نمی‌توانید فایل‌های یک پروژه Python را فقط روی هاست کپی کنید و انتظار داشته باشید برنامه خودش اجرا شود. سرویس میزبانی باید بداند پروژه از کدام نسخه‌ی Python استفاده می‌کند، چه وابستگی‌هایی دارد و با چه فرمانی باید اجرا شود.

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

اولین قدم: شناخت ساختار پروژه

در بیشتر پروژه‌های Python، اطلاعات لازم برای نصب وابستگی‌ها از قبل در سورس پروژه وجود دارد. این اطلاعات ممکن است در فایل requirements.txt قرار گرفته باشند. برخی پروژه‌ها نیز از pyproject.toml و ابزارهایی مانند Poetry یا uv استفاده می‌کنند.

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

در پاستاکلود (Paasta)، ساختار پروژه بررسی می‌شود و نتیجه تشخیص پیش از شروع Build در اختیار شما قرار می‌گیرد. به این ترتیب می‌توانید ببینید پروژه چگونه شناسایی شده و پیش از ساخت سرویس، تنظیمات پیشنهادی را بررسی کنید.

تشخیص وابستگی‌ها و فرایند Build پروژه در هاست پایتون

اگر پروژه از Cache وابستگی‌ها پشتیبانی کند، در Build های بعدی لازم نیست همه پکیج‌ها دوباره از ابتدا دریافت و نصب شوند. این موضوع، به‌ویژه در پروژه‌هایی با وابستگی‌های زیاد، می‌تواند زمان Build را کاهش دهد.

کدام نسخه Python باید اجرا شود؟

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

اطلاعات مربوط به نسخه Python ممکن است در فایل‌هایی مانند .python-version یا runtime.txt ثبت شده باشد. بعضی پروژه‌ها نیز محدودیت نسخه را در pyproject.toml مشخص می‌کنند.

یک هاست پایتون مناسب باید بتواند این اطلاعات را بخواند و محیط اجرا را با نسخه مورد نیاز پروژه هماهنگ کند. اگر نسخه‌ای در پروژه تعیین نشده باشد، پلتفرم می‌تواند یک نسخه پایدار پیش‌فرض را پیشنهاد دهد.

با این حال، بهتر است نسخه Python را به‌صورت مشخص در تنظیمات پروژه تعیین کنید. مشخص بودن Runtime باعث می‌شود رفتار پروژه در محیط توسعه و محیط آنلاین تا حد ممکن یکسان باشد و به‌روزرسانی نسخه پیش‌فرض پلتفرم، تغییر غیرمنتظره‌ای در اجرای پروژه ایجاد نکند.

نصب وابستگی‌ها فقط نیمی از مسیر است

بعد از انتخاب نسخه Python و نصب پکیج‌ها، هنوز یک سوال مهم باقی می‌ماند:

اپلیکیشن دقیقاً با چه دستوری باید اجرا شود؟

این دستور به فریم‌ورک و ساختار پروژه بستگی دارد. برای سرویس‌های ASGI مانند FastAPI، معمولاً فرمانی شبیه نمونه زیر استفاده می‌شود:

uvicorn module:app --host 0.0.0.0 --port $PORT

برای پروژه‌های WSGI، مانند بسیاری از اپلیکیشن‌های Django و Flask، نیز ممکن است فرمانی شبیه نمونه زیر مناسب باشد:

gunicorn module:app --bind 0.0.0.0:$PORT

تنظیم نسخه Python و فرمان اجرای ASGI و WSGI در هاست پایتون

در این نمونه‌ها باید به‌جای module و app، نام واقعی ماژول و نقطه ورود اپلیکیشن پروژه را قرار دهید. بنابراین نمی‌توان همین فرمان‌ها را بدون تغییر برای همه پروژه‌ها استفاده کرد.

پاستاکلود می‌تواند برای فریم‌ورک‌های شناخته‌شده، فرمان اجرای مناسب را پیشنهاد دهد. اگر پروژه ساختار سفارشی داشته باشد، می‌توانید فرمان اجرا را خودتان مشخص کنید. نتیجه تشخیص و تنظیمات اجرا نیز پیش از ساخت سرویس در اختیار شما قرار می‌گیرد تا بتوانید از درست بودن ماژول و نقطه ورود پروژه مطمئن شوید.

پورت سرویس نیز باید بر اساس مقداری تنظیم شود که محیط اجرا در اختیار اپلیکیشن قرار می‌دهد. به همین دلیل در فرمان‌های بالا از متغیر PORT$ استفاده شده است. استفاده از یک شماره پورت ثابت ممکن است روی سیستم توسعه کار کند، اما برای محیط آنلاین مناسب نیست.

چه زمانی به Dockerfile نیاز داریم؟

برای بسیاری از پروژه‌های Python، کافی است نسخه زبان، وابستگی‌ها و فرمان اجرا را مشخص کنید. در چنین شرایطی، نوشتن Dockerfile می‌تواند یک مرحله اضافی باشد.

اما گاهی یکی از پکیج‌های پروژه به یک کتابخانه یا ابزار در سطح سیستم‌عامل نیاز دارد. برای مثال، ممکن است اپلیکیشن برای ارتباط با PostgreSQL، پردازش تصویر یا تبدیل فایل‌ها به ابزارها و کتابخانه‌های سیستمی دیگری نیاز داشته باشد.

در چنین شرایطی می‌توانید یک فایل Dockerfile به پروژه اضافه کنید و محیط مورد نیاز را با جزئیات بیشتری تعریف کنید. پاستاکلود از Dockerfile پشتیبانی می‌کند و پیش از Build نیز می‌تواند وجود آن را در پروژه تشخیص دهد.

قاعده ساده این است:

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

تنظیمات محیط اجرا نباید داخل کد باشند

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

پاستاکلود از متغیرهای محیطی و Secret پشتیبانی می‌کند تا این اطلاعات در زمان اجرا در اختیار اپلیکیشن قرار بگیرند. با این روش می‌توانید یک سورس یکسان را در محیط‌های مختلف استفاده کنید و نیازی به نگهداری رمزها و اطلاعات حساس داخل Repository نداشته باشید.

برای مثال، به‌جای قرار دادن مستقیم رشته اتصال دیتابیس در تنظیمات Django، می‌توانید آن را از یک متغیر محیطی بخوانید:

import os
DATABASE_URL = os.environ["DATABASE_URL"]

اگر پروژه به دیتابیس نیاز داشته باشد، دیتابیس‌های مدیریت‌شده پاستاکلود می‌توانند شامل PostgreSQL، MySQL، MongoDB و Redis باشند. نسخه‌ها و پلن‌های قابل خرید به ناحیه و تنظیمات فعال پلتفرم بستگی دارند و باید هنگام ساخت منبع بررسی شوند.

برای اطلاعاتی که باید مستقل از Build و اجرای مجدد سرویس حفظ شوند نیز می‌توان از دیسک پایدار استفاده کرد.

Build باید قابل مشاهده باشد

یکی از چالش‌های راه‌اندازی پروژه‌های Python این است که خطا می‌تواند در هر مرحله‌ای رخ دهد. شاید نسخه Python با یکی از بسته‌ها سازگار نباشد، نصب یک وابستگی شکست بخورد یا فرمان اجرا به ماژول اشتباهی اشاره کند.

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

در پاستاکلود، مراحل Build و وضعیت استقرار در یک جریان قابل مشاهده نمایش داده می‌شوند. اگر پروژه با مشکل مواجه شود، می‌توانید ببینید خطا در مرحله تشخیص پروژه، نصب وابستگی‌ها، Build یا اجرای سرویس رخ داده است.

این شفافیت برای پروژه‌های Python اهمیت زیادی دارد. بسیاری از خطاهای استقرار ارتباطی با منطق اصلی برنامه ندارند و به تفاوت میان محیط توسعه و محیط اجرا مربوط می‌شوند.

اگر نسخه جدید پروژه پس از استقرار به‌درستی کار نکند، امکان بازگشت به نسخه قبلی نیز می‌تواند کمک کند سرویس را بدون انجام دوباره فرایند استقرار، به آخرین نسخه پایدار برگردانید.

از سورس Python تا HTTPS

بعد از اینکه Build با موفقیت انجام شد و اپلیکیشن به‌درستی اجرا شد، سرویس می‌تواند یک آدرس HTTPS روی دامنه paasta.app در اختیار شما قرار دهد. اگر دامنه شخصی داشته باشید، می‌توانید آن را نیز به اپلیکیشن متصل کنید.

در نتیجه، برای شروع کار لازم نیست Nginx را به‌صورت دستی تنظیم کنید یا گواهی TLS را جداگانه دریافت و تمدید کنید. پروژه‌ای که تا چند دقیقه قبل فقط روی سیستم شما اجرا می‌شد، حالا از طریق یک آدرس امن در دسترس است.

اگر ترجیح می‌دهید فرایند استقرار را از طریق ترمینال انجام دهید، Paasta CLI برای Linux، macOS و Windows در دسترس است. در این حالت، فرایند می‌تواند به سادگی ورود به حساب، رفتن به پوشه پروژه و اجرای دستور Deploy باشد:

paasta login
cd my-python-app
paasta deploy

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

هاست پایتون باید محیط پروژه را بازسازی کند

وقتی درباره هاست Python صحبت می‌کنیم، موضوع فقط پشتیبانی از فایل‌های با پسوند py.نیست. سرویس میزبانی باید بتواند محیطی را که پروژه برای اجرا به آن نیاز دارد، بازسازی و مدیریت کند.

مهم‌ترین بخش‌های این فرایند عبارت‌اند از:

  • نسخه مناسب Python

  • وابستگی‌های پروژه

  • فرمان اجرای WSGI یا ASGI

  • پورت سرویس

  • متغیرهای محیطی و اطلاعات حساس

  • دیتابیس و فضای ذخیره‌سازی مورد نیاز

  • فرایند Build و پیام‌های خطای قابل مشاهده

  • دامنه و HTTPS

پاستاکلود با آدرس “paasta.cloud” یک PaaS فارسی است که مسیر استقرار را از دریافت سورس تا اجرای اپلیکیشن روی وب مدیریت می‌کند. هزینه منابع و موجودی کیف پول با تومان نمایش داده می‌شود. بسته به نوع سرویس و پلن فعال، منابع می‌توانند به‌صورت ماهانه یا PAYG ارائه شوند.

برای آنلاین‌کردن پروژهٔ Django، Flask یا FastAPI خود، همین حالا به صفحهٔ هاست پایتون سر بزنید و سرویس مناسب پروژه‌تان را راه‌اندازی کنید.


هاست پایتون پاستاکلود

نمایش بیشتر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *