The Twelve-Factor App

VII. Прив’язка портів

Експортуйте сервіси за допомогою прив’язки портів (port binding)

Веб-застосунки іноді запускаються всередині контейнера веб-сервера. Наприклад, PHP-застосунок може бути запущений як модуль всередині Apache HTTPD або Java-застосунок може бути запущений всередині Tomcat.

Застосунок дванадцяти факторів є повністю автономним і в процесі виконання, щоб створити веб-сервіс, доступний через web, не покладається на ін’єкцію веб-сервера в середовище виконання. Веб-застосунок експортує HTTP-сервіс шляхом прив’язки до порту і прослуховує запити, що надходять на цей порт.

У локальному development середовищі розробник відвідує URL-адресу вигляду http://localhost:5000/ для доступу до сервісу, що експортується застосунком. При розгортанні рівень маршрутизації обробляє запити до загальнодоступного хосту і перенаправляє їх до порту, до якого прив’язано веб-процес.

Як правило, це реалізується за допомогою оголошення залежностей шляхом додавання бібліотеки веб-сервера до застосунку, наприклад, Tornado для Python, Thin для Ruby або Jetty для Java та інших мов на основі JVM. Це відбувається повністю в просторі користувача, тобто в коді застосунку. Прив’язка до порту для обробки запитів є “угодою” із середовищем виконання.

HTTP — не єдиний сервіс, який може бути експортований шляхом прив’язки до порту. Майже будь-який вид серверного програмного забезпечення може бути запущений, прив’язаний до порту і може очікувати вхідні запити. Прикладами є ejabberd (використовує XMPP) і Redis (використовує протокол Redis).

Також зверніть увагу, що підхід прив’язки до портів означає, що застосунок може виступати як стороння служба для іншого застосунку, надаючи свою URL-адресу як ресурс в конфігурації застосунку-споживача.