The Twelve-Factor App

VII. Przydzielanie portów

Udostępniaj usługi przez przydzielanie portów

Zdarza się, że aplikacje internetowe uruchamiane są w ramach serwera web. Napisane w PHP np. działają jako moduł Apache HTTPD, natomiast aplikacje w Javie mogą być uruchomiane wewnątrz serwera aplikacji, np. Tomcat.

Aplikacja 12factor nie posiada zewnętrznych zależności co czyni ją niezależną wobec innych modułów znajdujących się na serwerze. Aplikacja internetowa udostępniać będzie np. HTTP w formie usługi przez przydzielenie portu. Umożliwia jej to obsługę zapytań przychodzących do wybranego portu.

Aby skorzystać z usługi udostępnionej przez aplikację, developer może otworzyć adres URL jak np. http://localhost:5000/. W przypadku aplikacji wdrożonej w środowisku produkcyjnym zapytania do udostępnionej publicznie nazwy hosta są obsługiwane przez warstwę nawigacji. Kierowane są one później do procesu sieciowego udostępnionego na danym porcie.

Kwestię obsługi takich zapytań można rozwiązać dodając bibliotekę webservera jako kolejną zewnętrzną zależność, jak np. Tornado w Pythonie, Thin w Ruby, lub Jetty dla Javy i innych języków opierających się na JVM. Obsługa zapytania jest całkowicie oprogramowana przez kod aplikacji, natomiast kontraktem ze środowiskiem wykonawczym jest przydzielenie portu w celu obsłużenia tego zapytania.

HTTP nie jest jedyną usługą, którą możną eksportować przez przydzielenie portu. Niemal każdy rodzaj oprogramowania serwerowego może być uruchomiony przez przydzielenie portu na którym jest uruchomiony proces i oczekiwać na przychodzące zapytania. Do przykładów należą ejabberd (komunikujący się przez XMPP), oraz Redis (komunikujący się przez Redis protocol).

Warto również zauważyć, że przez przydzielenie portu aplikacja może pełnić funkcję usługi wspierającej dla innej aplikacji przez udostępnienie swojego adresu URL jako adres zasobu w konfiguracji tejże aplikacji.