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-адресу як ресурс в конфігурації застосунку-споживача.