Aplikacja Play Framework na serwerze frontowym Apache - konfiguracja

Administracja

Aplikacje bazujące na frameworku Play mają wiele opcji dostarczania oraz uruchamiania na serwerach produkcyjnych. W przypadku gdy aplikacja ma wydzielony serwer autonomiczny wystarczy...


Aplikacje bazujące na frameworku Play mają wiele opcji dostarczania oraz uruchamiania na serwerach produkcyjnych. W przypadku gdy aplikacja ma wydzielony serwer autonomiczny wystarczy uruchomić ją na porcie 80 stosując flagę -Dhttp.Port=80. Sprawa robi się bardziej skomplikowana jeśli mamy serwer współdzielony z innymi aplikacjami, bądź stronami www, które korzystają z tego samego portu.

W przypadku najczęściej stosowanego serwera HTTP - Apache od wersji 2.4.5 (koniecznie zalecamy aktualizację z wcześniejszych wersji) korzystamy z dodatkowych modułów, mianowicie:

  • mod_proxy - implementacja bramy proxy dla serwera
  • mod_proxy_wstunnel - wsparcie dla tunelowania protokołu WebSocket (jeśli jest potrzeba użycia w aplikacji)

Przy typowej instalacji serwera Apache, plik ładowania dodatkowych modułów Apache znajduje się w lokalizacji:

/etc/httpd/conf.modules.d/00-proxy.conf

Edytujemy go w celu dopisania / odkomentowania modułów proxy.

# This file configures all the proxy modules:
LoadModule proxy_module modules/mod_proxy.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

Aby dodać aplikację Play pod daną domeną, tworzymy wirtualnego hosta tradycyjnie dodając odpowiedni wpis do pliku konfiguracyjnego Apache (często jest to odrębny plik konfiguracyjny vhosts). Standardowa ścieżka do pliku konfiguracji:

/etc/httpd/conf/httpd.conf

Podstawowy wpis implementujący obsługę naszej aplikacji przez serwer Apache wygląda następujaco (zakładamy że aplikacja będzie uruchomiona na porcie 9000, domeną będzie nasza-domena.pl i posiadamy komunikację po WebSocket pod URL nasza-domena.pl/socket):

<VirtualHost nasza-domena.pl:80>
	# używamy przychodzące nagłówki żądań w wywołaniach proxy
	ProxyPreserveHost on
	# wyłączamy przekazywanie żądań proxy (dla bezpieczeństwa)
	ProxyRequests off
	# nazwa naszego serwera
	ServerName "nasza-domena.pl"
	
	# dyrektywy dla proxy
	<Proxy *>
			Order deny,allow
			Deny from all
			Allow from all
	</Proxy>

	# bardzo ważna część, kolejność się liczy
		
	# ustawienie przekierowania komunikacji dla protokołu WebSocket
	ProxyPass /socket ws://127.0.0.1:9000/socket
	ProxyPassReverse /socket ws://127.0.0.1:9000/socket

	# ustawienie przekierowania komunikacji dla naszej aplikacji
	ProxyPass / http://127.0.0.1:9000/
	ProxyPassReverse / http://127.0.0.1:9000/
</VirtualHost>

Pozostało tylko zrestartować nasz serwer poleceniem:

systemctl restart httpd

...oraz oczywiście odpalić instancję naszej aplikacji w trybie produkcyjnym. Pokazana metoda także bardzo dobrze się sprawdza jeśli chcemy wprowadzić load balancing naszej aplikacji lub po prostu zwiększyć tolerancję na błędy w trybie produkcyjnym (to wymaga dodatkowych modułów i wpisów w konfiguracji).

Opublikowano Marzec 2015