Aplikacja Play Framework na serwerze frontowym Apache - konfiguracja
AdministracjaAplikacje 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).