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.