منظور از Procfile چیست؟ Procfile چه کاربردی در Git دارد؟ چطور میتوان یک Procfile ساخت؟ محتوای Procfile را چگونه باید نوشت؟ در این مقاله به دنبال معرفی Procfile و آشنایی با نحوهی ساخت Procfile برای یک اپلیکیشن یا پروژه جهت استقرار در سکوی ابری آروان به صورت مستقیم از روی یک Repository در Github هستیم.
هنگامی که قصد ساخت یک اپلیکیشن از روی پروژه Github خودمان را داریم باید درون ریشه Repository فایلهای مورد نیاز برای عملیات Build را معرفی کنیم تا Repository ما توسط Builder آروان قابل شناسایی باشد. یکی از این فایلها که بودنش در هر Repository ای نیاز هست، فایل Procfile نامیده میشود. هر developer ای برای اینکه مشخص کند برای اجرای اپلیکیشن اش چه کامندی باید اجرا شود، باید Procfile آن پروژه را نیز بنویسد.
فایل Procfile حاوی محتویاتی هست که منجر به اجرا شدن خودکار اپلیکیشن بر روی سکوی ابری میشود. اما محتویات این فایل دارای Template و قالب خاصی هست که بر اساس نوع کد و کاری که در پروژه قرار است انجام شود تعیین میشود و برای هر پروژه میتواند دربردارنده مقادیر متفاوتی باشد. به عنوان مثال در فایل Procfile میتوان دستوری که قرار است توسط اپلیکیشن پایتونی و یا NodeJS ای اجرا شود را قرار داد. یا به کمک Procfile میتوان مشخص کرد چه نوع proccess ای در اپلیکیشن با چه کامندی اجرا شود.
به عنوان مثال در Procfile زیر مشخص شده است که کد با NodeJS نوشته شده و یک web application server قرار است با دستور npm start اجرا شود:
یا به عنوان مثال از Procfile زیر میتوان فهمید که یک پروژه Python قرار است اجرا شود:
اما یک Procfile بسته به پروژه ممکن است محتوای پیچیده باشد و چندین نوع proccess را در خود جای داده باشد. مانند Procfile زیر:
در Procfile فوق به ازای هر خط یک نوع proccess و دستوری که آن را اتوماتیک اجرا میکند مشخص شده است. از این رو Procfile باید جوری نوشته شود که حاوی دستورالعمل اجرای خودکار پروژه باشد. همچنین Procfile به نوعی نقش فایل کانفیگ را نیز بازی میکند چراکه سکوی ابری به کمک Procfile میتواند اپلیکیشن را به طور خودکار اجرا کند.
در واقع Procfile به سکوی ابری اعلام میکند و میفهماند که باید چه کامندی را برای اجرای خودکار اپلیکیشن استفاده کند. به عبارت دیگر Procfile باعث میشود که سکوی ابری تشخیص دهد و بفهمد که چطور میتواند اپلیکیشن و پروژه را اتوماتیک استارت کند.
برای اینکه ساختار و معماری یک پروژه را متوجه شوید تنها کافی هست که به Procfile آن نگاه بیاندازید. چراکه به ازای هر خط در Procfile یک proccess ای که قرار است توسط اپلیکیشن انجام شود که دستوری که آن را اجرا می کند وجود دارد.
فایل Procfile به صورت case sensitive هست و در صورتی که نام فایل و محتویات آن درست نوشته نشده باشد توسط سکوی ابری شناسایی نمیشود. اینکه محتوای Procfile پروژه شما چه چیزی باشد بستگی به این دارد که چه سرویسی در پروژه پیادهسازی شده است و برای اینکه بتوانید یک Procfile درست در Repository خود داشته باشید یا باید با اتکا به سواد developer ای خودتان فایل را بر اساس Syntax و قالب استاندارد آن بنویسید و یا به نحوی از نمونه Procfile پروژه های مشابه الگو برداری کنید.
همنطور که پیشتر اشاره شد، هر خط از Procfile یک نوع proccess ای که قرار است اجرا شود را تعیین میکند و در مقابل آن نیز کامند مورد نیاز برای اجرای آن قرار داده شده است.
<process_name1>
: <command1>
از این رو ابتدا به بررسی یکی از رایجترین نوع proccess type در Procfile میرویم که به نوعی process type پیشفرض هست و در اکثر پروژهها به کار برده میشوند.
زمانی که از عبارت web در قسمت proccess name استفاده میشود به این معنی هست که بخشی از اپلیکیشن و پروژه قرار است از HTTP استفاده کند و با ترافیک وب کار خواهد کرد. از این رو سکوی ابری در این خط از Procfile با خواندن کامندی که در مقابل عبارت web قرار دارد این سرویس را اجرا میکند و متوجه میشود که process model این اپلیکیشن با Web Server و ریکوستهای HTTP سروکار دارد و . به عبارت دیگر اگر اپلیکیشن و پروژه شما شامل Web Server هم میشود باید در یک لاین از Procfile خود در مقابل عبارت web ، دستور و Startup Command ای که برای اجرای این سرویس نیاز هست را تایپ کنید. حال اینکه آن دستور چه چیزی باشد بستگی به کد برنامه، زبان برنامه نویسی و نوع سرویس استفاده شده دارد.
به عنوان مثال در تصویر زیر مربوط به Procfile اپلیکیشنی هست که از Django و Gunicorn استفاده میکند:
اما به جز web باقی process type ها عنوان process name اختیاری دارند و میتوان به صورت دلخواه نام process هر چیزی باشد ولی بهتر است مرتبط با process و دستوری باشد که در آن لاین از Procfile قرار است اجرا شود. (مثل worker ، clock و ... )