فاکتور هفتم: Port Binding
فاکتور هفتم در 12-Factor App مربوط به Port Binding است. اپلیکیشن باید سرویسهای خود را از طریق اتصال به پورت (Port) ارائه دهد و برای اجرای سرویسهای وب به وبسرور خارجی یا محیط injection شده وابسته نباشد.
در برخی سیستمها، وب اپلیکیشنها به عنوان ماژول داخل وبسرور اجرا میشوند. برای مثال، اپلیکیشنهای PHP ممکن است داخل Apache HTTPD اجرا شوند و اپلیکیشنهای Java داخل Tomcat. اما در مدل 12-Factor، اپلیکیشن بهصورت self-contained است و خود سرویس وب را ارائه میکند.

نحوه عملکرد
- اپلیکیشن با bind شدن به یک پورت HTTP درخواستها را دریافت میکند.
- در محیط توسعه، توسعهدهنده میتواند با مراجعه به URL محلی مانند
http://localhost:5000/به سرویس دسترسی پیدا کند. - در محیط production، یک لایه routing درخواستها از hostname عمومی به پورتهای اپلیکیشن هدایت میکند.
ابزارهای رایج
این مدل معمولاً با افزودن کتابخانههای وبسرور به اپلیکیشن پیادهسازی میشود، به عنوان مثال:
- Python: Tornado
- Ruby: Thin
- Java/JVM: Jetty
این کار کاملاً در فضای کاربر (User Space) انجام میشود و قرارداد با محیط اجرا، ارائه سرویس از طریق یک پورت مشخص است.
Port Binding برای سرویسهای دیگر
HTTP تنها سرویسی نیست که میتواند از طریق port binding ارائه شود. تقریباً هر نرمافزار سرور میتواند با bind شدن به یک پورت و دریافت درخواستها اجرا شود. مثالها:
- ejabberd برای پروتکل XMPP
- Redis برای پروتکل Redis
این رویکرد همچنین اجازه میدهد که یک اپلیکیشن به عنوان Backing Service برای اپلیکیشن دیگر عمل کند. در این حالت، URL اپلیکیشن ارائهدهنده به عنوان resource handle در config اپلیکیشن مصرفکننده قرار میگیرد.