Integracja Hudsona na GlassfishV3 App Server z Apache 2 i mod_proxy
Długi i skomplikowany tytuł oznacza wieczór spędzony nad konsolą i próbę integracji kilku rzeczy, które za boga nie chcą się integrować w sposób prosty i przyjemny.
Niestety tak to już w życiu bywa, że najbardziej przydatne narzędzia trzeba konfigurować z palucha. Zakładam, że masz zainstalowanego Apacha 2.x i znasz hasło roota. Zakładam też, że masz zainstalowanego Glassfisha i działa na nim Hudson. Generalnie to co pokarzę można to zrobić z każdą aplikacją puszczona na dowolnym serwerze aplikacji.
Krok 1. Przekierowanie portów na routerze.
Jeżeli pomiędzy tobą, a siecią stoi router to zaloguj się na niego i przekieruj port 80 na komputer na którym będzie hulał Hudson. Jeżeli jesteś hardkorem przekieruj też port 4848, który to odpowiada za administrację serwerem Glassfish. Odradzam jednak takie działania o ile nie pracujesz w Holiłudzie i nie masz naprawdę ważnych informacji na serwerze. Złota zasada mówi, że nie należy pozwalać na administrację serwerami z poza sieci.
W razie problemów RTFM. Jeżeli jakimś cudem nie znasz hasła na router w manualu powinna być instrukcji jak zresetować router oraz domyślne hasło administratora.
Krok 2. Instalacja modułów Apache
Żeby wszytko działało jak Stallman przykazał potrzebujemy następujących modułów serwera apache:
- mod_proxy
- mod_proxy_http
- mod_proxy_html
- mod_rewrite
Uwaga, są dwa moduły proxy, które przewijają się przy okazji integracji serwerów aplikacji z serwerem httpd. Mod_jk i mod_proxy_ajp nie instalujemy ich, bo nie są nam potrzebne.
Sam proces instalacji jest banalnie prosty. Wystarczy zalogować się na roota i w konsoli wpisać:
Listing 1. Instalacja modułów
$ a2enmod proxy
$ a2enmod proxy_http
$ a2enmod proxy_html
$ a2enmod rewrite
Jeżeli coś nie pójdzie to najprawdopodobniej trzeba posłużyć się apt-get install i doinstalować odpowiednie paczki.
Dziwić może obecność mod\_rewrite, ale wynika to buga w Hudsonie.
Krok 3. Konfiguracja modułów
Krok ostatni to konfiguracja tego wszystkiego. Nie jest to skomplikowane, ale w googlach nie ma ani słowa o tym jak poradzić sobie z konfiguracją.
Po pierwsze edytujemy plik /etc/apache2/mods-enabled/proxy.conf
Listing 2. proxy.conf
<ifmodule mod_proxy.c="">
ProxyRequests Off
ProxyPreserveHost On
ProxyVia On
<proxy>
Order deny,allow
Allow from all
</proxy>
ProxyPass /hudson http://localhost:8080/hudson
ProxyPassReverse /hudson http://localhost:8080/hudson
</ifmodule>
Kolejny element to plik rewrite.conf
Listing 3. rewrite.conf
Options FollowSymLinks
RewriteEngine On
RewriteRule ^/hudsonjob(.*)$ /hudson/job$1 [L,R]
RewriteRule ^/hudsonuser(.*)$ /hudson/user$1 [L,R]
RewriteRule ^/updateCenter(.*)$ /hudson/updateCenter$1 [L,R]
RewriteRule ^/hudsonnocacheImages(.*)$ /hudson/nocacheImages$1 [L,R]
RewriteRule ^/hudson/j_acegi_security_check$ /hudson/j_security_check [L,R]
I to wszytko. Należy jeszcze zrestartować Apacha i śmiga.
Słowo wytłumaczenia
Warto konfigurację przenieść do osobnego pliku w obrębie folderu /etc/apache2/sites-enabled. Szczególnie jest to wskazane jeżeli mamy zamiar zarządzać większą ilością aplikacji. W takim przypadku możemy utworzyć plik hudson o następującej zawartości
Listing 4. hudson
#plik konfiguracyjny dla hudsona
<ifmodule mod_proxy.c="">
ProxyPass /hudson http://localhost:8080/hudson
ProxyPassReverse /hudson http://localhost:8080/hudson
</ifmodule><ifmodule mod_rewrite.c="">
Options FollowSymLinks
RewriteEngine On
RewriteRule ^/hudsonjob(.*)$ /hudson/job$1 [L,R]
RewriteRule ^/hudsonuser(.*)$ /hudson/user$1 [L,R]
RewriteRule ^/updateCenter(.*)$ /hudson/updateCenter$1 [L,R]
RewriteRule ^/hudsonnocacheImages(.*)$ /hudson/nocacheImages$1 [L,R]
RewriteRule ^/hudson/j_acegi_security_check$ /hudson/j_security_check [L,R]
</ifmodule>
I to tyle.